From 0485a96ff8981abf913c43e339d5c1d56258d1b0 Mon Sep 17 00:00:00 2001 From: Sergey <83376337+freak12techno@users.noreply.github.com> Date: Mon, 24 Jun 2024 01:14:30 +0300 Subject: [PATCH] chore: add fetchers test (#63) * chore: add balance fetcher test * chore: improve test * chore: add nop logger and use it in tests * chore: add commission fetcher test * chore: test init with multiple chains * chore: add rewards fetcher test * chore: pass config.Chains only to fetchers * chore: add self delegation fetcher test * chore: add delegations fetcher test * chore: add unbonds fetcher test * chore: add staking params fetcher test * chore: add slashing params fetcher test * chore: add consumers to staking params * chore: add validators fetcher test * chore: add soft opt-out threshold fetcher test * chore: add node info fetcher test * chore: do not init consumers on delegations fetcher * chore: add signing info fetcher * chore: add consumer validators fetcher * chore: add consumer info fetcher * chore: add price fetcher test, removed dex screener * chore: probably fixed go.mod thing * chore: some more tests --- assets/assigned-key-empty.json | 1 + assets/assigned-key.json | 1 + assets/balances.json | 12 + assets/coingecko.json | 1 + assets/commission.json | 10 + assets/consumer-info.json | 14 + assets/consumer-validators.json | 1 + assets/delegations.json | 19 + assets/error.json | 5 + assets/fs.go | 9 + assets/fs_test.go | 19 + assets/node-info.json | 1 + assets/rewards.json | 8 + assets/self-delegation.json | 13 + assets/signing-info.json | 1 + assets/slashing-params.json | 9 + assets/soft-opt-out-threshold-invalid.json | 1 + assets/soft-opt-out-threshold.json | 1 + assets/staking-params.json | 13 + assets/unbonds.json | 22 + assets/validators.json | 1 + config.example.toml | 12 +- go.mod | 167 +- go.sum | 1951 +---------------- pkg/app.go | 32 +- pkg/fetchers/balance.go | 10 +- pkg/fetchers/balance_test.go | 341 +++ pkg/fetchers/commission.go | 10 +- pkg/fetchers/commission_test.go | 218 ++ pkg/fetchers/consumer_info.go | 10 +- pkg/fetchers/consumer_info_test.go | 244 +++ pkg/fetchers/consumer_validators.go | 8 +- pkg/fetchers/consumer_validators_test.go | 231 ++ pkg/fetchers/delegations.go | 13 +- pkg/fetchers/delegations_test.go | 216 ++ pkg/fetchers/node_info.go | 10 +- pkg/fetchers/node_info_test.go | 255 +++ pkg/fetchers/price.go | 59 +- pkg/fetchers/price_test.go | 162 ++ pkg/fetchers/rewards.go | 10 +- pkg/fetchers/rewards_test.go | 285 +++ pkg/fetchers/self_delegation.go | 10 +- pkg/fetchers/self_delegation_test.go | 284 +++ pkg/fetchers/signing_info.go | 18 +- pkg/fetchers/signing_info_test.go | 733 +++++++ pkg/fetchers/slashing_params.go | 8 +- pkg/fetchers/slashing_params_test.go | 255 +++ pkg/fetchers/soft_opt_out_threshold.go | 14 +- pkg/fetchers/soft_opt_out_threshold_test.go | 280 +++ pkg/fetchers/staking_params.go | 8 +- pkg/fetchers/staking_params_test.go | 213 ++ pkg/fetchers/unbonds.go | 8 +- pkg/fetchers/unbonds_test.go | 216 ++ pkg/fetchers/validators.go | 8 +- pkg/fetchers/validators_test.go | 207 ++ pkg/generators/single_validator_info_test.go | 8 +- pkg/generators/validator_rank_test.go | 10 +- pkg/http/http.go | 1 - pkg/http/http_test.go | 45 + pkg/logger/logger.go | 5 + pkg/logger/logger_test.go | 7 + .../dex_screener/dex_screener.go | 74 - pkg/tendermint/rpc.go | 17 +- 63 files changed, 4595 insertions(+), 2240 deletions(-) create mode 100644 assets/assigned-key-empty.json create mode 100644 assets/assigned-key.json create mode 100644 assets/balances.json create mode 100644 assets/coingecko.json create mode 100644 assets/commission.json create mode 100644 assets/consumer-info.json create mode 100644 assets/consumer-validators.json create mode 100644 assets/delegations.json create mode 100644 assets/error.json create mode 100644 assets/fs_test.go create mode 100644 assets/node-info.json create mode 100644 assets/rewards.json create mode 100644 assets/self-delegation.json create mode 100644 assets/signing-info.json create mode 100644 assets/slashing-params.json create mode 100644 assets/soft-opt-out-threshold-invalid.json create mode 100644 assets/soft-opt-out-threshold.json create mode 100644 assets/staking-params.json create mode 100644 assets/unbonds.json create mode 100644 assets/validators.json create mode 100644 pkg/fetchers/balance_test.go create mode 100644 pkg/fetchers/commission_test.go create mode 100644 pkg/fetchers/consumer_info_test.go create mode 100644 pkg/fetchers/consumer_validators_test.go create mode 100644 pkg/fetchers/delegations_test.go create mode 100644 pkg/fetchers/node_info_test.go create mode 100644 pkg/fetchers/price_test.go create mode 100644 pkg/fetchers/rewards_test.go create mode 100644 pkg/fetchers/self_delegation_test.go create mode 100644 pkg/fetchers/signing_info_test.go create mode 100644 pkg/fetchers/slashing_params_test.go create mode 100644 pkg/fetchers/soft_opt_out_threshold_test.go create mode 100644 pkg/fetchers/staking_params_test.go create mode 100644 pkg/fetchers/unbonds_test.go create mode 100644 pkg/fetchers/validators_test.go create mode 100644 pkg/http/http_test.go delete mode 100644 pkg/price_fetchers/dex_screener/dex_screener.go diff --git a/assets/assigned-key-empty.json b/assets/assigned-key-empty.json new file mode 100644 index 0000000..bd2d6a0 --- /dev/null +++ b/assets/assigned-key-empty.json @@ -0,0 +1 @@ +{"consumer_address":""} \ No newline at end of file diff --git a/assets/assigned-key.json b/assets/assigned-key.json new file mode 100644 index 0000000..13329f0 --- /dev/null +++ b/assets/assigned-key.json @@ -0,0 +1 @@ +{"consumer_address":"cosmosvalcons1w426hkttrwrve9mj77ld67lzgx5u9m8pyplqg2"} \ No newline at end of file diff --git a/assets/balances.json b/assets/balances.json new file mode 100644 index 0000000..01ee974 --- /dev/null +++ b/assets/balances.json @@ -0,0 +1,12 @@ +{ + "balances": [ + { + "denom": "uatom", + "amount": "596250" + } + ], + "pagination": { + "next_key": null, + "total": "1" + } +} diff --git a/assets/coingecko.json b/assets/coingecko.json new file mode 100644 index 0000000..23dae20 --- /dev/null +++ b/assets/coingecko.json @@ -0,0 +1 @@ +{"cosmos":{"usd":6.71}} \ No newline at end of file diff --git a/assets/commission.json b/assets/commission.json new file mode 100644 index 0000000..7614e27 --- /dev/null +++ b/assets/commission.json @@ -0,0 +1,10 @@ +{ + "commission": { + "commission": [ + { + "denom": "uatom", + "amount": "35387184.119122794099577747" + } + ] + } +} \ No newline at end of file diff --git a/assets/consumer-info.json b/assets/consumer-info.json new file mode 100644 index 0000000..db7397a --- /dev/null +++ b/assets/consumer-info.json @@ -0,0 +1,14 @@ +{ + "chains": [ + { + "chain_id": "neutron-1", + "client_id": "07-tendermint-1119", + "top_N": 95, + "min_power_in_top_N": "287843", + "validators_power_cap": 0, + "validator_set_cap": 0, + "allowlist": [], + "denylist": [] + } + ] +} \ No newline at end of file diff --git a/assets/consumer-validators.json b/assets/consumer-validators.json new file mode 100644 index 0000000..27db935 --- /dev/null +++ b/assets/consumer-validators.json @@ -0,0 +1 @@ +{"validators":[{"provider_address":"cosmosvalcons1qqqqrezrl53hujmpdch6d805ac75n220ku09rl","consumer_key":{"ed25519":"9tK9IT+FPdf2qm+5c2qaxi10sWP+3erWTKgftn2PaQM="},"power":"322186"},{"provider_address":"cosmosvalcons1qzgr0sk82ce080u78xs3cr5pat9jvtv7k85ajv","consumer_key":{"ed25519":"o+qPFJ66zagsptOWGsSpr7viNdw6anGFe2Mg8qO3yhs="},"power":"129342"},{"provider_address":"cosmosvalcons1qrxwan7srvknxwsm264l0nlc56uw6fd3mq0s7v","consumer_key":{"ed25519":"4JG2XY/etwz9fe4rDCAUkaIxpI9jmgiJqKqZQxp3758="},"power":"1191426"},{"provider_address":"cosmosvalcons1qxdeeg55f57vxmruwv5rau743etv3fw530uf8x","consumer_key":{"ed25519":"pMNHMW0FDjmxPuY4vC3nnLrZ2I285YT7sHkPnYI5iWk="},"power":"3867681"},{"provider_address":"cosmosvalcons1pqr96s9e6jk4zf4v7zavsqesjjp4wg8axrqrzs","consumer_key":{"ed25519":"aDTU4Fqi9de6+S1FovDAU7X35nX4ctEUtKuziJjwAeE="},"power":"522579"},{"provider_address":"cosmosvalcons1prcacwwfjesnpwtq36uvyd86y96rv8azq63ken","consumer_key":{"ed25519":"EUAiIFsryeRG12/SohRWkO/ZGvKjKR0bHvtnqUjJ9k4="},"power":"180442"},{"provider_address":"cosmosvalcons1px0zkz2cxvc6lh34uhafveea9jnaagckmrlsye","consumer_key":{"ed25519":"sYrao3iUMzioaREn/hsOEbwfGba5FDfHM39Z75rNXZU="},"power":"11012488"},{"provider_address":"cosmosvalcons1p2a6xmz5m5x2dfus4muk5qw58yhrvdzltw4q4u","consumer_key":{"ed25519":"Lczd+X79ty5wlt2s87qlGLh+KWzLe1vVMdWjWQl9pvQ="},"power":"1132567"},{"provider_address":"cosmosvalcons1pdpwglc4fcjdzqvyhvfwxg684trpc6uqck5sxk","consumer_key":{"ed25519":"hD/gQ46tWvu30az/3nuI3SmbTWjrR2GhvHczrrcwGt4="},"power":"3138510"},{"provider_address":"cosmosvalcons1p7gcgvfkwnjqu4lzteea74ngatm00vvqha7dy4","consumer_key":{"ed25519":"F6MftbAjsqGKd8Ap7yWd6P5TUGuW9uamNIjVWBrxyMo="},"power":"374674"},{"provider_address":"cosmosvalcons1zz8y0lqms4r0nrm755hj237vg3yhmvdl3ss6aw","consumer_key":{"ed25519":"f2UyfyYKIZppUi4joaKosboHZbtsIrVsHFPk9/P6Be4="},"power":"562467"},{"provider_address":"cosmosvalcons1ztp25r0xd73ln4ny6q746mmdsgttdk5p8yupga","consumer_key":{"ed25519":"W6yWTvAaYYG5iR6iVkm1aS0jpPtclCI3Woe1858dCLY="},"power":"347361"},{"provider_address":"cosmosvalcons1z0hr7p0jp34d3lf8e0hn8htp6hueanm0r04wd0","consumer_key":{"ed25519":"P5bVXtQROUYluem7UhCW4Xg/SvFijRlSmq6daONPk7M="},"power":"623790"},{"provider_address":"cosmosvalcons1zh6gz89dxfnqtz4pstf7ljxemg4y54l832cclm","consumer_key":{"ed25519":"yRYRuw6cvw00zILG1kLNTxnX9nLcHGT6tN1hTSTM+CM="},"power":"5387091"},{"provider_address":"cosmosvalcons1zcu7xjr06a09g3ll6f3r92q0rt88dnv29cly94","consumer_key":{"ed25519":"0nqOqPeIBbZKMdrGwGljsX4f75Iq/QOd8HN+BWX5lD0="},"power":"229561"},{"provider_address":"cosmosvalcons1zu87l4kh7jnf4tns5fzptlzw9jfgmch9q25f5v","consumer_key":{"ed25519":"wn1SKxmmRI4TchXUuQPOsirpAwQ9izhcjFLrRoZ/DA8="},"power":"1808436"},{"provider_address":"cosmosvalcons1rtst6se0nfgjy362v33jt5d05crgdyhfvvvvay","consumer_key":{"ed25519":"ki3hAxBz/OlLr40eDnNScpiD26r5aX3gp/qKJOYCh0Y="},"power":"565769"},{"provider_address":"cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc","consumer_key":{"ed25519":"11RXjc8fKHijVvMj+7nBnp7VdS6unbZc9fHwRHpe19I="},"power":"195322"},{"provider_address":"cosmosvalcons1rnknqueazcju3x4knpnhvpksudanva4f08558z","consumer_key":{"ed25519":"Rfkigqlss4au6QPUzoA+ZK1S3mxmF9K0Z+xXWGrykqw="},"power":"9839863"},{"provider_address":"cosmosvalcons1yxv746y5egu3l2p0q8pvv99lavgr6ptvdhx306","consumer_key":{"ed25519":"mIY8X2ymq9/vqeSuEfD4M1OcEeXGZac8/mfHgRBlbXA="},"power":"8442045"},{"provider_address":"cosmosvalcons1y4z96r4n205s2z43rmrpjl2aeds3npkm9akset","consumer_key":{"ed25519":"GUqbUS+7PeplNfxVcnDIyrXTLJPNdJQ4MQ6kBg5eYpw="},"power":"8207174"},{"provider_address":"cosmosvalcons1yk5ag5kntufq2zk7u6e3jd9mshpgzltk7knpja","consumer_key":{"ed25519":"cgv5xUg+nevsMRQsWwhNCpstrDmV74+uPqQ1q4XypFc="},"power":"479077"},{"provider_address":"cosmosvalcons19wd9t5alj0tnwhwjq7m4chk562u3my2xwt72qg","consumer_key":{"ed25519":"41azC47B8htQ1dDy9JyY008TkLeRjyVynI1YCdHe9q8="},"power":"192764"},{"provider_address":"cosmosvalcons19s49axu7lyp3vnazh5l3gpt3mhcz5qxvucqyks","consumer_key":{"ed25519":"iq6eBF5istdxDRjsS/t67nTnnBkU6mT9tevnhWGzudc="},"power":"654155"},{"provider_address":"cosmosvalcons19hu8r09xwvl78tfn76dqd792cnrttwcq8fpjr3","consumer_key":{"ed25519":"n9Mi6q5iU4aG0C24i0Ne4Dpd2lenw/4vjs1moQsciLw="},"power":"204153"},{"provider_address":"cosmosvalcons1xxfqlx7r5wdkdpmvcltdtevfuype80cwmrrtae","consumer_key":{"ed25519":"KUB/75XtxDhQzy36CV8DsW1sD4CGnHDN9RmtrHEVBYA="},"power":"4408624"},{"provider_address":"cosmosvalcons1xd3737tmqtkvqq5fuush8kp82scy0tx6882l4q","consumer_key":{"ed25519":"mPnu910hOOa1tAQ7pbOLFDxvllbQUmrbtGjqQrYg1nM="},"power":"352431"},{"provider_address":"cosmosvalcons1xly2n8wp2gudg57ql0h8c2ktah7j0s0yjr7nsn","consumer_key":{"ed25519":"Z8Bs/NBxshUqUG4gJI0/O6qMn/H/ZoD16Rl0tejctY0="},"power":"428242"},{"provider_address":"cosmosvalcons18fntfdwyx2dpf4z3j4w5qwahv0dvmp72x69edj","consumer_key":{"ed25519":"R6hJoI2bOkhzDmo37DcOlB9vZHkuyhMzGePDCqlVbn0="},"power":"202554"},{"provider_address":"cosmosvalcons18dyu497yj6grx936sus49pcy38k7huyq3cflu7","consumer_key":{"ed25519":"QSj57esNvaReFnb16NGNNunogjwn1cxxnUEaaiBuyPI="},"power":"774365"},{"provider_address":"cosmosvalcons18wz9exh3660flwmzpd56kgnt9zavj7v9uum0aw","consumer_key":{"ed25519":"UeK+67pvN90YuZs2nOiUKtXLDmDDZjxJiAlUDQlSmKo="},"power":"5161563"},{"provider_address":"cosmosvalcons18hzd6cggzasx449gl8tk9grg4q0gws0z52nvvy","consumer_key":{"ed25519":"sRStKKW8VxpfhrMeWEjFAq1qeZ1R5OMpo/O8ZcQ+fF4="},"power":"2315748"},{"provider_address":"cosmosvalcons1gpl3gngunh4yae4ge0pdfspz5et4q6ury3yyvp","consumer_key":{"ed25519":"ITvpTM/X7KUw7HesOsMpRKDvyWcuPezBDMFR8M6fVCk="},"power":"400101"},{"provider_address":"cosmosvalcons1g2yl08tdkvcfdwkuxe5crdnrhg7t87zma4y669","consumer_key":{"ed25519":"miSsZ3xHtA9qJWYPsniAR1476e6xWeaeuGLvbgjk7Aw="},"power":"142896"},{"provider_address":"cosmosvalcons1ge6evc3c9l9503a8hup9tqayzks9zslgjxma8e","consumer_key":{"ed25519":"FCTclUMmyeW0/Zi3vhO5b9+O9HKVCps4faHDj5Xx4Lo="},"power":"372697"},{"provider_address":"cosmosvalcons1g63l3wpe8w4p20zqu4ezat5zagx53vedf849wa","consumer_key":{"ed25519":"nvZ6TS+zDMdYJuS2iN4uUV33Tm3X565VsIAwpRNQyYg="},"power":"1452699"},{"provider_address":"cosmosvalcons1gaekwgvvn7fv8tvekhtnfg6xealg5v58tm39uc","consumer_key":{"ed25519":"xtmzqj1WXVaevWmnMMapdP7UGtx9Vs2EnfzrCoizAlI="},"power":"416740"},{"provider_address":"cosmosvalcons1fr74vrfukz649yjvhs8ec2ax3zpl5yf4z0g669","consumer_key":{"ed25519":"csUajTeDB3gfbJvvM50Iok9dwO39EjExSVihy+tAzic="},"power":"224681"},{"provider_address":"cosmosvalcons1f9d60e6ecr7aurzl75se2zy6rxshfzmssj8us7","consumer_key":{"ed25519":"XpwOWhL/yHq5VDUYbpP6Vi5Sw+rYOw7uY2vUqPNc+fk="},"power":"666896"},{"provider_address":"cosmosvalcons1fxalkxap5ag99cezd68purh7kvu33w9jhtryqq","consumer_key":{"ed25519":"y4d7dpiILWwWNJC+2bOWzmk6TNqYEvJVSOrBHjMEBZ0="},"power":"619604"},{"provider_address":"cosmosvalcons1f6cjsfn47ujttypx7gtncglsmjvndugc2zelqx","consumer_key":{"ed25519":"aQdzM4hF6ZPHhzr4xML6T56qHdmfqhWHGPyyhkJEV4s="},"power":"2328169"},{"provider_address":"cosmosvalcons12ys9vkd8zl0lh9hq2nut6yggwv8p0t4882vg4k","consumer_key":{"ed25519":"XJXB9ZVBXZNG9uUOfvHmrDmB4L8NiV0INOHdXbG0PWA="},"power":"1804387"},{"provider_address":"cosmosvalcons128dj2e3qfm3xvsn74znvkuvcxk43wzlfngfrz8","consumer_key":{"ed25519":"ovdfH/edW89+uiB0lHC5OnCbQfKtkn8G1RHZiOP4sYQ="},"power":"4750959"},{"provider_address":"cosmosvalcons12tskgcf5gv4lj5etfzqudmfjus9wtgka8znl6y","consumer_key":{"ed25519":"XLodfRghCVOuf+67t5QD7UIq77p9v+q4Ybtt8hlVTDI="},"power":"478669"},{"provider_address":"cosmosvalcons12acnhd6zr3l7kwqmsclusl0dt6pf42tpw50hqz","consumer_key":{"ed25519":"Rt8yqB06kYoJy/vIzwArA7xikGg1jyK7d8XIAWgDLf8="},"power":"173004"},{"provider_address":"cosmosvalcons1trff6w7vahhwfdu02czcf46e9nlsj37fcywsf4","consumer_key":{"ed25519":"wF9FefHq3jcqq00wi7GJTP+rgBiIKNN61FpJB7r04BE="},"power":"406017"},{"provider_address":"cosmosvalcons1tyh30wuv7d42xkr8vk0ckr57wms3hna6valwtm","consumer_key":{"ed25519":"IeTUELQs74lZj6+ktOM4UN+UVbAbiweas9uC1vQ/Onk="},"power":"484163"},{"provider_address":"cosmosvalcons1txkxwgrg77h8tmv02vq0cvnpey4epxs2qq3s3d","consumer_key":{"ed25519":"KwMg788XgazXjTj4Wtzg4C/yIMeSUzTlgBPNEsRVRSE="},"power":"973158"},{"provider_address":"cosmosvalcons1t8p8pdmq6jdzsm3dsurv8877vsvjtdwwkxq2cu","consumer_key":{"ed25519":"wzYM14hbNsl6+R5AFIhcvbiBgtg1OSakdxOcxo8+oe4="},"power":"434407"},{"provider_address":"cosmosvalcons1tfvaep6xl4e8lhw4e06uhwgvdaskenumhk03w6","consumer_key":{"ed25519":"CM0tuwBVM2UPzc1eKOvvraQdSnIWC3riTabKQc2pvYc="},"power":"3563043"},{"provider_address":"cosmosvalcons1tstkqk7whnsn57a93ksmuqt4hq5pa9jxzuulvd","consumer_key":{"ed25519":"JiVwIUBeyFUqz1zbaY+Oybq89aSl9yDxwwmx+J5CdiY="},"power":"342997"},{"provider_address":"cosmosvalcons1t46pjekpy7m0vmqfejrde8j2ct3gyc78sgr66f","consumer_key":{"ed25519":"cavKFXBju9UQEbzYeE58EapMfP9BcHH31r4ieIHyOow="},"power":"168483"},{"provider_address":"cosmosvalcons1vp9yf9uq7zgtcm9mk82ejd9zpgfyly7pvluafc","consumer_key":{"ed25519":"iw22CdO2Jj2HP+uEJOsUIGvfJ4QFWpLn3K2Neyf/ZBs="},"power":"960525"},{"provider_address":"cosmosvalcons1vz42ewp04wwepjed7z4qenj925gpakgvap4q2u","consumer_key":{"ed25519":"DC26rcY4AHVp79kmx2yROInmGlj5ROseXGr+rObXVFU="},"power":"824797"},{"provider_address":"cosmosvalcons1vu2xpycvehymqmzaq40y64gwhrd0y2g77ec8vl","consumer_key":{"ed25519":"Od7LR9APLCshDylcZEtx+T8i5dlV7/W19ZQ04AK2D5A="},"power":"1075287"},{"provider_address":"cosmosvalcons1vu4n4002vv0v5e2f9zkafv2edld45943l5gw6f","consumer_key":{"ed25519":"pv13kpg8c/StIH94jkfI3IGux17as+plR4UpMexydKY="},"power":"362941"},{"provider_address":"cosmosvalcons1v7dcj7zewwlff48alzmxlp9f9xfjayw9qznplh","consumer_key":{"ed25519":"qTeY2r8yBW97xOt9+mjI4qldRIKPduc476168a9KAhg="},"power":"5194289"},{"provider_address":"cosmosvalcons1dr6mh6kw7y2vwg82njvtlghlmcqu2n730pfk8a","consumer_key":{"ed25519":"6Wf+rZ4iZLLnxXJC7kOaSFIjEQ4knDJXgIM8pU3HBD8="},"power":"587388"},{"provider_address":"cosmosvalcons1d94te9gcdlt95pc9ps52kqxfxk9rz5psfatv7y","consumer_key":{"ed25519":"GghJGDl/JZSZ07B2ARdvvJ8SPKtoi/dh8PbYSui359I="},"power":"466220"},{"provider_address":"cosmosvalcons1dfx3ffavnd8hclegmjgydegzn5dlp86p7wgc75","consumer_key":{"ed25519":"e/N2H+pR+HgRN+ahNHpR9X5fJf+rV1Ae0HKaOUpxJTk="},"power":"287843"},{"provider_address":"cosmosvalcons1dfg42n5vpne3vkspce66nz3v8zmwk5fv8yl7z9","consumer_key":{"ed25519":"AlGMH3UODItpSSADXbqrK2xqmjn4VRHr6mWvo7xmoz8="},"power":"260881"},{"provider_address":"cosmosvalcons1d028q5ppxv4fpwfrjlvdwt9rj5xtsk8t7qzwxh","consumer_key":{"ed25519":"UaoDznUXTrYhC64K7Z4Eb1hckyzTVUh9uUPpZQ8VuxQ="},"power":"600582"},{"provider_address":"cosmosvalcons1dj6867rt9u6scyaxpwmh6wv2eqhfqzv9favv9l","consumer_key":{"ed25519":"3rw5TXGL6rw1Z58e/bLPlXPnBChcEHWutYbAuLQJ1ik="},"power":"873549"},{"provider_address":"cosmosvalcons1d4cplfv4xf5gmutt472jzym73s2vhvckjadcn2","consumer_key":{"ed25519":"kA0v1rENkxShCXjecaMPusNrgYu9is/0uS+OwZ9JiBU="},"power":"5046165"},{"provider_address":"cosmosvalcons1dc3rf7yps9a8mwvh6k2qq5v9j8mf9g2vk82hp9","consumer_key":{"ed25519":"EbpW+vs11yVlXtMEnJBtH+CghPyUcVVbzbTTSmhC4M8="},"power":"251008"},{"provider_address":"cosmosvalcons1d65x8dzt5d5lww0x2k2hwrdtjtyf4ysjdyv245","consumer_key":{"ed25519":"ehLpAXe48rUP2FmG7GrcVEHvnGfVP+FMw2hXavmQW0Q="},"power":"519955"},{"provider_address":"cosmosvalcons1wdx5ghv9gkfua7uw7rzy86fr3ur7waa2dtyegj","consumer_key":{"ed25519":"RQHlzpNBBr9446tfOohAt67Ppd5ihe04pp5/vWVgRqI="},"power":"457582"},{"provider_address":"cosmosvalcons1wsstw0cs9zdv5x9ve5wtt2653qkqf5k4pkd5ex","consumer_key":{"ed25519":"nuzJ97cOU9W6eoQtnDnoJNG7knZTU0dScg/3Xuws0cQ="},"power":"336334"},{"provider_address":"cosmosvalcons1whdtx9h5egfk0afj4dc6szml5edtdype42hm00","consumer_key":{"ed25519":"khWkK81bJAgsgLL2GsoTKevosSJ+82VklvpC8gOh6yk="},"power":"357994"},{"provider_address":"cosmosvalcons10zstm2nfykapjsmvmu4p3l8rxlyv23fqjjlcy6","consumer_key":{"ed25519":"cqFoI/j41DMmaw4qGEwwQ5JJcXwwQSt5RcgMT8i1yEA="},"power":"404024"},{"provider_address":"cosmosvalcons10rca02th8lyjyuu7pgmstf72q6l2xzyru7zluq","consumer_key":{"ed25519":"s2LxQLuWMJoQlT8dm8/hiHvTXhMs/tVeedZyEif0lT0="},"power":"487770"},{"provider_address":"cosmosvalcons10vazaljm8lxlsx0u75nqwv2valj82jak592py8","consumer_key":{"ed25519":"/siF8Mj8lSmgyMuuy6AuJnJ/jIQ3AO1alYEOmYTVDoc="},"power":"607260"},{"provider_address":"cosmosvalcons10v7sra65mluywnksudvgzt75xlsf8zwuzsq8r3","consumer_key":{"ed25519":"eH9DyM+VlAW8OFEuOiaTJNHg9uR+mJ4UpFYA7BMxLG8="},"power":"728985"},{"provider_address":"cosmosvalcons1szxkkp22pdknla04atc2vh8uvnz587pnwa9sj9","consumer_key":{"ed25519":"PUILJyJJQ1z6KkBLDPP6h8t12/986mPdZ8GZAQVaU2I="},"power":"157077"},{"provider_address":"cosmosvalcons1sxt9l69pt75q0ryjqtejun86wtu9723zyaezq8","consumer_key":{"ed25519":"PflSgb+lC1GI22wc6N/54cNzD7KSYQyCWR5LuQxjYVY="},"power":"1943698"},{"provider_address":"cosmosvalcons1s0686a68krmr8f46ph6fklw0v8us4gdsm7nhz3","consumer_key":{"ed25519":"W459Kbdx+LJQ7dLVASW6sAfdqWqNRSXnvc53r9aOx/o="},"power":"2337366"},{"provider_address":"cosmosvalcons1s347fuu7xy3d9gknle29fcjkzpe7j4fc2dk40r","consumer_key":{"ed25519":"6GvbNXh8e0lnTpsnk812rM1S1xOnn3gVRAsaXIZBvHA="},"power":"473323"},{"provider_address":"cosmosvalcons1sjea3y3t5tey5w280mq5j4uer0s6uam9nthe0r","consumer_key":{"ed25519":"xNOEHe0/UwPjqjvcEkJ4KvWzwvR9PinJTvPf5zsiOvs="},"power":"1657377"},{"provider_address":"cosmosvalcons13zn9q304aegz2cyzdks87uum4846s3cvt3rfll","consumer_key":{"ed25519":"wShrvIuQC+GsUYAM3GZj/dMoDqKtGXKl6XQ2yQCkA5s="},"power":"183859"},{"provider_address":"cosmosvalcons13c8wx7mmrgpcm529uv83a7ta7dseaapfj2eket","consumer_key":{"ed25519":"SpROiLOBv3fWINvXvgXHDMLMjVM/9x24WpC3AH/aTbY="},"power":"1215809"},{"provider_address":"cosmosvalcons13utglz4zhpwr9r08vtapx3w9s9fmvud8xprdne","consumer_key":{"ed25519":"2G5Is4uKG1vfAtRJRdnt3y2ugIq3zMQgTUuU4lPhgLI="},"power":"1665431"},{"provider_address":"cosmosvalcons13aq2g6rnz438r390zlrvpajffazkas8psmvj99","consumer_key":{"ed25519":"y93r6Bb+MMcF6jX12yWRKPU6DEjuHQsjPKT4ln86Fa4="},"power":"311407"},{"provider_address":"cosmosvalcons1j8yz8f6ymeg0j8qh534kynkl3ac4pf7a4xhrhr","consumer_key":{"ed25519":"gG6psfVv9zreSR3z+mbxAa8hvoRYjNBQgufvGizZIP8="},"power":"969016"},{"provider_address":"cosmosvalcons1jhsxp5rhzvrsl6vz9ak9p0tkhn9lnut6ehz9ej","consumer_key":{"ed25519":"iOJ8Kqmlfh+w8+zgranCfJmX677PBopoM3kJd+ost4o="},"power":"1713467"},{"provider_address":"cosmosvalcons1jufcrrd9gze26sxd82ppse03eg5g5xa2gplt6p","consumer_key":{"ed25519":"Wc+lNAaqtE5QANcp7M/hmVBqhAOt6Pi4GDwxayfB6fc="},"power":"702978"},{"provider_address":"cosmosvalcons1j7936y5vdvh6c55v07tt05hdmhuz5xu77qyga2","consumer_key":{"ed25519":"eRTB8nnc2JPZ3dTPLjozZQr2meDVsZRm8BDb/WSIgag="},"power":"5344522"},{"provider_address":"cosmosvalcons1ntg25x9f9gdyxazzdmvmsxfdr4kr6f53nhwys4","consumer_key":{"ed25519":"3/xMFe0MgqA2egEWtbZ0Z2nA8K8HCvWRHi23S0JXGto="},"power":"682935"},{"provider_address":"cosmosvalcons1ns2u9ech60wedtcfynfrgsz6ax9390nlfywkk4","consumer_key":{"ed25519":"dwQyy1Pm8DeUR9u7qZOPPBUHXolTwbHMh6K+X9OV88Q="},"power":"198918"},{"provider_address":"cosmosvalcons1nstujnmnzwa56msxg2rmam096wygazz4y6as4g","consumer_key":{"ed25519":"Mvh+7UDaXgmj4Fst0ZUdx++MJmoq4B9M6mdgNc8H2pM="},"power":"1447817"},{"provider_address":"cosmosvalcons1nnu2u874qluh5p2z2pvzlljjjgkg6dc9mwtxn3","consumer_key":{"ed25519":"13QaXby84V+Ueu3Y8NpasgALcRXzl29k2A9K/3FRQHM="},"power":"9012411"},{"provider_address":"cosmosvalcons15nca2560875stfx6vphg5yyrf9m9z8lheucgef","consumer_key":{"ed25519":"A1rnWvZI4N1rlS2RG+gR0utmUp5n4CB3La4iQsdTwAs="},"power":"402741"},{"provider_address":"cosmosvalcons15lv7dkuv5hjx5cdvxc346nypshmm7ydyhzamnv","consumer_key":{"ed25519":"Ukt5MB8TGQthSbzMWUiwA1+AwwOoxXGk0IAHl6qzZVA="},"power":"172696"},{"provider_address":"cosmosvalcons14dam4pk8p9w4hv40jdee3f8ed9z6u9wrgx652q","consumer_key":{"ed25519":"hJVGDRYocrGGdGH5ETrObxH5Az20wq60+0gqEhznXXY="},"power":"388242"},{"provider_address":"cosmosvalcons14sk4vptumprktehmuvvf0yynarjy4gv08t64t4","consumer_key":{"ed25519":"mqNaNjXZN7sCeOqZ+luYjDzQm4QOFoL6VHZQN02WgDY="},"power":"6024259"},{"provider_address":"cosmosvalcons145uc87weflqgh4t0w0luuk59046rwpma6p69sj","consumer_key":{"ed25519":"YDmfkE694oyAciDeNtO/wPyN/kCVA3wWsX/Lecr2E0A="},"power":"359749"},{"provider_address":"cosmosvalcons14ezk4pd9cm2xlg6sc0kzmjcq6esnt83q8k8rp6","consumer_key":{"ed25519":"rL2gGQSPrZ6VhnSJyZQAtMPwKI+N2ZY1+q7BTbdLTcs="},"power":"205154"},{"provider_address":"cosmosvalcons1kq24y5kh8dlwkaxj4rxgzsuhue5hp2petveuva","consumer_key":{"ed25519":"F88l5GhwRCQ5gC20kJR1Uwzz83Vc1ZlzwyPgR+NDjoE="},"power":"174611"},{"provider_address":"cosmosvalcons1kpm95tm0esga3tzxya06cpkaxh65y97pmqgmng","consumer_key":{"ed25519":"gei+a5sLmsY2sToAmG9YeVJYmXcirmQNEua0M3a9rAA="},"power":"275910"},{"provider_address":"cosmosvalcons1kgekmjr2wjn0s4fd0a5x4syc8m6wpvxwp9kvln","consumer_key":{"ed25519":"NCjhaMR2l9WNdiCQEUWzHWHksTGeHgLWtt22ACjEACA="},"power":"262582"},{"provider_address":"cosmosvalcons1kgmt9g366ut2nkxc26svhfmz7v34zhzl73rgp2","consumer_key":{"ed25519":"6SMqEsto3vqkrSUoEnce7uv37dhI97PZyO0C9YfqqpE="},"power":"483345"},{"provider_address":"cosmosvalcons1k2lk3t2va4h73ac64jkszqp5xm47qu5ll0s5aq","consumer_key":{"ed25519":"vGSKfbQyKApvBhinpOOA0XQAdjxceihYNwtGskfZGyQ="},"power":"566221"},{"provider_address":"cosmosvalcons1kv2cr60l2ugy25cnwr3dfz2694h7mm8muyensh","consumer_key":{"ed25519":"/kEhtPzLE+90eoHTUkuSnggLHdII4Dpg9yXf3kcZE0k="},"power":"818884"},{"provider_address":"cosmosvalcons1k3pqx4yg67gp6awclxh07p8kfhmmu9swja85ws","consumer_key":{"ed25519":"256sY6vL0XxkUez5D6fynXxuMdWAYm3K2O+l3Ay7Rp0="},"power":"791976"},{"provider_address":"cosmosvalcons1knxq8u4v5gky8hs76wz6zp96s6m5vfujw95wla","consumer_key":{"ed25519":"sgYnzrP98JYHQrEiJxYHMLRHyUQcB05HcTtO/Xjbkfc="},"power":"306196"},{"provider_address":"cosmosvalcons1knssshcun6asa2v5g5ktrwqjfw5fhmg686lfzr","consumer_key":{"ed25519":"+LbXwDMu37jkBRBLFtXazRfEd2ytSAkIncZ/Ng+6jVI="},"power":"779630"},{"provider_address":"cosmosvalcons1k4p60h6g0q9wlm6e8gqre5rqkkfufe44q2mfsa","consumer_key":{"ed25519":"KjPuAGkJQWb0ImqKuS3DAFat7LvIVmiWhEGRur1twck="},"power":"170497"},{"provider_address":"cosmosvalcons1kkejqy0vqu2du2492rsgt29jqqm2zr5r2hlv3z","consumer_key":{"ed25519":"iah7ZDU9BRmE1/f/c3UTxu0ymxzhbWDBA1c/ao4PsKY="},"power":"346460"},{"provider_address":"cosmosvalcons1h8kwr4a5mkqws6px86364unjh8rlz2fd7gr73q","consumer_key":{"ed25519":"0wQ1SJucRxDeAVwCQzFinkm3K0UkOlnkf5Ll+BluDQA="},"power":"2157702"},{"provider_address":"cosmosvalcons1hdwafrnxyx3pq0alktaf5h0gv83725edy3e6ak","consumer_key":{"ed25519":"cEeK9USbgeRkQ3yF01QiPynlf9ioArlTnUWfXJOkEeQ="},"power":"343306"},{"provider_address":"cosmosvalcons1hdmtccezcafn5lxd8tcupzw8kwt3lvqjqdtkfy","consumer_key":{"ed25519":"YAQR/TLMuDMgOTS/KcMdU80y2JAze7DX/GELq9uqdEM="},"power":"799251"},{"provider_address":"cosmosvalcons1h0j4akdjustw9vmuzwa7a8xku7hrz3ck4nxh09","consumer_key":{"ed25519":"OSa2Cqx+3R0KEZVHjFMXvS3Z4TDXUkHwH3qsMfMRRGc="},"power":"270123"},{"provider_address":"cosmosvalcons1hkcyvfv7klahfg5qzh33uexwa8cgqgvekug2dy","consumer_key":{"ed25519":"9ZZJ9leGczBksg62mraXxYA9W7ggDLC7d0GRAQ1lrj4="},"power":"1144498"},{"provider_address":"cosmosvalcons1cpd299h2lkksgmmjkyzr3mzn75dsm3g2asvfgn","consumer_key":{"ed25519":"hv4FQsejWa+jFfeFWV1QmA3K4oekvHB187B9Rwodbmk="},"power":"671543"},{"provider_address":"cosmosvalcons1ctwajuqv7h0vq3tacs3c9xe3a28af7w5cpvj7z","consumer_key":{"ed25519":"Uz2D+BaLcc3FcS1LciwOYjADe+8Wx4IejUHaVLJzlxA="},"power":"260172"},{"provider_address":"cosmosvalcons1c54vmveq2l6uwvdmm4yyvzuncdgqm5eylrg0af","consumer_key":{"ed25519":"E6u5k3750DYbbw0BsT08iSu7SHn1ZQV561l3QWyMGxs="},"power":"286755"},{"provider_address":"cosmosvalcons1c5e86exd7jsyhcfqdejltdsagjfrvv8xv22368","consumer_key":{"ed25519":"C+lBAKHcJb7y6SpQai7XuIhwhTVZ1keX5EicyLO+zNw="},"power":"881263"},{"provider_address":"cosmosvalcons1cl92j56u5cj6kpz8cvrewhgj2gupqu269egr5a","consumer_key":{"ed25519":"Umw7tz4oFvJu2N9DsIU4RsVGfqqCOutsepwgzUXHO6M="},"power":"550817"},{"provider_address":"cosmosvalcons1evelsgtuq72jajsc757pl6hez053gvfhu2mjty","consumer_key":{"ed25519":"6ZSaeZMRdbUQKFIITfjcSWDJ7lIJNUZycn54zWOYKac="},"power":"481644"},{"provider_address":"cosmosvalcons1eszcs2tcl30a66nhy958u9xq9xdwqp9c65dnm6","consumer_key":{"ed25519":"FyTDaL2hGRS8kkqrsXfq40nuv5lqWcAbzmf/o1cg+2o="},"power":"1494655"},{"provider_address":"cosmosvalcons1ejrl266cvgvprc4453ln33skdc54ecmwjdyr4d","consumer_key":{"ed25519":"QRleyectZf5bbPp6YyWfLeEgPbiLwhiSz6ZRV9+O+pY="},"power":"3381762"},{"provider_address":"cosmosvalcons16zkvwgzdwy70l8a5f8ed2tq9ghw8cylftd5wlr","consumer_key":{"ed25519":"S+WPJre5mbg13O+WPl3DA52FVbpfpLq+QIxuGW1R/6k="},"power":"362066"},{"provider_address":"cosmosvalcons16999gt582mp6jskelky88hpwnfme3gtlaaat0s","consumer_key":{"ed25519":"Zvd+ILfG9q1jPnZfOOYdZOuNLThLdCRPkvRV+HrXkCs="},"power":"991390"},{"provider_address":"cosmosvalcons16f56s8rhg8693scakla3f3vpwepplvhc6uc0qs","consumer_key":{"ed25519":"PFbhG8ErALnSFHWHqMdi8Uwr9KD1kXgiXmIVvmuK/ig="},"power":"610796"},{"provider_address":"cosmosvalcons16t2937fqnm9ceg42k8veupnprwqj4puhwm6yyv","consumer_key":{"ed25519":"qn8kyf9WhuzTReMHK80e2jd0duEix07DBMuUYA4IEss="},"power":"16929021"},{"provider_address":"cosmosvalcons164q2kq3q3psj436t9p7swmdlh39rw73wpy6qx6","consumer_key":{"ed25519":"2ThchFrZtttb83oTcEw1you9csU0pbZklnBMuIo+nbg="},"power":"1547745"},{"provider_address":"cosmosvalcons16hkujdp3fjymgk2jvg8fexftrhysrpzzzmrweg","consumer_key":{"ed25519":"5RNZbutSqesWjKl0UJ7VsXBWyweVxxcWgy9PzD6qVes="},"power":"290341"},{"provider_address":"cosmosvalcons1668wcrfwsfy0rmryek6ctmdkrm9yx27c7grulf","consumer_key":{"ed25519":"boMUZ+UEYWjYgr+NbibFgyODo04XcUncbJf0GIGEQ8A="},"power":"22418083"},{"provider_address":"cosmosvalcons1m8u2gxmc92n2v6kus8u48y3u0h88kcqp69cr3a","consumer_key":{"ed25519":"8gsEDGtPHqgpVRMypYQKZjn/n97c0DZZF8eYcCU9dMs="},"power":"1783207"},{"provider_address":"cosmosvalcons1mf42422ee8hc3gltx7clzp7tyen7hw4t3vnmw0","consumer_key":{"ed25519":"4hRc05ztIJIgGB1/IFlE1JaidFbpE8HEvlOG8eXAV94="},"power":"4564656"},{"provider_address":"cosmosvalcons1m7fg8k39k2tyym5hgwrpf5wx9hqsr8vywuyrtm","consumer_key":{"ed25519":"wYgizm1MoU4+QMPV0lPlESo/Z5YzDbfna562kOUNU4s="},"power":"1318155"},{"provider_address":"cosmosvalcons1upc05nc9pwhhagnkr3f2dft327qxsxfeyvajsu","consumer_key":{"ed25519":"uFGNgYFKIHlkwC8OuDa+QBAcaLEVD5saiA0dF6dngAU="},"power":"2436216"},{"provider_address":"cosmosvalcons1uv2n8wp2cea2z7ytwz7haxzma78py54p5akk8j","consumer_key":{"ed25519":"94j8uvL2CxrxxqZfksALpmA/ep1hrGMjVfIxaDGBOSg="},"power":"466603"},{"provider_address":"cosmosvalcons1aqq8grrgeqdnqdzu8t3t5cu054hlvlh062nhqx","consumer_key":{"ed25519":"PYxXFtT+4gIWWZ+gzMHf14Glfptvgi3YIXVYhofMO1A="},"power":"599630"},{"provider_address":"cosmosvalcons1a0kkjnnvuy3ylv0g5twcae368ptgk83tyalw6t","consumer_key":{"ed25519":"GEVNLV2IjEH7xNH3IdyDC+UMTw5hT2X9mDREJdsqJ90="},"power":"400360"},{"provider_address":"cosmosvalcons1a4gfu7qf0cfsd2glah5wskm46p4amahrjvtw2p","consumer_key":{"ed25519":"GseT8M09GPLtV0fm6pSc4SiBJgeWUUpjHJwkxeqjYGw="},"power":"9442040"},{"provider_address":"cosmosvalcons17ktnf2yk5a5fgd4uxs3zgn7cv2hp38zuw8j35e","consumer_key":{"ed25519":"ZGRLBh2Ptc3io6teAFHcy10CyBPSERloxB3WNC8WhcM="},"power":"5390976"},{"provider_address":"cosmosvalcons17m7kxedvc5uzk6kk2ekd99ceqjm47l3y355lug","consumer_key":{"ed25519":"Dsa37AnpBF50qRG80KWD3eHlbtH+4G6hsMzImFhTJSE="},"power":"836986"},{"provider_address":"cosmosvalcons1lrjsx2uc6hfjgshrykmfwz6rfa6juyf7gszn2c","consumer_key":{"ed25519":"XN2+6Dh/5bCBWyk2ytv0ecSX+Hi9jdNxAYG70xHuqqw="},"power":"534248"},{"provider_address":"cosmosvalcons1ld8myknpkjf6t0uw8n2tt684kszd4r3rwy98d2","consumer_key":{"ed25519":"9UvMYJd/Xv2pwA7n+v8oBzbcmHvnRrgqc15Zi9uC2EM="},"power":"5230858"}]} \ No newline at end of file diff --git a/assets/delegations.json b/assets/delegations.json new file mode 100644 index 0000000..e8d7125 --- /dev/null +++ b/assets/delegations.json @@ -0,0 +1,19 @@ +{ + "delegation_responses": [ + { + "delegation": { + "delegator_address": "cosmos1qqqrukxs0rfmk43wpr8j79r407mj8cylpf8ux0", + "validator_address": "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + "shares": "51000000.000000000000000000" + }, + "balance": { + "denom": "uatom", + "amount": "51000000" + } + } + ], + "pagination": { + "next_key": "FABpS2OZU5S9Lm9OifjQ+7igOjicFDAEUOdipmgiY705bEhTrtbOO6IM", + "total": "1729" + } +} diff --git a/assets/error.json b/assets/error.json new file mode 100644 index 0000000..e364cfe --- /dev/null +++ b/assets/error.json @@ -0,0 +1,5 @@ +{ + "code":12, + "message":"Not Implemented", + "details":[] +} \ No newline at end of file diff --git a/assets/fs.go b/assets/fs.go index 8f77700..9e47564 100644 --- a/assets/fs.go +++ b/assets/fs.go @@ -6,3 +6,12 @@ import ( //go:embed * var EmbedFS embed.FS + +func GetBytesOrPanic(path string) []byte { + bytes, err := EmbedFS.ReadFile(path) + if err != nil { + panic(err) + } + + return bytes +} diff --git a/assets/fs_test.go b/assets/fs_test.go new file mode 100644 index 0000000..d745720 --- /dev/null +++ b/assets/fs_test.go @@ -0,0 +1,19 @@ +package assets + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestGetPanicOrFailPanic(t *testing.T) { + t.Parallel() + + defer func() { + if r := recover(); r == nil { + require.Fail(t, "Expected to have a panic here!") + } + }() + + GetBytesOrPanic("not-existing") +} diff --git a/assets/node-info.json b/assets/node-info.json new file mode 100644 index 0000000..56ad4c9 --- /dev/null +++ b/assets/node-info.json @@ -0,0 +1 @@ +{"default_node_info":{"protocol_version":{"p2p":"8","block":"11","app":"0"},"default_node_id":"99c7d7cc3295ea495610ff3e84fd44562b919754","listen_addr":"tcp://0.0.0.0:26656","network":"cosmoshub-4","version":"0.37.6","channels":"QCAhIiMwOGBhAA==","moniker":"freak12techno","other":{"tx_index":"on","rpc_address":"tcp://127.0.0.1:26657"}},"application_version":{"name":"gaia","app_name":"gaiad","version":"v17.2.0","git_commit":"17f2ba0b90d1d2884f7b67518ec08dfd37f001a7","build_tags":"netgo,ledger","go_version":"go version go1.21.3 linux/amd64","build_deps":[{"path":"cloud.google.com/go","version":"v0.112.0","sum":"h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM="},{"path":"cloud.google.com/go/compute/metadata","version":"v0.2.3","sum":"h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY="},{"path":"cloud.google.com/go/iam","version":"v1.1.6","sum":"h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc="},{"path":"cloud.google.com/go/storage","version":"v1.36.0","sum":"h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8="},{"path":"cosmossdk.io/api","version":"v0.3.1","sum":"h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE="},{"path":"cosmossdk.io/core","version":"v0.5.1","sum":"h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI="},{"path":"cosmossdk.io/depinject","version":"v1.0.0-alpha.4","sum":"h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc="},{"path":"cosmossdk.io/errors","version":"v1.0.1","sum":"h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0="},{"path":"cosmossdk.io/log","version":"v1.3.1","sum":"h1:UZx8nWIkfbbNEWusZqzAx3ZGvu54TZacWib3EzUYmGI="},{"path":"cosmossdk.io/math","version":"v1.3.0","sum":"h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE="},{"path":"cosmossdk.io/simapp","version":"v0.0.0-20230602123434-616841b9704d","sum":"h1:G24nV8KQ5tcSLJEYPUEpKxuX4usvpQg5r7LhCLYPs1o="},{"path":"cosmossdk.io/tools/rosetta","version":"v0.2.1","sum":"h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw="},{"path":"filippo.io/edwards25519","version":"v1.0.0","sum":"h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek="},{"path":"github.com/99designs/keyring","version":"v1.2.1","sum":""},{"path":"github.com/ChainSafe/go-schnorrkel","version":"v1.0.0","sum":"h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM="},{"path":"github.com/Stride-Labs/ibc-rate-limiting","version":"v1.0.1","sum":"h1:MT80/HAZ+sCVqmfill5dJ7aIY/p5evGF3MslbU0PRas="},{"path":"github.com/armon/go-metrics","version":"v0.4.1","sum":"h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA="},{"path":"github.com/aws/aws-sdk-go","version":"v1.44.203","sum":"h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U="},{"path":"github.com/beorn7/perks","version":"v1.0.1","sum":"h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM="},{"path":"github.com/bgentry/go-netrc","version":"v0.0.0-20140422174119-9fd32a8b3d3d","sum":"h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas="},{"path":"github.com/bgentry/speakeasy","version":"v0.1.1-0.20220910012023-760eaf8b6816","sum":"h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s="},{"path":"github.com/btcsuite/btcd/btcec/v2","version":"v2.3.2","sum":"h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U="},{"path":"github.com/cenkalti/backoff/v4","version":"v4.1.3","sum":"h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4="},{"path":"github.com/cespare/xxhash/v2","version":"v2.2.0","sum":"h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44="},{"path":"github.com/chzyer/readline","version":"v1.5.1","sum":"h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI="},{"path":"github.com/cockroachdb/apd/v2","version":"v2.0.2","sum":"h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E="},{"path":"github.com/cockroachdb/errors","version":"v1.11.1","sum":"h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8="},{"path":"github.com/cockroachdb/logtags","version":"v0.0.0-20230118201751-21c54148d20b","sum":"h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE="},{"path":"github.com/cockroachdb/redact","version":"v1.1.5","sum":"h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30="},{"path":"github.com/coinbase/rosetta-sdk-go","version":"v0.7.9","sum":"h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA="},{"path":"github.com/cometbft/cometbft","version":"v0.37.6","sum":"h1:2BSD0lGPbcIyRd99Pf1zH0Sa8o0pbfqVWEDbZ4Ec2Uc="},{"path":"github.com/cometbft/cometbft-db","version":"v0.11.0","sum":"h1:M3Lscmpogx5NTbb1EGyGDaFRdsoLWrUWimFEyf7jej8="},{"path":"github.com/confio/ics23/go","version":"v0.9.0","sum":"h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4="},{"path":"github.com/cosmos/btcutil","version":"v1.0.5","sum":"h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk="},{"path":"github.com/cosmos/cosmos-proto","version":"v1.0.0-beta.5","sum":"h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA="},{"path":"github.com/cosmos/cosmos-sdk","version":"v0.47.11","sum":""},{"path":"github.com/cosmos/go-bip39","version":"v1.0.0","sum":"h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY="},{"path":"github.com/cosmos/gogogateway","version":"v1.2.0","sum":"h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE="},{"path":"github.com/cosmos/gogoproto","version":"v1.4.10","sum":"h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoKuI="},{"path":"github.com/cosmos/iavl","version":"v0.20.1","sum":"h1:rM1kqeG3/HBT85vsZdoSNsehciqUQPWrR4BYmqE2+zg="},{"path":"github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v7","version":"v7.1.3","sum":"h1:MZGDMETv72suFpTAD6VPGqSIm1FJcChtk2HmVh9D+Bo="},{"path":"github.com/cosmos/ibc-go/v7","version":"v7.4.0","sum":"h1:8FqYMptvksgMvlbN4UW9jFxTXzsPyfAzEZurujXac8M="},{"path":"github.com/cosmos/ics23/go","version":"v0.10.0","sum":"h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM="},{"path":"github.com/cosmos/interchain-security/v4","version":"v4.2.0","sum":""},{"path":"github.com/cosmos/ledger-cosmos-go","version":"v0.12.4","sum":"h1:drvWt+GJP7Aiw550yeb3ON/zsrgW0jgh5saFCr7pDnw="},{"path":"github.com/cosmos/rosetta-sdk-go","version":"v0.10.0","sum":"h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM="},{"path":"github.com/creachadair/taskgroup","version":"v0.4.2","sum":"h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8="},{"path":"github.com/davecgh/go-spew","version":"v1.1.2-0.20180830191138-d8f796af33cc","sum":"h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM="},{"path":"github.com/decred/dcrd/dcrec/secp256k1/v4","version":"v4.1.0","sum":"h1:HbphB4TFFXpv7MNrT52FGrrgVXF1owhMVTHFZIlnvd4="},{"path":"github.com/desertbit/timer","version":"v0.0.0-20180107155436-c41aec40b27f","sum":"h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I="},{"path":"github.com/dvsekhvalnov/jose2go","version":"v1.6.0","sum":"h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY="},{"path":"github.com/felixge/httpsnoop","version":"v1.0.4","sum":"h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg="},{"path":"github.com/fsnotify/fsnotify","version":"v1.7.0","sum":"h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA="},{"path":"github.com/getsentry/sentry-go","version":"v0.23.0","sum":"h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE="},{"path":"github.com/go-kit/kit","version":"v0.12.0","sum":"h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4="},{"path":"github.com/go-kit/log","version":"v0.2.1","sum":"h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU="},{"path":"github.com/go-logfmt/logfmt","version":"v0.6.0","sum":"h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4="},{"path":"github.com/go-logr/logr","version":"v1.4.1","sum":"h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ="},{"path":"github.com/go-logr/stdr","version":"v1.2.2","sum":"h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag="},{"path":"github.com/godbus/dbus","version":"v0.0.0-20190726142602-4481cbc300e2","sum":"h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0="},{"path":"github.com/gogo/googleapis","version":"v1.4.1","sum":"h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0="},{"path":"github.com/gogo/protobuf","version":"v1.3.2","sum":"h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q="},{"path":"github.com/golang/groupcache","version":"v0.0.0-20210331224755-41bb18bfe9da","sum":"h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE="},{"path":"github.com/golang/mock","version":"v1.6.0","sum":"h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc="},{"path":"github.com/golang/protobuf","version":"v1.5.4","sum":"h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek="},{"path":"github.com/golang/snappy","version":"v0.0.5-0.20220116011046-fa5810519dcb","sum":"h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk="},{"path":"github.com/google/btree","version":"v1.1.2","sum":"h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU="},{"path":"github.com/google/go-cmp","version":"v0.6.0","sum":"h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI="},{"path":"github.com/google/orderedcode","version":"v0.0.1","sum":"h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us="},{"path":"github.com/google/s2a-go","version":"v0.1.7","sum":"h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o="},{"path":"github.com/google/uuid","version":"v1.6.0","sum":"h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0="},{"path":"github.com/googleapis/enterprise-certificate-proxy","version":"v0.3.2","sum":"h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs="},{"path":"github.com/googleapis/gax-go/v2","version":"v2.12.0","sum":"h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas="},{"path":"github.com/gorilla/handlers","version":"v1.5.1","sum":"h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4="},{"path":"github.com/gorilla/mux","version":"v1.8.1","sum":"h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY="},{"path":"github.com/gorilla/websocket","version":"v1.5.0","sum":"h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc="},{"path":"github.com/grpc-ecosystem/go-grpc-middleware","version":"v1.3.0","sum":"h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw="},{"path":"github.com/grpc-ecosystem/grpc-gateway","version":"v1.16.0","sum":"h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo="},{"path":"github.com/gsterjov/go-libsecret","version":"v0.0.0-20161001094733-a6f4afe4910c","sum":"h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU="},{"path":"github.com/gtank/merlin","version":"v0.1.1","sum":"h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is="},{"path":"github.com/gtank/ristretto255","version":"v0.1.2","sum":"h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc="},{"path":"github.com/hashicorp/go-cleanhttp","version":"v0.5.2","sum":"h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ="},{"path":"github.com/hashicorp/go-getter","version":"v1.7.4","sum":"h1:3yQjWuxICvSpYwqSayAdKRFcvBl1y/vogCxczWSmix0="},{"path":"github.com/hashicorp/go-immutable-radix","version":"v1.3.1","sum":"h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc="},{"path":"github.com/hashicorp/go-safetemp","version":"v1.0.0","sum":"h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo="},{"path":"github.com/hashicorp/go-version","version":"v1.6.0","sum":"h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek="},{"path":"github.com/hashicorp/golang-lru","version":"v0.5.5-0.20210104140557-80c98217689d","sum":"h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs="},{"path":"github.com/hashicorp/hcl","version":"v1.0.0","sum":"h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4="},{"path":"github.com/hdevalence/ed25519consensus","version":"v0.1.0","sum":"h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU="},{"path":"github.com/huandu/skiplist","version":"v1.2.0","sum":"h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw="},{"path":"github.com/iancoleman/orderedmap","version":"v0.2.0","sum":"h1:sq1N/TFpYH++aViPcaKjys3bDClUEU7s5B+z6jq8pNA="},{"path":"github.com/improbable-eng/grpc-web","version":"v0.15.0","sum":"h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ="},{"path":"github.com/jmespath/go-jmespath","version":"v0.4.0","sum":"h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg="},{"path":"github.com/klauspost/compress","version":"v1.17.0","sum":"h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM="},{"path":"github.com/kr/pretty","version":"v0.3.1","sum":"h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE="},{"path":"github.com/kr/text","version":"v0.2.0","sum":"h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY="},{"path":"github.com/lib/pq","version":"v1.10.7","sum":"h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw="},{"path":"github.com/libp2p/go-buffer-pool","version":"v0.1.0","sum":"h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8="},{"path":"github.com/magiconair/properties","version":"v1.8.7","sum":"h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY="},{"path":"github.com/manifoldco/promptui","version":"v0.9.0","sum":"h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA="},{"path":"github.com/mattn/go-colorable","version":"v0.1.13","sum":"h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA="},{"path":"github.com/mattn/go-isatty","version":"v0.0.20","sum":"h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY="},{"path":"github.com/matttproud/golang_protobuf_extensions","version":"v1.0.4","sum":"h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo="},{"path":"github.com/mimoo/StrobeGo","version":"v0.0.0-20210601165009-122bf33a46e0","sum":"h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94="},{"path":"github.com/minio/highwayhash","version":"v1.0.2","sum":"h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g="},{"path":"github.com/mitchellh/go-homedir","version":"v1.1.0","sum":"h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y="},{"path":"github.com/mitchellh/go-testing-interface","version":"v1.14.1","sum":"h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU="},{"path":"github.com/mitchellh/mapstructure","version":"v1.5.0","sum":"h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY="},{"path":"github.com/mtibben/percent","version":"v0.2.1","sum":"h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs="},{"path":"github.com/pelletier/go-toml/v2","version":"v2.1.0","sum":"h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4="},{"path":"github.com/pkg/errors","version":"v0.9.1","sum":"h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4="},{"path":"github.com/pmezard/go-difflib","version":"v1.0.1-0.20181226105442-5d4384ee4fb2","sum":"h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U="},{"path":"github.com/prometheus/client_golang","version":"v1.14.0","sum":"h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw="},{"path":"github.com/prometheus/client_model","version":"v0.3.0","sum":"h1:UBgGFHqYdG/TPFD1B1ogZywDqEkwp3fBMvqdiQ7Xew4="},{"path":"github.com/prometheus/common","version":"v0.42.0","sum":"h1:EKsfXEYo4JpWMHH5cg+KOUWeuJSov1Id8zGR8eeI1YM="},{"path":"github.com/prometheus/procfs","version":"v0.9.0","sum":"h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI="},{"path":"github.com/rakyll/statik","version":"v0.1.7","sum":"h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ="},{"path":"github.com/rcrowley/go-metrics","version":"v0.0.0-20201227073835-cf1acfcdf475","sum":"h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM="},{"path":"github.com/rogpeppe/go-internal","version":"v1.11.0","sum":"h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M="},{"path":"github.com/rs/cors","version":"v1.8.3","sum":"h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo="},{"path":"github.com/rs/zerolog","version":"v1.32.0","sum":"h1:keLypqrlIjaFsbmJOBdB/qvyF8KEtCWHwobLp5l/mQ0="},{"path":"github.com/sagikazarmark/slog-shim","version":"v0.1.0","sum":"h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE="},{"path":"github.com/spf13/afero","version":"v1.11.0","sum":"h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8="},{"path":"github.com/spf13/cast","version":"v1.6.0","sum":"h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0="},{"path":"github.com/spf13/cobra","version":"v1.8.0","sum":"h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0="},{"path":"github.com/spf13/pflag","version":"v1.0.5","sum":"h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA="},{"path":"github.com/spf13/viper","version":"v1.18.2","sum":"h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ="},{"path":"github.com/stretchr/testify","version":"v1.9.0","sum":"h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg="},{"path":"github.com/subosito/gotenv","version":"v1.6.0","sum":"h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8="},{"path":"github.com/syndtr/goleveldb","version":"v1.0.1-0.20220721030215-126854af5e6d","sum":""},{"path":"github.com/tendermint/go-amino","version":"v0.16.0","sum":"h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E="},{"path":"github.com/tidwall/btree","version":"v1.6.0","sum":"h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg="},{"path":"github.com/ulikunitz/xz","version":"v0.5.11","sum":"h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8="},{"path":"github.com/zondax/hid","version":"v0.9.2","sum":"h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U="},{"path":"github.com/zondax/ledger-go","version":"v0.14.3","sum":"h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw="},{"path":"go.opencensus.io","version":"v0.24.0","sum":"h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0="},{"path":"go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc","version":"v0.47.0","sum":"h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs="},{"path":"go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp","version":"v0.47.0","sum":"h1:sv9kVfal0MK0wBMCOGr+HeJm9v803BkJxGrk2au7j08="},{"path":"go.opentelemetry.io/otel","version":"v1.22.0","sum":"h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y="},{"path":"go.opentelemetry.io/otel/metric","version":"v1.22.0","sum":"h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg="},{"path":"go.opentelemetry.io/otel/trace","version":"v1.22.0","sum":"h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0="},{"path":"golang.org/x/crypto","version":"v0.21.0","sum":"h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA="},{"path":"golang.org/x/exp","version":"v0.0.0-20230905200255-921286631fa9","sum":""},{"path":"golang.org/x/net","version":"v0.23.0","sum":"h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs="},{"path":"golang.org/x/oauth2","version":"v0.17.0","sum":"h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ="},{"path":"golang.org/x/sync","version":"v0.6.0","sum":"h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ="},{"path":"golang.org/x/sys","version":"v0.18.0","sum":"h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4="},{"path":"golang.org/x/term","version":"v0.18.0","sum":"h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8="},{"path":"golang.org/x/text","version":"v0.14.0","sum":"h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ="},{"path":"golang.org/x/time","version":"v0.5.0","sum":"h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk="},{"path":"google.golang.org/api","version":"v0.162.0","sum":"h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps="},{"path":"google.golang.org/genproto","version":"v0.0.0-20240227224415-6ceb2ff114de","sum":"h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY="},{"path":"google.golang.org/genproto/googleapis/api","version":"v0.0.0-20240227224415-6ceb2ff114de","sum":"h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0="},{"path":"google.golang.org/genproto/googleapis/rpc","version":"v0.0.0-20240227224415-6ceb2ff114de","sum":"h1:cZGRis4/ot9uVm639a+rHCUaG0JJHEsdyzSQTMX+suY="},{"path":"google.golang.org/grpc","version":"v1.63.2","sum":"h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM="},{"path":"google.golang.org/protobuf","version":"v1.33.0","sum":"h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI="},{"path":"gopkg.in/ini.v1","version":"v1.67.0","sum":"h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA="},{"path":"gopkg.in/yaml.v2","version":"v2.4.0","sum":"h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY="},{"path":"gopkg.in/yaml.v3","version":"v3.0.1","sum":"h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA="},{"path":"nhooyr.io/websocket","version":"v1.8.6","sum":"h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k="},{"path":"pgregory.net/rapid","version":"v1.1.0","sum":"h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw="},{"path":"sigs.k8s.io/yaml","version":"v1.4.0","sum":"h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E="}],"cosmos_sdk_version":"v0.47.11"}} \ No newline at end of file diff --git a/assets/rewards.json b/assets/rewards.json new file mode 100644 index 0000000..e95c9c0 --- /dev/null +++ b/assets/rewards.json @@ -0,0 +1,8 @@ +{ + "rewards": [ + { + "denom": "uatom", + "amount": "690574.020284639200000000" + } + ] +} diff --git a/assets/self-delegation.json b/assets/self-delegation.json new file mode 100644 index 0000000..c5dca3c --- /dev/null +++ b/assets/self-delegation.json @@ -0,0 +1,13 @@ +{ + "delegation_response": { + "delegation": { + "delegator_address": "cosmos1xqz9pemz5e5zycaa89kys5aw6m8rhgsvtp9lt2", + "validator_address": "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + "shares": "200000000.000000000000000000" + }, + "balance": { + "denom": "uatom", + "amount": "200000000" + } + } +} diff --git a/assets/signing-info.json b/assets/signing-info.json new file mode 100644 index 0000000..378ea9f --- /dev/null +++ b/assets/signing-info.json @@ -0,0 +1 @@ +{"val_signing_info":{"address":"cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc","start_height":"14778937","index_offset":"5662147","jailed_until":"1970-01-01T00:00:00Z","tombstoned":false,"missed_blocks_counter":"8"}} \ No newline at end of file diff --git a/assets/slashing-params.json b/assets/slashing-params.json new file mode 100644 index 0000000..8ad991d --- /dev/null +++ b/assets/slashing-params.json @@ -0,0 +1,9 @@ +{ + "params": { + "signed_blocks_window": "10000", + "min_signed_per_window": "0.050000000000000000", + "downtime_jail_duration": "600s", + "slash_fraction_double_sign": "0.050000000000000000", + "slash_fraction_downtime": "0.000100000000000000" + } +} \ No newline at end of file diff --git a/assets/soft-opt-out-threshold-invalid.json b/assets/soft-opt-out-threshold-invalid.json new file mode 100644 index 0000000..a5cb87b --- /dev/null +++ b/assets/soft-opt-out-threshold-invalid.json @@ -0,0 +1 @@ +{"param":{"subspace":"ccvconsumer","key":"SoftOptOutThreshold","value":"\"test\""}} \ No newline at end of file diff --git a/assets/soft-opt-out-threshold.json b/assets/soft-opt-out-threshold.json new file mode 100644 index 0000000..ada84b8 --- /dev/null +++ b/assets/soft-opt-out-threshold.json @@ -0,0 +1 @@ +{"param":{"subspace":"ccvconsumer","key":"SoftOptOutThreshold","value":"\"0.05\""}} \ No newline at end of file diff --git a/assets/staking-params.json b/assets/staking-params.json new file mode 100644 index 0000000..06ab221 --- /dev/null +++ b/assets/staking-params.json @@ -0,0 +1,13 @@ +{ + "params": { + "unbonding_time": "1814400s", + "max_validators": 180, + "max_entries": 7, + "historical_entries": 10000, + "bond_denom": "uatom", + "min_commission_rate": "0.050000000000000000", + "validator_bond_factor": "250.000000000000000000", + "global_liquid_staking_cap": "0.250000000000000000", + "validator_liquid_staking_cap": "1.000000000000000000" + } +} diff --git a/assets/unbonds.json b/assets/unbonds.json new file mode 100644 index 0000000..4ec1ea7 --- /dev/null +++ b/assets/unbonds.json @@ -0,0 +1,22 @@ +{ + "unbonding_responses": [ + { + "delegator_address": "cosmos1zse8yqt0h9v67jw2e4h0wttwcuvtg3wvn699ax", + "validator_address": "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + "entries": [ + { + "creation_height": "20753212", + "completion_time": "2024-06-27T21:21:52.380941282Z", + "initial_balance": "44670000", + "balance": "44670000", + "unbonding_id": "731559", + "unbonding_on_hold_ref_count": "1" + } + ] + } + ], + "pagination": { + "next_key": "FBd69Kj/w6D0COaUv3igceWwNCRf", + "total": "14" + } +} diff --git a/assets/validators.json b/assets/validators.json new file mode 100644 index 0000000..986662f --- /dev/null +++ b/assets/validators.json @@ -0,0 +1 @@ +{"validators":[{"operator_address":"cosmosvaloper1qphf0ferqcch0jca9hlqfm3x0eds3dpkcvpafp","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"voVoXB0ArzZ57NgZgyAhrwa0mVabPijeqT0ebQJYPPc="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1486300","delegator_shares":"1486300.000000000000000000","description":{"moniker":"test kim","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-12-20T07:59:27.494716670Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1qr6sk28w4r6kqsg0737wzgu05505t4glezetwn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"zNdZ387kZrZFhZZ5G8oJR1b7hVgnKa3ZOJK7Ha05DUM="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"170582","delegator_shares":"170582.000000000000000000","description":{"moniker":"Equinox","identity":"048733E2C6061B87","website":"https://www.equinoxdao.xyz","security_contact":"","details":"Cosmos Equinox validator"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1q9p73lx07tjqc34vs8jrsu5pg3q4ha534uqv4w","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Y3FwPLeVHUhR+Or59OJ1SCq0OiS/tBye2YdKA3dzy/s="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"52689458","delegator_shares":"52689458.000000000000000000","description":{"moniker":"Unstake as we will shut down","identity":"C58922A0F158B2D1","website":"https://www.3stakes.com","security_contact":"support@3stakes.com","details":"3Stakes.com is a Dutch team validating in the Ecosystem. Our operations will be CO2 neutral as we will offset any emissions created from our operations. We will be looking to create validators for new chains in the Cosmos ecosystem and participate in testnets."},"unbonding_height":"10150222","unbonding_time":"2022-05-08T10:37:31.108207984Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-15T08:52:23.793881126Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1qgju44qz5e2y2v9azkqfs8n7d97lg97008qgjz","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"giyspSi9QoGIGXeNKniALJcvMDq9333BwRJSFvOCaP0="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1254432","delegator_shares":"1254432.000000000000000000","description":{"moniker":"nysa.network","identity":"F7E5A47BC1D9F95B","website":"https://nysa.network","security_contact":"contact@nysa.network","details":"Safe and secure interchain validator"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2022-10-28T16:48:33.762859295Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1q2v728c5g8ggvrr7dgc4madt9px2hlpdxpfmug","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"4qphWCf8W4x9dQM6KP8zx6FFnWov27Y3iyp2GzHP4hA="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"5000000","delegator_shares":"5000000.000000000000000000","description":{"moniker":"ContributionDAO","identity":"3034BD2560DD86B4","website":"https://contributiondao.com","security_contact":"","details":"Bootstrapping Quality Talents and Onboarding Users to the Projects for making opportunities in Web 3.0 accessible to everyone."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-09-21T09:47:03.391870450Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1qtxec3ggeuwnca9mmngw7vf6ctw54cppey02fs","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"eM06fEUTaklyswDIY1gd40S91PpMqV+laD6o0l582k8="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"395214925","delegator_shares":"395252715.087440432545655752","description":{"moniker":"tokenpocket","identity":"","website":"https://www.tokenpocket.pro/","security_contact":"","details":"Your universal digital wallet, Multi-chain digital wallet, portal to DApp ecosystem"},"unbonding_height":"19106","unbonding_time":"2020-01-03T05:40:24.513254493Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.956261370073061623"},{"operator_address":"cosmosvaloper1qdxmyqkvt8jsxpn5pp45a38ngs36mn2604cqk9","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2BX6Zuj8RmdJAkD1BAg6KB0v04liyM7jBdwOGIb9F9Q="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"3054057316","delegator_shares":"3054057316.000000000000000000","description":{"moniker":"真本聪\u0026IOSG","identity":"8A79F44CC25D26DF","website":"realsatoshi.net","security_contact":"","details":"To The Moon Then Cosmos. We are a crypto community and venture capital combined staking service provider"},"unbonding_height":"4931426","unbonding_time":"2021-02-16T09:31:22.415989779Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2019-08-05T07:24:32.572614545Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1qwl879nx9t6kef4supyazayf7vjhennyh568ys","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"cOQZvh/h9ZioSeUMZB/1Vy1Xo5x2sjrVjlE/qHnYifM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"278871007749","delegator_shares":"278871007749.000000000000000000","description":{"moniker":"Certus One","identity":"ABD51DF68C0D1ECF","website":"https://certus.one","security_contact":"","details":"Stake and earn rewards with the most secure and stable validator. Winner of the Game of Stakes. Operated by nexantic GmbH. By delegating, you confirm that you are aware of the risk of slashing and that nexantic GmbH is not liable for any potential damages to your investment."},"unbonding_height":"15909213","unbonding_time":"2023-07-19T12:22:56.081015927Z","commission":{"commission_rates":{"rate":"0.125000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["51100","80800"],"validator_bond_shares":"750000.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1qs8tnw2t8l6amtzvdemnnsq9dzk0ag0z52uzay","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"hATVIEvJ1NEt5g9i59iH+a8oaEFtErP227Qw7kgpWTc="},"jailed":false,"status":"BOND_STATUS_UNBONDING","tokens":"44646004035","delegator_shares":"44646004035.000000000000000000","description":{"moniker":"Castlenode","identity":"F685CC35D748424C","website":"https://www.castlenode.com/cosmos","security_contact":"","details":"Castlenode is a validator operator focused on security and run by experienced professionals. Please read our Terms and Conditions on our website before delegating"},"unbonding_height":"20956774","unbonding_time":"2024-07-12T05:48:34.771719691Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["19336","43930","52030","125709","127564","128616","131427","131515","131822","152607","175873","202065","354218","365425","449445","452129","472935","499173","517854","562488","572400","574532","583662","584121","585215","596824","597637","626775","628053","628302","646223","711731","719564","729437","730009","730816","732598","743703","749811","753749"],"validator_bond_shares":"5000000.000000000000000000","liquid_shares":"245371688.000000000000000000"},{"operator_address":"cosmosvaloper1q6d3d089hg59x6gcx92uumx70s5y5wadklue8s","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"uEUR1gpesU4bnSWL2TOXOf3org2mCYhQHMYkiCJyMD4="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1132806269948","delegator_shares":"1132806269948.000000000000000000","description":{"moniker":"Ubik Capital","identity":"8265DEAF50B61DF7","website":"https://www.ubik.capital","security_contact":"","details":"Ubik Capital secures major proof of stake networks and is a trusted staking provider with years of industry experience. By delegating to us, you agree to the Terms of Service at: https://ubik.capital"},"unbonding_height":"16925816","unbonding_time":"2023-09-30T06:17:37.572905825Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["131285"],"validator_bond_shares":"450000000.000000000000000000","liquid_shares":"11500470918.000000000000000000"},{"operator_address":"cosmosvaloper1qmr8acxu0d9ytase8v9mza6k96y479getstqn2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"7DqASpEZb15tlS8kIteAsBcr4OhdPrWoGg5+nIQO1EI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"171500","delegator_shares":"171500.000000000000000000","description":{"moniker":"CryptoGoose","identity":"5D16D3AFED1617C1","website":"cryptogoose.io","security_contact":"","details":"Stake and earn reward with CryptoGoose validator. Cosmos \u0026 Crypto Ecosystem Contributor. Silicon Valley based team."},"unbonding_height":"0","unbonding_time":"2019-06-19T13:16:31.821040692Z","commission":{"commission_rates":{"rate":"0.071000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2019-05-03T20:20:26.798189066Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1qa8jpt4kuqq73vgen2w7julkelgursygqx4y69","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"UL4BJDjdcxs9K8l3kqA35CtJg68OEs4DzKzNjhCk4SY="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2999778","delegator_shares":"3000007.769828448342180168","description":{"moniker":"suyuuuuuuu","identity":"2161153638A9211D","website":"","security_contact":"","details":""},"unbonding_height":"28609","unbonding_time":"2020-01-04T00:04:59.091467731Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2019-03-30T13:37:44.193748147Z"},"min_self_delegation":"2","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1qa6x6sl9lsw9neceqccndwnnnm50ldq800x4dq","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QGVtDX/SksMy9iAShygkGVs3yoCHzItXX3qtyrSUIng="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000","delegator_shares":"1000.000000000000000000","description":{"moniker":"bitszn","identity":"7905858131F4FBE7","website":"https://bitszn.com","security_contact":"bitszn.com@gmail.com","details":"Crypto faucets provider. Snapshots provider. RPC and State Sync provider. Good mood provider."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-10-29T14:50:40.590461541Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1qaa9zej9a0ge3ugpx3pxyx602lxh3ztqgfnp42","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Qajjf1kiAJ0M1UcH1TSUYLP13kgE128Av1XmGQO711c="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"5391567020671","delegator_shares":"5391567020671.000000000000000000","description":{"moniker":"GAME","identity":"6F3A316294AD9D0B","website":"","security_contact":"","details":"For all game enthusiasts"},"unbonding_height":"19747459","unbonding_time":"2024-04-18T03:14:43.022587233Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["104638","573150"],"validator_bond_shares":"4900000000.000000000000000000","liquid_shares":"388833666.000000000000000000"},{"operator_address":"cosmosvaloper1pp82zzdgf4cvgwkkutkwnfu9vzcm6rpryn2wcc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"lvBUI9vDOZe2emrgOyubZHRR+LowYbt1z9333Mi6dKc="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1210893","delegator_shares":"1210893.000000000000000000","description":{"moniker":"Nodeist","identity":"A2E180C6914F7F87","website":"https://nodeist.net","security_contact":"hello@nodeist.net","details":"Nodeist is the trusted staking service provider for blockchain projects. 100% refund for downtime slash. Contact us at hello@nodeist.net"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.075000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2023-09-16T23:39:35.929966050Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1pz0lfq40sa63n0wany3v95x3yvznc5gyf8u28w","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Y+Iy4Vpxz1gBzxNAguGmqYzkTi1qoad2Jo10vZ4zNxo="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2178038447","delegator_shares":"2178909751.944430575044736159","description":{"moniker":"Cobo","identity":"3B7C85200D5B57A9","website":"https://cobo.com/","security_contact":"","details":"Cobo is the first leading company in the world to offer Proof-of-Stake (PoS) and masternode rewards on user holdings, making it easy for users to grow their digital assets effortlessly."},"unbonding_height":"7648625","unbonding_time":"2021-10-04T11:39:15.114941866Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-06-15T05:45:23.950986198Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10004.000411221531458322"},{"operator_address":"cosmosvaloper1prvhg36trh0y7dajrlny6h9qhp0cpwh0nl3p7k","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"rOCY9l/86nyr95IlB7tPvRwnPhkDoxGTJXpvuDIbxzk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1105861","delegator_shares":"1105971.597159715971597159","description":{"moniker":"liwei","identity":"5A9E54BA22055990","website":"","security_contact":"","details":""},"unbonding_height":"5240671","unbonding_time":"2021-03-14T20:24:31.738746239Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-12-14T03:07:24.987475258Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.000100010001000100"},{"operator_address":"cosmosvaloper1pxsmjzan4u833l5s72pzamlurcgk2g5m65xjlj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"mLUEzU9eAQdiRcAXhPXNq4dxkW2rj3RDGw3mvgDfhhM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"7700062","delegator_shares":"7703075.053621125517177055","description":{"moniker":"MyCointainer","identity":"E73A7D1A0002C90C","website":"https://www.mycointainer.com/","security_contact":"","details":"Simple solution for everyone. Over 80 intrest generating assets integrated. Deposit, exchange and stake instantly."},"unbonding_height":"8809983","unbonding_time":"2022-01-14T06:51:04.121939777Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-10-16T11:18:50.667233127Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1pgsjyvkg3y2m7qas534zzdhsqsxqyph2jh3uck","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"osmOXFMMuO+MsSBT8eetbZ49au0ZBI2lm/yVmzW0gAY="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"162058965","delegator_shares":"162107583.856299369065783701","description":{"moniker":"OneSixtyTwo","identity":"1C136F82A18BB2E2","website":"","security_contact":"","details":"OneSixtyTwo"},"unbonding_height":"5120653","unbonding_time":"2021-03-04T10:23:46.255183065Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-05-15T01:32:35.507930617Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10003.000133722893779164"},{"operator_address":"cosmosvaloper1pffsadvlewevatmf6kpy0mtdkre2mzzre3zhe6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"zufzov5jk6cs+VefLvN3u8mGoiBlkXWp6Vo8XQXp1/w="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"Pathrocknetwork","identity":"8E9797A900A7A429","website":"https://pathrocknetwork.org/","security_contact":"","details":"Secure Non-Custodial Staking for PoS Blockchain Projects. We run reliable and secure validators and nodes of several different blockchain protocols. Come stake with us."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-28T21:12:51.157438269Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1p2mc677uxl8qfn5a9j3n9q67ja9ue3nq2zk43s","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"AWogOwsK+B44ZUt7s+HCrD+uNMiTQUPOCp77qtcYdV8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1908250","delegator_shares":"1908250.000000000000000000","description":{"moniker":"quichxh","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-16T06:54:10.498477692Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1ptz7xq0fanh4kfvp6fdhevkx90axaq7drwcwjl","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"1a0ERUOIOeYHFO1UcKHC7pAHIyDGN9EOm/ByG+j2ZLM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"36585400","delegator_shares":"36589012.138661998703145804","description":{"moniker":"Cobak","identity":"3ADADE0338CAB480","website":"https://cobak.co.kr","security_contact":"","details":" Cobak is No.1 crypto community service in South Korea. We are the world's only mobile service that provides crypto wallet, community, real time ticker, news, airdrop, and token sale."},"unbonding_height":"18373","unbonding_time":"2020-01-03T04:15:14.659708638Z","commission":{"commission_rates":{"rate":"0.120000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.500000000000000000"},"update_time":"2019-04-30T10:44:54.842272240Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1ptyzewnns2kn37ewtmv6ppsvhdnmeapvtfc9y5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XiGz/D6eg3KdjaFB0uYIJwkOTW5xZcFRxJmHcQYB3zg="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"587137606884","delegator_shares":"587137606884.000000000000000000","description":{"moniker":"WeStaking","identity":"DA9C5AD3E308E426","website":"https://www.westaking.io","security_contact":"","details":"We provide you with continuous uptime and secured."},"unbonding_height":"0","unbonding_time":"2019-09-07T12:24:58.270714195Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"827000000.000000000000000000","liquid_shares":"6796990050.000000000000000000"},{"operator_address":"cosmosvaloper1ps7dmygt4wm72t8l9kdjetelhggsv8w77mdh33","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"4FAoNAp3t+9epiDWRwjH38E5F9zDWet3ufHdQPjdaBM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"13920","delegator_shares":"14655.559402062141765943","description":{"moniker":"CosmosPool.org","identity":"080E0C935CEAA4FB","website":"http://cosmospool.org","security_contact":"","details":"CosmosPool.org's goal is to further decentralize and bootstrap the Cosmos Hub."},"unbonding_height":"0","unbonding_time":"2019-07-20T07:38:16.401325621Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.400000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-04-28T07:59:58.929515224Z"},"min_self_delegation":"100000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10528.419110676825981280"},{"operator_address":"cosmosvaloper1pjmngrwcsatsuyy8m3qrunaun67sr9x7z5r2qs","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"w3rKE+tQoLK8G+XPmjn+NszCk07iQ0sWaBbN5hQZcBY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"174611479634","delegator_shares":"174628942403.620324229082397549","description":{"moniker":"Cypher Core","identity":"","website":"","security_contact":"admin@cypherore.io","details":"We are devoted to bring financial freedom to everyone. For questions contact admin@cypherore.io"},"unbonding_height":"6656339","unbonding_time":"2021-07-12T00:30:38.961569688Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"795079507.624496678862302177","liquid_shares":"278985488.053449108817622859"},{"operator_address":"cosmosvaloper1p42rgfdq500nlt387l4f0vfv5p90dl6ftr8jds","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"aBdX6sh3XVMzFnBdlALK72p7/496Sm87obUu9ShD+As="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"21501266","delegator_shares":"21501266.000000000000000000","description":{"moniker":"","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"7754839","unbonding_time":"2021-10-13T17:12:05.140941525Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2021-03-04T18:43:29.777929967Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1pexrxk6s9aznl8ap2g8jr87ktc3a7dd8xf0etj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"DGWgRoNE3JrO2HN81518N+JBjkt4/Lf83uPZTHwk3Rc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"5159936","delegator_shares":"5160450.728108418183069974","description":{"moniker":"CosmosOne","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-05-14T12:05:26.783252606Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1p650epkdwj0jte6sjc3ep0n3wz6jc9ehh8jutg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2SkunbnMYBGvZrZtjjHCU8ijFbr/8Ql/QdUpEYQZY/I="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"4965567427","delegator_shares":"4967057323.788189679357945201","description":{"moniker":".","identity":"","website":"","security_contact":"","details":"."},"unbonding_height":"12489634","unbonding_time":"2022-11-07T22:57:05.638734771Z","commission":{"commission_rates":{"rate":"0.500000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-12-02T06:38:53.214130424Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10003.000517485256361377"},{"operator_address":"cosmosvaloper1pmdxquuver2aj60rac8efqc87yk6tu0usuwar6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Y2OgccoQwV2jcDjSuwuQ3dPW9vT4R2h/4NOdj2+T4tI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2814703","delegator_shares":"2814902.222242573082525095","description":{"moniker":"walletapibeta","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"5229796","unbonding_time":"2021-03-13T22:50:35.984920385Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-08-31T03:19:03.295218950Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1p7n5agmrptr43t9te27tz7c4tnpw2dj3s4p6jm","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"7PbyY3/soDQrMlXDt9CiJl1D3v216qnt5FRhXEli7FQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"8100221","delegator_shares":"8101030.097209855579449063","description":{"moniker":"SlowMistZone","identity":"37B1DAD4F652EB0B","website":"https://slowmist.io","security_contact":"","details":"Security, stability and VIP experience."},"unbonding_height":"10001","unbonding_time":"2020-01-02T11:58:18.459331455Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-12T10:28:44.577981801Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1plqg37mpfqfp89sw2prw4f333k8a7zkemjcshz","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"zJ8kJPIxOJfmWXKDXCs2WPr9dZft0LL7NbZcrdSeXAg="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000","delegator_shares":"1000.000000000000000000","description":{"moniker":"!hello it's a me!!","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-11-10T20:38:54.384114261Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1zqgheeawp7cmqk27dgyctd80rd8ryhqs6la9wc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ovdfH/edW89+uiB0lHC5OnCbQfKtkn8G1RHZiOP4sYQ="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"4751032813556","delegator_shares":"4751032813556.000000000000000000","description":{"moniker":"NO! Fee to 2025 💸 | melea.xyz","identity":"4BE49EABAA41B8BF","website":"https://meleatrust.com/","security_contact":"","details":"FREE Validator service at 0% Commission → throughout the years 2022, 2023, 2024 → melea.xyz"},"unbonding_height":"0","unbonding_time":"2019-06-26T23:50:09.388403260Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"10015717.000000000000000000","liquid_shares":"7351972223.000000000000000000"},{"operator_address":"cosmosvaloper1zp6kg7qlmztyw2km2af4z5ruz5vn04cp9npe79","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"pDgRB4ZUupIx+gOU2bXpFC7VZnvPSiz2xc74pK6Dgec="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"59342063","delegator_shares":"59353924.411143824297076920","description":{"moniker":"piggy-coin.com 🐷","identity":"FD4BAC5CE60EFB7D","website":"https://www.piggy-coin.com/","security_contact":"","details":"Delegate here to support piggy-coin's hard-spoon to tendermint/cosmos"},"unbonding_height":"174710","unbonding_time":"2020-01-15T19:58:59.089667372Z","commission":{"commission_rates":{"rate":"0.250000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.005000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"100000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1z96p06tf6pqeca9gatv8h9hp83z2ng4l6erxj4","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"YDmfkE694oyAciDeNtO/wPyN/kCVA3wWsX/Lecr2E0A="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"359749663479","delegator_shares":"359749663479.000000000000000000","description":{"moniker":"interchain.FM🥩","identity":"8E92184569CD8E2D","website":"","security_contact":"","details":"Non-custodial high 99.99% uptime validator w/ 100% return for downtime slashing. Run by your favorite Cosmos Radio Station. Auto-compounding (automatically re-stake rewards) is supported on https://restake.app"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-04-14T17:26:53.844879805Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"410000000.000000000000000000","liquid_shares":"469279574.000000000000000000"},{"operator_address":"cosmosvaloper1zxphhzuweenrq3vvgsgj6g25axdpghtglg0veq","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"10Zvr9A1E5Rf6x4ThXi5A1GLi9emXjp2tyIQ25IOpcU="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"414725617","delegator_shares":"414767084.128757473308350117","description":{"moniker":"X-Stake","identity":"C5F94CC129A1EA81","website":"https://xstake.io","security_contact":"","details":"FINANCIAL INDEPENDENCE IS FREEDOM OF CHOICE"},"unbonding_height":"5210292","unbonding_time":"2021-03-12T08:04:49.467032067Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-10-22T17:28:48.710973646Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1z8zjv3lntpwxua0rtpvgrcwl0nm0tltgpgs6l7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Aum3ZbNR/pFXYLA5yeL4Zeyr6v1BFrjy6sABnvyWnjw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"5001834048643","delegator_shares":"5001834048643.000000000000000000","description":{"moniker":"Kraken","identity":"44F2F30E6D6C0265","website":"kraken.com","security_contact":"","details":"Kraken Exchange validator"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-03-24T11:40:29.941309478Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1zgqal5almcs35eftsgtmls3ahakej6jmnn2wfj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"JiVwIUBeyFUqz1zbaY+Oybq89aSl9yDxwwmx+J5CdiY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"342997909556","delegator_shares":"343032212355.195667230236747906","description":{"moniker":"Inu X","identity":"5F87AB452AE2D252","website":"https://inux.dev/","security_contact":"","details":"Empowering Decentralization! Running all types of Validator Nodes at Inu X."},"unbonding_height":"20749302","unbonding_time":"2024-06-27T14:47:05.566810360Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-01-16T16:40:57.446139755Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"1","unbonding_ids":["498827","596543","645721","730541"],"validator_bond_shares":"410000000.000000000000000000","liquid_shares":"345339263.760173881656967924"},{"operator_address":"cosmosvaloper1zgw8kzwl9na7egn7l9u8d6e2vtf0tvs896relx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"t+NDuEIEkevf7N7sD++Hlx0GRJp05Wq0w0ifYqyLSbU="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1240000","delegator_shares":"1240000.000000000000000000","description":{"moniker":"AgoraNodes","identity":"89BE1A153AC17E34","website":"https://AgoraNodes.com","security_contact":"","details":"Thank you for staking with AgoraNodes. Find us on Telegram @AgoraNodes and on Twitter @Agora_Nodes!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.270000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1zf37grr7nxffaacqfdyw5laeetnxm546aqz6uj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"v6Emoa532mTaU2yhi4ojqqFNwIxL/KRDjl1R8lc/0nM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"37535515","delegator_shares":"37539266.952642825141727987","description":{"moniker":"MyCosmosValidator","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"38508","unbonding_time":"2020-01-04T19:14:40.127788014Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-04-27T22:08:19.129845359Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1zdzerwr2jh2ngmlfvrn480yw6krxnyewls7v0j","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"sTyXZ2KT3Su3r7XL/9RYlBWAIhxjjwh0rI6VK/oiEWU="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"Disperze","identity":"AC87F469C49533B1","website":"http://disperze.network","security_contact":"disperze@protonmail.com","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.005000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1zwrav6vq7a9g37vwt6nl8ra63hhc20emsmvyp5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"GahSMcG2ovAlAd1ZYM0CflhXgoJ8W7UZF7bYG1aCUnE="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1201714","delegator_shares":"1201714.000000000000000000","description":{"moniker":"Spacebot","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"8714294","unbonding_time":"2022-01-06T09:14:24.660892644Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.025000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1z3xngnvpyt33dlhrsmcz6pwd4fp47uem9545ed","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"B4B3kw8I12F5CuJP5b9snJ0OH4FnE6tnFq/oRDOZ8KI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"11294998","delegator_shares":"11294998.000000000000000000","description":{"moniker":"unicorn-ethermat-1","identity":"988079C948B74A30","website":"https://www.ethermat.com/pool.html","security_contact":"","details":"🦄 | security focused validator for the blockchain world"},"unbonding_height":"0","unbonding_time":"2019-07-14T21:08:00.854456442Z","commission":{"commission_rates":{"rate":"0.060000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-07-09T05:38:55.419308872Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1zk49r55txl9a7nttjcsqjrg5lus8hckkhgzez7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"iHYfecYbFLFE367n7TbG9SfZtVnx8YAaDsO65Mj+/gY="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1086881","delegator_shares":"1086881.000000000000000000","description":{"moniker":"BitStack-0","identity":"","website":"https://bitstack.com","security_contact":"","details":"BitStack makes professional staking."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-04-18T10:30:56.907021056Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1zc0z44e42qhzltqc8qpj5qrzn836d3lftnqmgw","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"RmZrhXPQnlezA123kDhWU15gM+vEAmnyNhcVex9Eucg="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"150500509917","delegator_shares":"150500509917.000000000000000000","description":{"moniker":"Virtual Hive","identity":"6B7C28B90CE84014","website":"https://virtualhive.io","security_contact":"","details":"🍀 100% Green Energy, 24/7 Monitoring, Ops Team, Multiple Geo Locations, Dedicated Enterprise Hardware, 20% Max Commission"},"unbonding_height":"18146061","unbonding_time":"2023-12-26T08:56:49.515822849Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-02-02T10:44:01.387686308Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["214719"],"validator_bond_shares":"10817260100.000000000000000000","liquid_shares":"8692403087.000000000000000000"},{"operator_address":"cosmosvaloper1zc3gqnw9z9vvayunepazm8r40alfn2djscn4pc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"xHFEoaIzluNsHbniqV9iF4/3zBxpmfPw09IKE5XS+5Y="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"9010000","delegator_shares":"9010000.000000000000000000","description":{"moniker":"0xDEADBEEF","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1zccyq99s2pcu3tjrpmlhyfcr0fpekpz2yggk66","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"xOleZWbJCRZYMx+6B6knbVOTjy+Nj+G8bZ523nvrHbA="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"999800","delegator_shares":"999899.989998999899989999","description":{"moniker":"SB Wallet","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"5230670","unbonding_time":"2021-03-14T00:34:57.088128032Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.025000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1z66j0z75a9flwnez7sa8jxx46cqu4rfhd9q82w","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"cSicfeRvftCpuuw9v5NjBZyuM5Vs1J2zsgywXKmOmVE="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10480221076","delegator_shares":"10481269078.397514480650158415","description":{"moniker":"debo[REDELEGATE FROM US]","identity":"76BF1DAC717BFAD6","website":"","security_contact":"","details":"We have safely terminated the validator service without being slashed as of April 10, 2023. Please redelegate from DEBO."},"unbonding_height":"14831930","unbonding_time":"2023-05-01T15:54:40.528416175Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-04-30T16:54:43.920472378Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["22091","22248","22262"],"validator_bond_shares":"200020.020110318216232913","liquid_shares":"10001.723140036559838242"},{"operator_address":"cosmosvaloper1zmr5mglwkkru7m3q8sxcg66gxr508v6h6lv8fg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"699VAw6Nuli8NpF7l2Kh+qNj3rlEU//oMtTRN+DabD4="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1039200","delegator_shares":"1039200.000000000000000000","description":{"moniker":"*% Fee - Mpress 🚀","identity":"","website":"","security_contact":"","details":"*% Fee Validator Service --- Will have occasionally for server equipment or my birthday some fees! doanations to cosmos1zmr5mglwkkru7m3q8sxcg66gxr508v6hltcj9m"},"unbonding_height":"8717750","unbonding_time":"2022-01-06T15:51:34.225765485Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.500000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1rpgtz9pskr5geavkjz02caqmeep7cwwpv73axj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"fUj2rJ8mWqSdo8FX47dhWni++/oxOSduCBgymD4GCiU="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1494979585855","delegator_shares":"1495577723836.780903861410298889","description":{"moniker":"Blockpower","identity":"DF1CDD6E03CCF372","website":"https://blockpower.capital","security_contact":"","details":"We are web 3.0 trusted validators and discerning investors focused on secure staking, enterprise grade infrastructures and high quality applications."},"unbonding_height":"16403932","unbonding_time":"2023-08-23T22:23:22.862048925Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["106990"],"validator_bond_shares":"7002800690.851602009585456325","liquid_shares":"254017659.055221047103005977"},{"operator_address":"cosmosvaloper1rrlevagmm7lv0kcysnf8v95pxjtt4fjhh8jz5k","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"op0RXmGCxEEo09IDbivki71z5H9wBkDg8moodRD5unI="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"51000000","delegator_shares":"51000000.000000000000000000","description":{"moniker":"hulk","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2023-09-15T08:06:22.204983295Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1r9lxkpqre6j4487ut882xchgr7rdtx3x76gtdp","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XEx3YFtkMEYHWSmGCzlbB5EwYcRngp3AUSZBHJrzKs0="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1999800","delegator_shares":"2000000.000000000000000000","description":{"moniker":"terraform_staging_03","identity":"","website":"https://example.com","security_contact":"","details":"Terraform Staging"},"unbonding_height":"43432","unbonding_time":"2020-01-05T04:46:43.861334769Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-21T04:59:20.384270601Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1rxvkwfw3467nxgs6r7yav6cnygkjzkkc2defr6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"pv13kpg8c/StIH94jkfI3IGux17as+plR4UpMexydKY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"362941722860","delegator_shares":"363014321600.945250742349855500","description":{"moniker":"Cryptostake.com 🇨🇭🇺🇦","identity":"52D4F9A6900E5BB3","website":"https://cryptostake.com","security_contact":"","details":"Stake Your Future"},"unbonding_height":"20723477","unbonding_time":"2024-06-25T13:36:06.366585874Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"1","unbonding_ids":["41027","76657","718794","722215","725853"],"validator_bond_shares":"10017214.334826001407334936","liquid_shares":"245379866.015604810917512609"},{"operator_address":"cosmosvaloper1r8kyvg4me2upnvlk26n2ay0zd5t4jktna8hhxp","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"h9RZX6Ehk1T2nS183c/sGtWtJ2WhbpQrGqelw77gf+U="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"228593128","delegator_shares":"228593128.000000000000000000","description":{"moniker":"noma","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"10333693","unbonding_time":"2022-05-23T06:15:13.127170993Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2019-03-14T03:50:13.123302789Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1rfpar0qx3umnhu0f6wjp4hvnr3x6u5389e094j","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"zXKJLZjLusy5tRs5bNoafLPTB5LLP6tZGHSeG4TIRGE="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1015440","delegator_shares":"1015440.000000000000000000","description":{"moniker":"DECOMMISSIONED","identity":"","website":"http://stake.zone","security_contact":"","details":"DECOMMISSIONED"},"unbonding_height":"751914","unbonding_time":"2020-03-03T06:24:28.833397583Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.030000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"50000000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1rfg7q868r8x04y4pnacdcs8hpec6sqrkfs7q6c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"d7djdKFuiUSVuN5dBA6whKtMt4rTtOGB34WWFYqT1Tk="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1","delegator_shares":"1.000000000000000000","description":{"moniker":"oneUatom","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-09-20T08:06:57.596137935Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1r2dthxctqzhwg299e7aaeqwfkgcc9hg8k3yd7m","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"t4RElYQBKVnkJxtrcLe24/CR1Ph88Q++rQLVaR5jNk0="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"90793916924","delegator_shares":"90848411678.922087518931033901","description":{"moniker":"Sunflower","identity":"","website":"","security_contact":"","details":"Thanks to this sunflower, the plants defeated the zombies!"},"unbonding_height":"20750971","unbonding_time":"2024-06-27T17:35:49.463555186Z","commission":{"commission_rates":{"rate":"0.999000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-02-01T09:48:35.473619760Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["51101","98193","336620","338572","381639","617094","617741","618770","622326","623954","626224","630618","634127","635084","638165","641721","641893","642103","643763","670169","684436","688591","691713","695238","697599","699460","709972","712344","715116","716350","721841","730986"],"validator_bond_shares":"10000000.000000000000000000","liquid_shares":"16089.391698890907013137"},{"operator_address":"cosmosvaloper1rwh0cxa72d3yle3r4l8gd7vyphrmjy2kpe4x72","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"pZBzfgX8aJXz9tqGvz75NnJB0wAFsMrfxY6FTnYMZ0Q="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"114381780497","delegator_shares":"114507675421.806291485561877256","description":{"moniker":"Factor","identity":" ","website":" ","security_contact":"","details":" "},"unbonding_height":"20686094","unbonding_time":"2024-06-22T22:49:02.631124798Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2020-12-21T02:59:21.998710148Z"},"min_self_delegation":"100000000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["8608","43619","76659","116708","134064","151155","235940","558019","722262"],"validator_bond_shares":"2108896041.990451755905416576","liquid_shares":"245659290.844783159274584744"},{"operator_address":"cosmosvaloper1rj6324uq904z5zr96zg6ew9qjyau9u6h5nflg6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"tuorGCLOL8gQrzGPb1NwC3eob2ArpK2AlQlhxoGD0nM="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"9623994327","delegator_shares":"9623994327.000000000000000000","description":{"moniker":"Don Cryptonium","identity":"95CDA4711A25A991","website":"https://twitter.com/DonCryptonium","security_contact":"support@tedcrypto.io","details":"Have no fear stakers! You know why? Because I'm here!"},"unbonding_height":"19748477","unbonding_time":"2024-04-18T04:56:35.840602257Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-06-30T14:46:12.593978722Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["660","68812","201938","202077","573297"],"validator_bond_shares":"10014990.000000000000000000","liquid_shares":"16089.000000000000000000"},{"operator_address":"cosmosvaloper1rjujxmsdk3n7hj07q54huh4esf4v0ts8mezqam","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"20dRjVArQtT3pKY7y0jUed7ADA8c87GIjDTzTlHSxfs="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1100000000","delegator_shares":"1100000000.000000000000000000","description":{"moniker":"DELIGHT","identity":"3F5BD795E6AB49AC","website":"https://delightlabs.io","security_contact":"","details":"Technology driven team contributing to a decentralized ecosystem"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-28T05:08:06.321057871Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1rn4gt0kphuqsdk7lu7m65gylv75q3ml4y6ns0j","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"aZI5yItnIFhzkFkuxRRmGPi5GeQgJ++KJ9LiWY57mq8="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"ether-one","identity":"833CA1106417D916","website":"https://ether-one.com","security_contact":"","details":"Proof of Concept for Proof of Stake"},"unbonding_height":"66052","unbonding_time":"2020-01-07T00:38:05.492450639Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-19T05:53:29.177894197Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1r50v53ua3mgfczlgf6jclycx2edcsaaftfjzs6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"GBym81286VZ2f0cPzI70Qd7l47vIFwXj1GQu+0ncCeQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"4","delegator_shares":"3.000600023203588447","description":{"moniker":"SIGN Capital","identity":"9C46A4ABF2271BEA","website":"http://SIGNcapital.eu/","security_contact":"","details":"SIGN Capital - investments with high returns"},"unbonding_height":"10001","unbonding_time":"2020-01-02T11:58:18.459331455Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.150000000000000000","max_change_rate":"0.030000000000000000"},"update_time":"2019-05-31T23:54:12.176123478Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1rcp29q3hpd246n6qak7jluqep4v006cdsc2kkl","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"9tK9IT+FPdf2qm+5c2qaxi10sWP+3erWTKgftn2PaQM="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"322181795662","delegator_shares":"322181795662.000000000000000000","description":{"moniker":"in3s.com","identity":"0CE19EE3E4BA48E5","website":"https://restake.app/cosmoshub/cosmosvaloper1rcp29q3hpd246n6qak7jluqep4v006cdsc2kkl","security_contact":"","details":"Cosmos Hub and Neutron validator since block 1. Never slashed. 1% commission to perpetuity. Automatically compound your rewards every hour with https://restake.app/cosmoshub/cosmosvaloper1rcp29q3hpd246n6qak7jluqep4v006cdsc2kkl."},"unbonding_height":"10611962","unbonding_time":"2022-06-14T12:01:58.463338855Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1500000000.000000000000000000","liquid_shares":"5725365930.000000000000000000"},{"operator_address":"cosmosvaloper1r6kcfntrczqmxuzy8488te4e9kyxcm75stdudd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"UsK8WDOKzyRBpryE4UHoADKLKsCOJoyqy9i4bUC2VJk="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1168711","delegator_shares":"1168711.000000000000000000","description":{"moniker":"ThomasBlock.io","identity":"","website":"https://www.ThomasBlock.io","security_contact":"","details":"ThomasBlock - your fair and reliable Validator. 7% Fee forever. Fresh node from June 2023"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.070000000000000000","max_change_rate":"0.030000000000000000"},"update_time":"2023-06-25T14:30:57.594350263Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1r6cwek6596vqzky4fezhy29qcdlv06d2laa2pk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"pty/iGycFfqczZWoTw501OablwraZ/LgADMRICXRyEQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"8399567","delegator_shares":"8400267.015834507725989677","description":{"moniker":"EON","identity":"861F3C8AEC3D9311","website":"https://eon.capital","security_contact":"","details":"Earn staking rewards and compound your holdings with EON. Contact us at https://eon.capital"},"unbonding_height":"38524","unbonding_time":"2020-01-04T19:16:32.564933910Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-22T20:15:22.581884649Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1rl23sesp9qc7j9cmntl75v3uu4zetjxnuqskea","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"rhBVDhfU4Ez/6AInW4x5ioUoUrjA8FYD6Hdu/Vv8yIg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"12625206","delegator_shares":"12625206.000000000000000000","description":{"moniker":"kreios","identity":"A0D6EFF27E1AA89D","website":"","security_contact":"","details":"Hack the Planet"},"unbonding_height":"0","unbonding_time":"2019-06-01T08:08:05.896051406Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1yqkg0cnkc2s6ml08eh682ud0qet8au5e7jvwcn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QOPpaG5PVqTGNrOHfAFSFS6smxoOanHr8Re3l+3hPg8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"49010000","delegator_shares":"49010000.000000000000000000","description":{"moniker":"[NODERS]TEAM","identity":"B38EBF2F38B998F4","website":"https://noders.team/","security_contact":"office@noders.team","details":"Tell me what node you set, and I will tell you who you are"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-07-27T06:13:18.785315398Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1yyhjumfj2lvsgzwhvk6fcezgwu6q70d0j59hlf","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2PVibwXqAeviO8qiA25oSGYV6b8Z5mxhTh+5dqdzUqU="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"12183796","delegator_shares":"12185014.501450145014501450","description":{"moniker":"BPSCOSMOS","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"7649125","unbonding_time":"2021-10-04T12:41:58.088310359Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1yfnaup5wa3vdzx3wx9auhvzl85saqj37tqxqnu","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QdNNFlJHRDGroJVBvb7WpPeZUSeqs5uaLSElffERa7w="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"205153319551","delegator_shares":"205153319551.000000000000000000","description":{"moniker":"Moonlet","identity":"9A2BCB95983B1B73","website":"https://moonlet.io","security_contact":"","details":"MoonletWallet Cosmos Validator"},"unbonding_height":"15155521","unbonding_time":"2023-05-25T08:04:47.778181738Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["1203","1244","22243","22257","40505"],"validator_bond_shares":"1000000000.000000000000000000","liquid_shares":"245355658.000000000000000000"},{"operator_address":"cosmosvaloper1y2w0t3t7qx3u7w2qwfw8zm66tj9jdxysrv8kwj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"eoHaO4Vn0c8tEUu4j737COeMpjcJC6WEyiEYksApS7E="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000010","delegator_shares":"1000010.000000000000000000","description":{"moniker":"authz-test-validator","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-06-05T07:09:13.789897607Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1yvwqd5rdtuaw25mcqhz794dvgq9k9yeh8mjcdh","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"41MMUtBCZjFZa2n3LOW/pgjvVH+nbQANWE91PugnPMQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"6","delegator_shares":"5.263133489664142891","description":{"moniker":"ys-validator","identity":"3122925C291E2E74","website":"","security_contact":"","details":""},"unbonding_height":"10681","unbonding_time":"2020-01-02T13:18:02.112815658Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-12-14T12:40:47.703099391Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1yw5s259jkcg0jzmh7sce29uk0lqqw2ump7578p","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Dsa37AnpBF50qRG80KWD3eHlbtH+4G6hsMzImFhTJSE="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"836983985865","delegator_shares":"836983985865.000000000000000000","description":{"moniker":"CEX.IO Validator","identity":"7F241A9D722CAC46","website":"https://cex.io","security_contact":"validator@cex.io","details":"CEX.IO is an entire ecosystem of products and services that allow customers to engage with the decentralized economy from various aspects."},"unbonding_height":"20596754","unbonding_time":"2024-06-16T15:39:32.329319928Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2022-05-20T10:59:29.556987004Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["234123","629455","634255","637929","641872","646127","711474"],"validator_bond_shares":"10014907.000000000000000000","liquid_shares":"245365884.000000000000000000"},{"operator_address":"cosmosvaloper1y0us8xvsvfvqkk9c6nt5cfyu5au5tww2ztve7q","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"BewhITg/tAUf0yKYX4HbkHM+CsL8JwWPaPWG4Y0vCkE="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"3381890987985","delegator_shares":"3381890987985.000000000000000000","description":{"moniker":"Swiss Staking","identity":"165F85FC0194320D","website":"https://swiss-staking.ch","security_contact":"","details":"Never jailed. Perfect uptime. Airdrop eligibility. IBC relayer. Community contributor. Backing app-chains. High security approach."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"3135000000.000000000000000000","liquid_shares":"8409066695.000000000000000000"},{"operator_address":"cosmosvaloper1y3aaqvxn6hyqh05ektsy0zrymvne3qcq6mffu0","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"qQG5KLu8cthLzRRDtSuKxNssZ+vMSB+lrjlI+nze5BY="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"9455468","delegator_shares":"9455468.000000000000000000","description":{"moniker":"\t EcoStake.net 🌳 We donate 1/3 of all revenue.","identity":"","website":"https://ecostake.net","security_contact":"","details":"We donate 1/3 of all revenue (commission and rewards) to causes that benefit life on Earth."},"unbonding_height":"10096360","unbonding_time":"2022-05-04T00:06:42.963796590Z","commission":{"commission_rates":{"rate":"0.060000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.060000000000000000"},"update_time":"2022-04-11T20:30:33.871142898Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1yh089p0cre4nhpdqw35uzde5amg3qzexkeggdn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"1FK61DPUP98venFsFPmX4JqLmDMcw2tBmOY2eyoCy0g="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"773969826236","delegator_shares":"774047182160.501214369285312809","description":{"moniker":"HighStakes.ch | Daily Airdrops","identity":"2CB281A714F6133B","website":"https://highstakes.ch/earn-ibex","security_contact":"contact@highstakes.ch","details":"Increase your staking rewards and earn daily extra $ATOM with our IBEX program."},"unbonding_height":"17580085","unbonding_time":"2023-11-16T04:02:33.623159256Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["1231","161272"],"validator_bond_shares":"500550025.024319487079693455","liquid_shares":"9983388658.442195907401799838"},{"operator_address":"cosmosvaloper1yett23jzwxpykht9ayf7u7qglvrd76ewz2f9l3","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"FlIkxQpj/Hp5eQwnUw7hD+Xo1Kz19xh6dFXPFIU1f9U="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"9000000","delegator_shares":"9000000.000000000000000000","description":{"moniker":"reverrb_labs","identity":"","website":"reverrb.io","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-01-20T01:05:16.978921973Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1yedl70266zcpmcnzzhr0fmm3aklgrjsyzg0rwl","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"fxxd/E0OJGHv9SiHlBqTXoQrBG5kBQLakPtl6+TmSQA="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"310003","delegator_shares":"310003.000000000000000000","description":{"moniker":"MYW","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2019-05-16T05:41:34.027865583Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1yat0v9mqt88m2x3uew0zrpzn7tjzas6eplz6s2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"0ycEz0Tel9MZWSFemQYFdYe9xdvfpsBV9ZANgvBHp2s="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"614784153","delegator_shares":"614784153.000000000000000000","description":{"moniker":"LikeCoin by Liker Land","identity":"DA413860B22A8E07","website":"https://like.co","security_contact":"","details":"Commission would be used for growing LikeCoin ecosystem and infrastructure. LikeCoin is a Decentralized Publishing Infrastructure to empower content ownership, authenticity, and provenance."},"unbonding_height":"10107432","unbonding_time":"2022-05-04T22:07:38.044109340Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper19p9qjaeq7uae6gf4cwyycm0hkteur9gyg3ln8z","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QYTzxvUB7hiBM0AICi8ldyhfFTlN4NxKEo23FYzydT4="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"14900","delegator_shares":"14900.000000000000000000","description":{"moniker":"🐱blcbeta","identity":"21E9D583F98A7D85","website":"https://atompool.biglazycat.com","security_contact":"","details":"Big Lazy Cat Pool! gogogo!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-06-15T14:44:10.268551795Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper19r0zw4gwdge78glmdnvcqqqsx5wpqzer4t2ddj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"SfZoktvOI0fNxxM+Bj0Vvn2PXhgI5sKla1MrHgRnrEQ="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"Stake.tips","identity":"","website":"https://stake.tips","security_contact":"hello@stake.tips","details":"Stake.tips is committed to supporting unique projects and talented authors. By choosing our platform, you can earn rewards as well as help these projects and individuals succeed and achieve their goals. Find out more: Stake.tips"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-02-19T16:16:37.652420299Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper19rmlxkqjt950fxl849l49x0me56u9tkd5n5j62","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"M0/pO5jEivlHsnabLvdXK9fimRbNBukObEllPKWUErc="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"139652670","delegator_shares":"139652670.000000000000000000","description":{"moniker":"Post Road","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"16490690","unbonding_time":"2023-08-30T02:15:17.620740247Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2022-02-24T22:01:02.322143287Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["110965"],"validator_bond_shares":"1000.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper19yy989ka5usws6gsd8vl94y7l6ssgdwsrnscjc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"SpROiLOBv3fWINvXvgXHDMLMjVM/9x24WpC3AH/aTbY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1215730902627","delegator_shares":"1215730902627.000000000000000000","description":{"moniker":"OKXEarn","identity":"FBBCF611AE6F6B77","website":"https://www.okx.com","security_contact":"","details":"OKX Earn serves as a one-stop shop for all the decentralised earning options available on the OKX platform and we are the leading staking service provider for blockchain projects."},"unbonding_height":"17652493","unbonding_time":"2023-11-21T08:54:09.753128473Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["51102","98194","165810"],"validator_bond_shares":"7009898.000000000000000000","liquid_shares":"245309337.000000000000000000"},{"operator_address":"cosmosvaloper19yn9qg7gffzdj8t2zxfhwqdcjj8fzxt2ztzgzu","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"nJ/BOEE+WQNK9m4Yk0JFPl1MJL7bdXBdP//aMiX2/1M="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"5020000","delegator_shares":"5020000.000000000000000000","description":{"moniker":"tester","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2019-05-16T01:27:12.675457269Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1998928nfs697ep5d825y5jah0nq9zrtd00yyj7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/nG3jGkY3sSj+lVh6HCmY2JMQ7lc2545WPcg9h2JImA="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"201419478","delegator_shares":"201661329.472576424524380424","description":{"moniker":"HLT","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"9424681","unbonding_time":"2022-03-07T11:39:36.238754065Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-06-17T11:29:36.731435956Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper199mlc7fr6ll5t54w7tts7f4s0cvnqgc59nmuxf","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"7IAdsrLz+vP28D/JJZwWUdKe+8KWUN8TskXxch+8p6g="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1452687216824","delegator_shares":"1452687216824.000000000000000000","description":{"moniker":"ShapeShift DAO","identity":"47434737FEC2418A","website":"https://www.shapeshift.com","security_contact":"","details":""},"unbonding_height":"7903952","unbonding_time":"2021-10-26T21:32:20.418267314Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-30T20:41:10.689796224Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"526000000.000000000000000000","liquid_shares":"102708801974.000000000000000000"},{"operator_address":"cosmosvaloper19ggkjc5slg5gphf92yrvusr3jc702h4tfz6nvn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"VzM/GTDtcewHrWCc/K5U0KiHcGT6WklHzJ/0jenhyX8="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"60102","delegator_shares":"60102.000000000000000000","description":{"moniker":"IZ*ONE","identity":"14F528CE8D8313CF","website":"https://gall.dcinside.com/mgallery/board/lists?id=mnet_k\u0026exception_mode=recommend","security_contact":"","details":"Eyes On Me! 하나가 되는 순간 모두가 주목해! 안녕하세요. IZ*ONE 입니다."},"unbonding_height":"0","unbonding_time":"2019-05-31T06:53:03.256911664Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.070000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper19f0w9svr905fhefusyx4z8sf83j6et0g9l5yhl","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"GVMm63xk7LbRmtdcQ8g02lcsEVNyN1iT1xyVQKRM3Pk="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"972849626563","delegator_shares":"972849626563.000000000000000000","description":{"moniker":"NodeStake","identity":"94EFE192B2C52424","website":"https://nodestake.org","security_contact":"info@nodestake.org","details":"NodeStake is the professional validator, infrastructure provider and IBC relayer. ⚛️7*24h Services | https://twitter.com/Nodestake_top"},"unbonding_height":"10106499","unbonding_time":"2022-05-04T20:17:05.525596162Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1000011000.000000000000000000","liquid_shares":"118588257445.000000000000000000"},{"operator_address":"cosmosvaloper19tfkpy26wpdanzjqwag8yyxsygsxgwzsqxmnuw","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"zd9XhpjAxSwpW6u2TqK4WoSRv8L5flbJgDSlrQWO/Eo="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999910","delegator_shares":"1000000.743187448389760529","description":{"moniker":"ms-stage","identity":"","website":"https://www","security_contact":"","details":"To infinity and beyond!"},"unbonding_height":"5241671","unbonding_time":"2021-03-14T22:23:37.591174424Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper19v9ej55ataqrfl39v83pf4e0dm69u89rngf928","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"7FRkEOSkNFlppJy2OI/hZRrI0dcSlk7lrlyyDFt0Qis="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"475008","delegator_shares":"500005.956625917197747696","description":{"moniker":"blockscape","identity":"C46C8329BB5F48D8","website":"https://blockscape.network/","security_contact":"","details":"By delegating, you confirm that you are aware of the risk of slashing and that M-Way Solutions GmbH is not liable for any potential damages to your investment."},"unbonding_height":"1955892","unbonding_time":"2020-06-10T12:17:27.514773360Z","commission":{"commission_rates":{"rate":"0.099900000000000000","max_rate":"0.399900000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-12-02T09:18:02.304119479Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper19wrdj9k875s49p6zpxcf627tjsw4p5tzrq78la","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Qrj9UBUqpKDyErNv81nWroa0vEuhLA5YfEh7ZdkO23g="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"AuraStake","identity":"CE3F404E9DD30A4A","website":"https://www.aurastake.com","security_contact":"","details":"Making DeFi accessible. Telegram: t.me/aurastake Twitter: @aurastake"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-26T14:19:09.440318943Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper190r3wrl2jexq9hyahl4pd5wz66rrt4wpuavdxa","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"GchxVqjFd3WQ/OgjWQajYY7iSisbFbQ5cI4EtF/Z1AU="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"100000","delegator_shares":"100000.000000000000000000","description":{"moniker":"test","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-09T21:38:17.158163046Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper193qmr3zvz0s6g4ngez5euja7ynwrwx8amer9qt","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"JDBXf7sfkJkgho1LI1iSilpOtMDgHnIfdLDOWLzPs8g="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1","delegator_shares":"1.000000000000000000","description":{"moniker":"Dude's Node Abides","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-05-20T19:37:14.162795368Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.020000000000000000"},"update_time":"2019-04-24T22:43:23.068757098Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper19j2hd230c3hw6ds843yu8akc0xgvdvyuz9v02v","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"KjPuAGkJQWb0ImqKuS3DAFat7LvIVmiWhEGRur1twck="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"170498368106","delegator_shares":"170498368106.000000000000000000","description":{"moniker":"vido.info","identity":"37EB1935C333B4BD","website":"https://www.vido.info/validators","security_contact":"","details":"professional infrastructure provider for web3"},"unbonding_height":"13029402","unbonding_time":"2022-12-19T15:25:52.773130934Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-09-13T13:31:13.639677115Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"700000000.000000000000000000","liquid_shares":"3036154913.000000000000000000"},{"operator_address":"cosmosvaloper19kwwdw0j64xhrmgkz49l0lmu5uyujjayxakwsn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"1o6K5D3m5LNGg7R5gSp/37/hcy6y32FxaC3v09Cikbc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"302880212","delegator_shares":"302880212.000000000000000000","description":{"moniker":"Firmamint","identity":"2FE4BC7A59E09FD0","website":"https://www.firmamint.io/","security_contact":"","details":"The FUTURE is at STAKE - Proudly Canadian - Tier 1 WINNER of Game of Stakes Adversarial Testnet"},"unbonding_height":"4202559","unbonding_time":"2020-12-16T15:00:29.976673691Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.030000000000000000"},"update_time":"2019-03-18T22:02:43.333950761Z"},"min_self_delegation":"1500000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper19cjcgjxmqffrekeh2cfzw34v2rkqlt0tq7ragz","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"uEHqK0nAhafMH9x+05KY0kmgVieI4WV/qd9UcQip0ew="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1100000","delegator_shares":"1100000.000000000000000000","description":{"moniker":"bithome-03","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-11-24T06:20:04.393182437Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper19ecn7ljwp6el2pc5lldyauwv05ufwut9mm38r5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XN2+6Dh/5bCBWyk2ytv0ecSX+Hi9jdNxAYG70xHuqqw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"534267618915","delegator_shares":"534267618915.000000000000000000","description":{"moniker":"WhisperNode 🤐","identity":"C99B3A6836BF0CB8","website":"https://REStake.WhisperNode.com/cosmoshub","security_contact":"security@whispernode.com","details":"WhisperNode operates robust, high up-time validators across the Cosmos ecosystem. Auto-compound your rewards with our REStake app. Join our Discord: https://discord.gg/4E5KZsRtjE / tweet @ https://twitter.com/WhisperNode 🐦"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2023-04-10T17:35:08.111789330Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"2011000000.000000000000000000","liquid_shares":"11764293958.000000000000000000"},{"operator_address":"cosmosvaloper196ax4vc0lwpxndu9dyhvca7jhxp70rmcvrj90c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"hUDXospsiB6oJVvkRVB2IyanCHs5hiaeqoEWzp9be8w="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"16928549878431","delegator_shares":"16928549878431.000000000000000000","description":{"moniker":"SG-1","identity":"48608633F99D1B60","website":"https://sg-1.online","security_contact":"","details":"SG-1 - Your favorite team on Cosmos."},"unbonding_height":"20142285","unbonding_time":"2024-05-15T18:21:32.025216431Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.020000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000","unbonding_on_hold_ref_count":"0","unbonding_ids":["645722"],"validator_bond_shares":"10800000000.000000000000000000","liquid_shares":"1064040698.000000000000000000"},{"operator_address":"cosmosvaloper19lss6zgdh5vvcpjhfftdghrpsw7a4434elpwpu","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"BOIkjkFruMpfOFC9oNPhiJGfmY2pHF/gwHdLDLnrnS0="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"3608633484","delegator_shares":"3608633484.000000000000000000","description":{"moniker":"Paradigm","identity":"","website":"www.paradigm.xyz","security_contact":"","details":""},"unbonding_height":"16260403","unbonding_time":"2023-08-13T17:30:10.079619034Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2021-03-04T19:40:11.702559592Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["98234","99313"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"DdZjDxgmWzB6cqk1OjRjiKJ7dAGUt18xeh4Qorh930s="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"195312402881","delegator_shares":"195312402881.000000000000000000","description":{"moniker":"🐹 Quokka Stake","identity":"14BFE711AAB70C77","website":"https://quokkastake.io","security_contact":"quokkastake@gmail.com","details":"100% slashing refund | 24/7 monitoring. Stake with us! Subscribe for news: https://t.me/quokkastake"},"unbonding_height":"18037515","unbonding_time":"2023-12-18T18:12:38.688999277Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-01-03T12:29:29.048914658Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["36045","45875","52499","56201","59636","202054"],"validator_bond_shares":"511288597.000000000000000000","liquid_shares":"11177592167.000000000000000000"},{"operator_address":"cosmosvaloper1xqtqptyvjksqx8pvvm6r0uamuddxvrkh4ge2gf","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"iyRF2A2tgg5PQgiI0S5b+CbZAkT778pJ3akbvDmhOaI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2459501","delegator_shares":"2588948.253937857982404432","description":{"moniker":"Tombstoned","identity":"Tombstoned","website":"https://example.com","security_contact":"","details":"Do not delegate."},"unbonding_height":"16172866","unbonding_time":"2023-08-07T11:48:28.996650758Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.300000000000000000"},"update_time":"2023-06-30T19:26:58.376946142Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["95440"],"validator_bond_shares":"526315.755500375479091986","liquid_shares":"10000.215937856190686349"},{"operator_address":"cosmosvaloper1xym2qygmr9vanpa0m7ndk3n0qxgey3ffzcyd5c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"pliS5qC9jE3r5n8GrbuCpl5eKZ7lKkFF2E9mBzL2x4Y="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"200238309547","delegator_shares":"200238309547.000000000000000000","description":{"moniker":"🐡grant.fish","identity":"BE328F9A089F50C9","website":"http://grant.fish","security_contact":"","details":"Providing grants to projects contributing to the Cosmos ecosystem."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2019-12-11T17:14:13.747872899Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"400000000.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1xxjvzwjpsf6ktuffkcpx29ut9qfrn0my8xdtqd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"VsypevL9BAMTUP82Vn/BBOdau+Lsd3wCElVPpyzdn8Y="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"560","delegator_shares":"280.028002772274455440","description":{"moniker":"pa_os_test","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"209275","unbonding_time":"2020-01-18T15:29:57.007563234Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-06-29T02:31:04.696744602Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1x8rr4hcf54nz6hfckyy2n05sxss54h8wz9puzg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"OYNqTv4/9oQ+DwAaS9TLw7WjZ2s/ZygPVxs/fvAKoq0="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"272113846379","delegator_shares":"272141060191.944480062055419838","description":{"moniker":"cosmosgbt","identity":"","website":"https://bitstack.com","security_contact":"","details":"BitStack makes professional staking."},"unbonding_height":"18286219","unbonding_time":"2024-01-05T04:22:58.500535698Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-04-19T03:20:11.239471255Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["231976","238525"],"validator_bond_shares":"10015135.504725862937902641","liquid_shares":"60961.305482072604316195"},{"operator_address":"cosmosvaloper1x88j7vp2xnw3zec8ur3g4waxycyz7m0mahdv3p","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"vvSJSs7OAESNGSF1CnA+aOcAz/VcRtH4qB2/ZBUp0Lo="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"599630097631","delegator_shares":"599630097631.000000000000000000","description":{"moniker":"Staking Facilities","identity":"6B0DF6793DE1FB1F","website":"stakingfacilities.com","security_contact":"","details":"Earn rewards with one of the most experienced and secure validators. More than 150k USD in customer rewards paid out. We exclude liability for any financial damage resulting from delegating."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-23T22:11:43.172644866Z"},"min_self_delegation":"100000000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"6000000.000000000000000000","liquid_shares":"255354930.000000000000000000"},{"operator_address":"cosmosvaloper1x8efhljzvs52u5xa6m7crcwes7v9u0nlwdgw30","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"68r8DAukUPMCZMD36AjOsf6qRTFj+V25uaE1EAFRAAI="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"5230857335973","delegator_shares":"5230857335973.000000000000000000","description":{"moniker":"Upbit Staking","identity":"58BF2A0CBC9230B9","website":"https://upbit.com","security_contact":"staking@upbit.com","details":"The Most Trusted Digital-Asset Exchange"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-07-07T09:58:20.833843390Z"},"min_self_delegation":"100","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1xfx3pgwyq60jr4xp4z3l3h7xvxh40z4zu6xh9h","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"JA4/VYklSa+qv6e1cK870ZDGliyGtdD4uyaVMC7eSxI="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"2390000","delegator_shares":"2390000.000000000000000000","description":{"moniker":"dummy","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.075000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-01-27T14:03:27.806089998Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1xwazl8ftks4gn00y5x3c47auquc62ssuqlj02r","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"BwSYh4IhEy0kwQyqW0Nj35ACuAsuwdW9lXHkFiPJI9Q="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"287821363885","delegator_shares":"287821363885.000000000000000000","description":{"moniker":"jabbey","identity":"FA260EE7A0113432","website":"https://jabbey.io","security_contact":"","details":"just another dad in the cosmos"},"unbonding_height":"9960530","unbonding_time":"2022-04-22T16:51:58.573200105Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-07-06T17:10:56.216365385Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1036420000.000000000000000000","liquid_shares":"189586491199.000000000000000000"},{"operator_address":"cosmosvaloper1x065cjlgejk2p2la0029akfvdy52gtq9mm58ta","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"mShbMVn6LnKsBQDrKWVTfslUEZdV/zI0X5LXSqu0D90="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"22167892665","delegator_shares":"22174544238.570853007198036055","description":{"moniker":"MathWallet麦子钱包","identity":"58320327FF6C928C","website":"https://mathwallet.org","security_contact":"","details":"Math Wallet is a powerful and secure universal crypto wallet that enables storage of all BTC, ETH/ERC20, NEO/NEP5, EOS/ENU/Telos, TRON, ONT, BinanceChain, Cosmos/IRISnet tokens, supports cross-chain token exchange and a multi-chain dApp store."},"unbonding_height":"19659102","unbonding_time":"2024-04-11T22:42:00.004004656Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-09-09T03:44:27.230973438Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["77317","79231","81623","99844","101876","102566","103299","109949","118231","342863","537704","559996"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10002.000281099324103163"},{"operator_address":"cosmosvaloper1xsgse9yump2j35nfut2tkwh7mdtca5llcgr79d","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"YtjzJJrPwO/Rn/Q0NsyV6voKPfzqbpr0Bd7igApKqG4="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"119021854389","delegator_shares":"119021854389.000000000000000000","description":{"moniker":"cosmos Af","identity":"","website":"","security_contact":"wealth01@protonmail.com","details":"we are validating Africa, please support our effort as we take the cosmos message throughout the continent and beyond"},"unbonding_height":"18038978","unbonding_time":"2023-12-18T20:39:52.759867435Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-09-28T18:40:16.272666390Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":["202306"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1xsum5hdkcckumzx8ajf3j8upr8w0vs8gcvw0dc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"I6UaOfnfzO663kOXdUfiN9VgU6qIwTbXXmgvOm8dE8Q="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"3199700","delegator_shares":"3200000.000000000000000000","description":{"moniker":"PeopleNode","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"33591","unbonding_time":"2020-01-04T09:43:03.125606707Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-26T11:18:53.685620284Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1x3mkgqpshvpq87d33ndsleu7gd7w47dl4ve0yy","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"aXA4JRGbIKAMgRvaw3pP+4KLZsqHbJz6yadx2gv92UA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"202551860064","delegator_shares":"202551860064.000000000000000000","description":{"moniker":"CrowdControl","identity":"F2E67996F3D5EB16","website":"https://crowdcontrol.network/","security_contact":"","details":"By delegating, you confirm that you are aware of the risk of slashing and that CrowdControl is not liable for anz potential damages to your investment."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"26990985003.000000000000000000","liquid_shares":"296330795.000000000000000000"},{"operator_address":"cosmosvaloper1xnrth5rku3z3msm9prxe3l0p2yec3d9mzxz9ka","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/H0JYXKDHfR70GKtzCMrF7iRZT+ddQJAh767jmDzEPY="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"699284283","delegator_shares":"699284283.000000000000000000","description":{"moniker":"coinhall.org 📈🔄","identity":"0B5217ACAE18F4C9","website":"coinhall.org","security_contact":"gm@coinhall.org","details":"Coinhall is a community first platform providing real time price charts \u0026 analytics, and aggregating DEXes across the Cosmos ecosystem."},"unbonding_height":"18037476","unbonding_time":"2023-12-18T18:08:41.626250782Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-03T09:43:38.454484559Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["1253","17531","202046"],"validator_bond_shares":"4600000.000000000000000000","liquid_shares":"70955.000000000000000000"},{"operator_address":"cosmosvaloper1xhhquwctvwm40qn3nmmqq067pc2gw22eqkwgt0","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"8tNA2RZAaOQXXfvg5gFh/xkvfpZKVmJ31ucuawNHXGM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"167004565","delegator_shares":"167004565.000000000000000000","description":{"moniker":"stake2earn","identity":"D153AB5E9F506C47","website":"https://stake2earn.com","security_contact":"","details":"stake2earn - blockhain validator in POS networks. Stake to earn crypto!"},"unbonding_height":"10137119","unbonding_time":"2022-05-07T08:59:23.793038981Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1xm5er75n3ctd5kxs5lt8ac9gzlmjmenk0a3jn3","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"CK9szdxiGnd56BbjHIEBITWxABG2jl26NEkVXw4iKUU="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"seattle-validator.xyz","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.300000000000000000","max_rate":"0.350000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-09-05T02:30:42.653071334Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1xl0cv0gnngl3jk3s6jt35tpglspzry6d8zpxmr","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"NjAH9YI1mPjRa54btPaqdkIsctbbD8skgPFswyvjUgM="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"2010000","delegator_shares":"2010000.000000000000000000","description":{"moniker":"ARIGATO.xyz","identity":"F7808090F6FD6A79","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.600000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2023-09-11T10:05:58.540965836Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper18ruzecmqj9pv8ac0gvkgryuc7u004te9rh7w5s","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"13QaXby84V+Ueu3Y8NpasgALcRXzl29k2A9K/3FRQHM="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"9012329153522","delegator_shares":"9013230368478.189124287933345522","description":{"moniker":"Binance Node","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"17501885","unbonding_time":"2023-11-10T13:46:53.224577372Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"500000","unbonding_on_hold_ref_count":"0","unbonding_ids":["156035"],"validator_bond_shares":"10016269.508945301396591536","liquid_shares":"261841702.306256040878021227"},{"operator_address":"cosmosvaloper188z55862zckmn7kuwg94sl3nw9ta9pqt3xectq","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"oEaKhgiS39njylLQKvQD7rdG2dC0/EJZtv3q++kxoS0="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"9977226","delegator_shares":"9979218.857164943899343754","description":{"moniker":"OG","identity":"68DD0E3DDA48BF2A","website":"http://www.ourea.top","security_contact":"","details":"Decentralized business organization with community"},"unbonding_height":"5763398","unbonding_time":"2021-04-27T10:52:57.899795838Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2020-05-21T02:40:02.127059068Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper188l6kl0k9dujfd9y3la6w5ykvxzechd8a06z55","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Ao1MX/qKS3F/SqdzM6nlVzwkKFmGVzVRvg7jCqeuhh8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1014900","delegator_shares":"1014900.000000000000000000","description":{"moniker":"Inter Blockchain Services","identity":"27FD74457A21B020","website":"https://ibs.team","security_contact":"contact@ibs.team","details":"Inter Blockchain Services Dpos validator and Relayer of COSMOS ecosystem 🤗 #IBCGANG"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper18sqvyf4ss84qree7gndph5chmm82fglsqfylwn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"247X8BFWuLJHBxLi9nQFs9B9vG3u6Mak4bRn88USyI0="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1665421865804","delegator_shares":"1665421865804.000000000000000000","description":{"moniker":"PRO Delegators","identity":"44771D06A00DD695","website":"","security_contact":"contact@pro-delegators.com","details":"Cosmos validator on enterprise-grade bare-metal servers, monitored 24/7 | consumer chain inquiry: contact@pro-delegators.com"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-03-06T15:23:13.589935007Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"6500000000.000000000000000000","liquid_shares":"12016669562.000000000000000000"},{"operator_address":"cosmosvaloper18s3k8dt73e28rraqk70u9xwtv9wlav83n5mqjx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/KLuKq5b6EFtJDRrUcXqsz3xVQN25e9AWSEC1QWd8O0="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"214148982668","delegator_shares":"214148982668.000000000000000000","description":{"moniker":"Colossus","identity":"32A5F1629806ED70","website":"https://colossus.digital","security_contact":"","details":"We are validators!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2023-05-02T18:50:06.740236862Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"567591427.000000000000000000","liquid_shares":"245575430.000000000000000000"},{"operator_address":"cosmosvaloper18n80khkgu2z093cqtdatnx3gn0f7fjuvl2s72d","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"oQJctIkj8OsiWtZs2aFCgGx44SLn0/l58+n71mgtIbE="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"381620000","delegator_shares":"381620000.000000000000000000","description":{"moniker":"DOUBLETOP","identity":"48E37DA1F442F1F0","website":"","security_contact":"validator@doubletop.tech","details":" Your trusted security non-custodial validator. DOUBLETOP is Ukrainian crypto-oriented holding. "},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2023-08-01T13:08:57.488418957Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper18kz84x6fv7ep7xvme8x2e4254t404efvhjqst8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"cFCnhwvLULx9+f3mB1638RVd2fLr4H6iVfx7GcCUOMI="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"82349652","delegator_shares":"82349652.000000000000000000","description":{"moniker":"inactive validator Do NOT delegate","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"12745262","unbonding_time":"2022-11-27T23:49:36.272120993Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.200000000000000000"},"update_time":"2022-05-16T01:47:10.221314262Z"},"min_self_delegation":"100000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper18kannwa9p5kgxj8xtf9yl9ys5hvt3wptlj87nc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"3rehTYWVvI/HJhCqApfCOwlDAeWxaAiKh+Om95wqv4s="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"SenseiNode","identity":"4FDF5E4606033192","website":"https://senseinode.com","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper18cphtqx7c6kmjuwvtfvge0dtf8nxm8j9x6p4kz","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"scqezUStgYsd51ZEeqbDJZ6tcSI0M6hsD9l5VJ4twzg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"501","delegator_shares":"500.050005000500050006","description":{"moniker":"touzicosmos","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"219276","unbonding_time":"2020-01-19T11:09:12.053419535Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-12-12T16:32:59.816165917Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper18er5376et00utmnqzjhgkl5v9chq68s42twyke","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XitH1DZtr/rOcZZrvsdOCl724G2wQFya2tl9x0W79d4="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"Restake","identity":"98EC2DBC23F1B764","website":"https://restake.net","security_contact":"","details":"Restake offers a transparent non-custodial staking experience, trustable by design."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.500000000000000000"},"update_time":"2023-02-01T15:59:00.485214857Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper18extdhzzl5c8tr6453e5hzaj3exrdlea90fj3y","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/3KWOdnPhCcHvQydh3z4Dg8cUDhzeKCugIv+FNQ9ASw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"347384546718","delegator_shares":"347384546718.000000000000000000","description":{"moniker":"Smart Stake 📈📊","identity":"DD06F013A474ACA3","website":"https://smartstake.io","security_contact":"info@smartstake.io","details":"Your hub for validator, network, and decentralization analytics. Bare metal servers with automated monitoring \u0026 alerting for high uptime. Auto compound @ restake.app. IBC relayer. Commission fixed @ 5%. Questions? Want new analytics features? Connect @ t.me/SmartStake"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-03-24T02:31:39.501768779Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1808482923.000000000000000000","liquid_shares":"9007615573.000000000000000000"},{"operator_address":"cosmosvaloper18624s66va2yh3fhf3tamnexdy69m460zzcdchd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+2VtxNvYa+HDsKhVX+Cp0OsSdS/UBUcLm0AZWQj0TXs="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"152679213","delegator_shares":"152679213.000000000000000000","description":{"moniker":"LOA Labs","identity":"ACB2261DAB6606BA","website":"https://loalabs.io","security_contact":"dev@loalabs.io","details":"Laboratory for Better World Blockchains - Accelerating public goods \u0026 positive social impact in web3 communities 💜🌎"},"unbonding_height":"18038960","unbonding_time":"2023-12-18T20:38:04.749832967Z","commission":{"commission_rates":{"rate":"0.055000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2023-03-29T21:09:30.310923340Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["202304"],"validator_bond_shares":"6733040.000000000000000000","liquid_shares":"16093.000000000000000000"},{"operator_address":"cosmosvaloper18algml7fg04amyhz0ss5h9m92k5g3ldwvd4fk3","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5eXlS/ArO1C2njKvaKpwcoFdJx9ScRrk67ej4MuWtRA="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"BlockPool","identity":"","website":"www.blockpool.com","security_contact":"","details":"Power the staking economy!"},"unbonding_height":"229277","unbonding_time":"2020-01-20T06:38:34.310142614Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-06-19T12:47:11.714522175Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper18al7yt9q5a7n7aqje9dat36efyxssyahmx2gzs","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"lg5XnIspoSR2uWJuDya/bt2rKrdAH8xOlcKatPF+ZIY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"162524300182","delegator_shares":"162540554125.823048330345869740","description":{"moniker":"Alessandro Mazza","identity":"65CC7CB0CC69040D","website":"alessandromazza.com","security_contact":"","details":"Web3 developer and content creator."},"unbonding_height":"20648896","unbonding_time":"2024-06-20T07:57:15.805699068Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-10-30T17:42:24.369229378Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":["718484"],"validator_bond_shares":"134000000.000000000000000000","liquid_shares":"245330465.842582392682794189"},{"operator_address":"cosmosvaloper187kxrmex8ltkjgfapk04ctlwsywnxem4649xgv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Q/IXUlhelvvCTMpT1jGhVMLXKdme8sIfnnX7pOZTYOI="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"636147","delegator_shares":"636147.000000000000000000","description":{"moniker":" 🅒🅐🅡🅑🅞🅝ⓩⓔⓡⓞ🌲","identity":"9E3466C0CB62F484","website":"https://restake.carbonZERO.zone/cosmoshub","security_contact":"security@carbonZERO.zone","details":"♻️ Eco-friendly CosmosHub staking. We plant 🌲🌲 \u0026 reduce co2 emissions through donations from comms earned via validating. Try our REStake bot! Find us on Twitter for more info: https://twitter.com/carbonZEROzone"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"100000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper18l2tf0m2wsp28r6q4l8clnlfw664c5vey37pmu","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"fXYfvyGcqWHsTJjmpqqJLWoFCDVBrEqVGNkblI+mu2k="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"15000001","delegator_shares":"15000001.000000000000000000","description":{"moniker":"Matrixed.Link","identity":"E903E2F1EA108F5D","website":"https://matrixedlink.io","security_contact":"validator@matrixed.link","details":"Your trusted blockchain infrastructure provider."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-26T17:19:34.686101149Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1gp957czryfgyvxwn3tfnyy2f0t9g2p4pqeemx8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"wYgizm1MoU4+QMPV0lPlESo/Z5YzDbfna562kOUNU4s="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1318434312152","delegator_shares":"1318434312152.000000000000000000","description":{"moniker":" polkachu.com","identity":"0A6AF02D1557E5B4","website":"https://polkachu.com","security_contact":"hello@polkachu.com","details":"Polkachu is the trusted staking service provider for blockchain projects. 100% refund for downtime slash. Contact us at hello@polkachu.com"},"unbonding_height":"10167544","unbonding_time":"2022-05-09T20:23:13.977114978Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"4081147901.000000000000000000","liquid_shares":"137326564339.000000000000000000"},{"operator_address":"cosmosvaloper1gpx52r9h3zeul45amvcy2pysgvcwddxrgx6cnv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"N7D/fL/Hgpz1UG5J/wLgo5GXvQM11/lJyCg1BjAqUjY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1808816349176","delegator_shares":"1808816349176.000000000000000000","description":{"moniker":"StakeLab.zone","identity":"F12B081334CBE0C6","website":"https://www.stakelab.zone","security_contact":"securite@stakelab.fr","details":"Grow your assets - Staking \u0026 Relaying Hub for Cosmos ecosystem"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"3001055000.000000000000000000","liquid_shares":"130313127147.000000000000000000"},{"operator_address":"cosmosvaloper1grgelyng2v6v3t8z87wu3sxgt9m5s03xfytvz7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ahgQzIOmCh5+A9iGXJRh8AKNlk4NCcOiPebzZEuIN3A="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1713467634716","delegator_shares":"1713981776438.634492354203936269","description":{"moniker":"iqlusion","identity":"DCB176E79AE7D51F","website":"iqlusion.io","security_contact":"","details":""},"unbonding_height":"8030710","unbonding_time":"2021-11-06T23:14:48.376817978Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"100000000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"7601780453.301596143766018153","liquid_shares":"247639030.227691433550767653"},{"operator_address":"cosmosvaloper1g948uu7qj6djhn50fwf20q4z763zk7g0xqxc8a","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Z1zEMzqwxLQJ/lTcLSyc8s715SojM178iIRxQB6vrOk="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000","delegator_shares":"1000.000000000000000000","description":{"moniker":"hello it's a me!!","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-11-10T20:09:01.497098488Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1gxgyhqagmvyg8sgwgpa79scrwqp4wn4hw4e3cl","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"PYeM4df2aGAVR6xTQTFq988GEC14isF0/SsPNpjLGW8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"321468618","delegator_shares":"321468618.000000000000000000","description":{"moniker":" AutoStake 🛡️ Slash Protected","identity":"4D3303E20A4D2C32","website":"https://autostake.com","security_contact":"support@autostake.com","details":"Earn extra Rewards on AutoStake.com 🛡️ 100% Refund on ALL forms of slashing backed by a SAFU fund 🛡💸Auto-compound: wallet.autostake.com/cosmoshub 💸 \u0026 twitter.com/AutoStake_ \u0026 telegram.me/AutoStake_com"},"unbonding_height":"10166562","unbonding_time":"2022-05-09T18:27:15.989002424Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1gxju9ky3hwxvqqagrl3dxtl49kjpxq6wlqe6m5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"g2acQR2m9vJoeZMqnol7l+JY+dGo4EiizyB1Owwn3CQ="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"654155526534","delegator_shares":"654155526534.000000000000000000","description":{"moniker":"🇨🇭 Vortex.live 🟢","identity":"CC806AFFDB2EE85A","website":"https://vortex.live","security_contact":"","details":"🇨🇭 Vortex.live, validation and beyond 🪐"},"unbonding_height":"13494894","unbonding_time":"2023-01-22T21:20:11.521070095Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-03-30T21:35:45.603820926Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"39055137.000000000000000000","liquid_shares":"245364733.000000000000000000"},{"operator_address":"cosmosvaloper1gf3dm2mvqhymts6ksrstlyuu2m8pw6dhfp9md2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"IGUdZ439/uCgUwGmqOd5QMUKtpI8taUQnpbdcTJdc/Q="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"824775191583","delegator_shares":"824775191583.000000000000000000","description":{"moniker":"Keplr","identity":"55AE6F8C61BF4749","website":"https://infra.keplr.app","security_contact":"","details":"Keplr Infra handles hundreds of millions of requests every day, providing robust infrastructure for your seamless Interchain experience. We promise to securely protect both your assets and the network. Stake with us and earn rewards!"},"unbonding_height":"12758502","unbonding_time":"2022-11-29T00:29:48.524275321Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.990000000000000000","max_change_rate":"0.500000000000000000"},"update_time":"2022-03-15T05:53:43.421502765Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"2005000000.000000000000000000","liquid_shares":"200245191282.000000000000000000"},{"operator_address":"cosmosvaloper1gf4wlkutql95j7wwsxz490s6fahlvk2s9xpwax","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5RNZbutSqesWjKl0UJ7VsXBWyweVxxcWgy9PzD6qVes="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"290327871523","delegator_shares":"290327871523.000000000000000000","description":{"moniker":"Stakewolle.com |100% Insurance","identity":"6386E8C1B6217AC2","website":"https://stakewolle.com/","security_contact":"","details":"🚀 Professional Cosmos Validator \u0026 Engineer 🔁Auto-compound with REStakeapp 🛡Slash insurance 🎁 All Airdrops for delegators 🔗 https://linktr.ee/stakewolle"},"unbonding_height":"20611237","unbonding_time":"2024-06-17T16:10:44.287571378Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["713872"],"validator_bond_shares":"662000000.000000000000000000","liquid_shares":"91848682534.000000000000000000"},{"operator_address":"cosmosvaloper1gtpvyenddt7uq7nccndn3pz9smurt3xt6pmx8u","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"hNlLJzk0PRpXrKzeDF9kthdi03JxJfUurq96gEsqhb8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"anything","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-11-29T05:06:50.338585322Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1gthj23tp74rcfr4rhjrspvgy4vt4zxfew5jlxe","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"uEstqaC9kHDIzOFNwqpH3fVPaR7/+415nB1YrP76pb0="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"jeco-validator","identity":"","website":"https://jecostaking.com","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-03-28T13:31:47.353398871Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1gdqqf8f6wsdvgnevly7q62ez0tmfn0lm9smxws","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"UZIoCFK8LRv5W48LNVT4+pKEy5YcUXQiaxCtAIeYRIk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1999800","delegator_shares":"2000000.000000000000000000","description":{"moniker":"Militaires Sans Frontières","identity":"79BC77918BFE3864","website":"","security_contact":"","details":""},"unbonding_height":"46548","unbonding_time":"2020-01-05T10:49:02.411979335Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-29T05:33:03.214642679Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1gdg6qqe5a3u483unqlqsnullja23g0xvqkxtk0","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/BgHVZ3E2KAtxt7OsEVfHht+8jAQDZYMYiH4+THC0UI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"417286638","delegator_shares":"417328354.102890157466045397","description":{"moniker":"zugerselfdelegation","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"18873759","unbonding_time":"2024-02-15T13:57:17.778042234Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2020-02-21T16:46:55.500729256Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["118465","131474","354280"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1gw0gnf3wlca97qhxynja5xg68652366vl0vpwt","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"JhTQfuH1TsSRoF+9e1ilTjENi3Gzy/9dE+SxIV9qHBQ="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"60010000","delegator_shares":"60010000.000000000000000000","description":{"moniker":"Cactus","identity":"EACFC5AEE9CE6D1D","website":"walletcactus.com","security_contact":"hello@walletcactus.com","details":"Cactus is a multi-blockchain noncustodial wallet with a vast community around the globe with most of its users in Asia. Cactus gives access to and educate users about blockchain industry risks and opportunities."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"10","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1g0ae8mve3a0u00a8wwhzkmv2yeyg5j4u8an6wq","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"58Ovm11PjRhar539ZB9Vtm/MWa3GiN/Ou9HVRtK8LMU="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"preprodATLval","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-01-12T12:57:22.082103139Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1gjtvly9lel6zskvwtvlg5vhwpu9c9waw7sxzwx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"yUj/VORRHG1dF/T8mYR558yANp265MVhRwcpTl8IWvA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"483344707978","delegator_shares":"483344707978.000000000000000000","description":{"moniker":"EZ Staking","identity":"1534523421A364DB","website":"https://ezstaking.io","security_contact":"contact@ezstaking.io","details":"100% refund on downtime slashing. Enterprise grade infrastructure. High end security and 24/7 monitoring. https://ezstaking.app/cosmoshub."},"unbonding_height":"19541871","unbonding_time":"2024-04-03T10:47:59.872601920Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.030000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["537571"],"validator_bond_shares":"698634852.000000000000000000","liquid_shares":"14327159136.000000000000000000"},{"operator_address":"cosmosvaloper1gn4ugadhkdwse6ayt7q8ekh0d0p2spw7duwlua","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"abiR8vfxg2NYJD3Rjs6q0YQuvCIZKDRIazogNph4dzw="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"24798549","delegator_shares":"24798549.000000000000000000","description":{"moniker":"White Whale","identity":"CE2C5C02D96391AA","website":"https://whitewhale.money","security_contact":"security@whitewhale.money","details":"Interchain Liquidity Protocol"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-02-16T21:59:14.393604774Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1g48qthza73rv7rl3t823sxp0539k47c7k8fjqp","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XtBnvDk/kHKcyaOiIDFFv57j0yjH2k5exHcfFWlcBV4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999903","delegator_shares":"1000000.338119590873328089","description":{"moniker":"good boi node","identity":"8BA783C0DF5CB137","website":"","security_contact":"","details":"delgate 2 me, i wil protec your atums. my ownr is @mappum"},"unbonding_height":"5219795","unbonding_time":"2021-03-13T03:00:04.334703123Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-02-17T17:47:26.385517675Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1g48268mu5vfp4wk7dk89r0wdrakm9p5xk0q50k","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"CM0tuwBVM2UPzc1eKOvvraQdSnIWC3riTabKQc2pvYc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"3562925770516","delegator_shares":"3562925770516.000000000000000000","description":{"moniker":"Provalidator","identity":"3A7D5C9B0B88BEA1","website":"https://provalidator.com","security_contact":"","details":"Supporting Blockchain Infrastructure"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"808452514.000000000000000000","liquid_shares":"12648138070.000000000000000000"},{"operator_address":"cosmosvaloper1gah0q9gqypnr7ufzg0dcda3k6v8qp4ceddn8fs","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XpwOWhL/yHq5VDUYbpP6Vi5Sw+rYOw7uY2vUqPNc+fk="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"666963188250","delegator_shares":"666963188250.000000000000000000","description":{"moniker":"Enigma","identity":"6223697ACA24A4FF","website":"https://enigma-validator.com/","security_contact":"contact@enigma-validator.com","details":"Highly secure professional validator across 35+ chains - offering a full refund for any downtime slashing - Reach out to us at contact@enigma-validator.com"},"unbonding_height":"14778748","unbonding_time":"2023-04-27T18:58:04.389860320Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["19342"],"validator_bond_shares":"560000000.000000000000000000","liquid_shares":"113001921891.000000000000000000"},{"operator_address":"cosmosvaloper1fqzqejwkk898fcslw4z4eeqjzesynvrdfr5hte","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"bW7LvG5NrrcOVfkiFZDQOEiewyOnnGUvExCC8fx5SV8="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"71637024211","delegator_shares":"71637024211.000000000000000000","description":{"moniker":"commercio.network","identity":"ADBDB0178E4441BE","website":"https://commercio.network","security_contact":"","details":"The Documents Blockchain"},"unbonding_height":"20818476","unbonding_time":"2024-07-02T10:48:25.512282805Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-25T10:53:14.835657659Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["572715","588616","590679","592032","595524","598696","599939","605560","606637","609896","612197","612651","614245","628491","630265","634590","637781","638029","645783","646445","646630","651467","656447","660742","711852","713942","718536","718667","719586","721677","730070","732649","735726","738086"],"validator_bond_shares":"605000000.000000000000000000","liquid_shares":"245348471.000000000000000000"},{"operator_address":"cosmosvaloper1fypv7c7z3auv7w48qn76538w55jdk66xt5a3lk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"MXvy78CD7fJlPzCRMV5POPkUKpS12G1swkX5Y6SGBsI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"7361795","delegator_shares":"7361795.000000000000000000","description":{"moniker":"1ED471CB34E3","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"10552654","unbonding_time":"2022-06-09T19:41:10.398819870Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2020-06-15T13:46:38.355306205Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1fghgwhgtxtcshj4a9alp7u2qv6n2wffqhpxcnk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"cLeIVsGGVkt5M/YExv5I67pYj1uYmYcsvY60PIVIxB4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"280161932","delegator_shares":"280161932.000000000000000000","description":{"moniker":"cephalopod equipment coop","identity":"","website":"","security_contact":"","details":"Cephalopod Equipment Coop"},"unbonding_height":"0","unbonding_time":"2019-10-10T13:10:32.529176271Z","commission":{"commission_rates":{"rate":"0.250000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1ffze90x7qy67fzprfh8uaarnclpac0ylqz6urv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Pcu3hK+vgzKrFVfgJ8p7w20O7xf0EnMsGmTgSC45bEw="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"100000","delegator_shares":"100000.000000000000000000","description":{"moniker":"huoyuyan","identity":"6A0D65A89A4CBC8E","website":"https://www.huoyuyan.com","security_contact":"","details":"a awesome rpa~"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1ff0dw8kawsnxkrgj7p65kvw7jxxakyf8n583gx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"486fL5jJ7HOtGXXdkei2Sy1OijidPiiw4b/OhnCzNw4="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"157145924754","delegator_shares":"157161640698.930902701711571406","description":{"moniker":"Compass","identity":"72CB5AAAAFB1CE69","website":"https://compassdao.network","security_contact":"","details":"EasyZone is a decentralized light client, which means users can access account, stake and earn rewords with local key store. For the time being we focus on Tendermint ecosystem, including Cosmos, QOS and Irisnet etc. Winner of the Game of Stakes."},"unbonding_height":"0","unbonding_time":"2019-10-14T04:10:07.163539573Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-05-08T14:23:18.058024399Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"406040603.786905025715831501","liquid_shares":"10261281527.176460423960980250"},{"operator_address":"cosmosvaloper1fwnw7km7sqwyfdr0lq2n0nzpa3f7zd7p6r44k8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"tt1uU6kxYu2vYkPSlVNkzwEAuHqb2Z4k6czJ/U1jo7U="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"2135306","delegator_shares":"2135306.000000000000000000","description":{"moniker":"PumpkinFarms","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"11626885","unbonding_time":"2022-09-02T09:40:06.140727599Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-07-24T21:18:56.292696505Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1f0v0acmunaddacaxdmz5ykh3026c9xvqgnqquy","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ELx7UkU5zqFYY6GA74hdzmfFBvVnppwvKuDsDJYNk5M="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"850000","delegator_shares":"850000.000000000000000000","description":{"moniker":"“cosmix”","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-06-03T05:56:06.207098826Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1fsg635n5vgc7jazz9sx5725wnc3xqgr7awxaag","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"OSa2Cqx+3R0KEZVHjFMXvS3Z4TDXUkHwH3qsMfMRRGc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"270124743257","delegator_shares":"270124743257.000000000000000000","description":{"moniker":"Crosnest","identity":"5F1D6AC7EA588676","website":"http://www.cros-nest.com","security_contact":"chainmaster@cros-nest.com","details":""},"unbonding_height":"8347032","unbonding_time":"2021-12-04T22:55:51.135415702Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"450000000.000000000000000000","liquid_shares":"9419241046.000000000000000000"},{"operator_address":"cosmosvaloper1fs0vl7jem78pmhladkludtkun3cgkrwkt8czur","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"R4LrtuAhUoIqFUOYM3efQcN0myWx9LqV8f8UaYWR0eE="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"671529684120","delegator_shares":"671529684120.000000000000000000","description":{"moniker":"🛡️Bunkerstake.io","identity":"5EE6985B6C310F98","website":"https://www.bunkerstake.io","security_contact":"bunkerstake@pm.me","details":"Secure validator with SNA arquitecture"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-07-31T10:07:12.122818034Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"10014136.000000000000000000","liquid_shares":"245330798.000000000000000000"},{"operator_address":"cosmosvaloper1fhr7e04ct0zslmkzqt9smakg3sxrdve6ulclj2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"FyNWogoOiQFRVwtJj8KywlyJpUFhmPzekSkDvrbSTvM="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"478650002809","delegator_shares":"478650002809.000000000000000000","description":{"moniker":"Stakin","identity":"83D300CB42D06962","website":"http://stakin.com/","security_contact":"","details":"Your Trusted Crypto Rewards"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-08-12T07:30:39.537520285Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"900000000.000000000000000000","liquid_shares":"122233241467.000000000000000000"},{"operator_address":"cosmosvaloper1f63lrmnn4upu722kxdhw04taxa6w50lnar88dx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"AQJie+dfWUVPM0GPmCUqvFnjr6AMogDjiCPHaOc+LA0="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"99990004","delegator_shares":"100000001.019905921184158806","description":{"moniker":"darkqueen","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-05-14T12:05:26.783252606Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1f6ne5ahjrrntmt88eunyatw2jj8w5rn2qmj6p2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/Em5lWVS0EkXAnYD/1edxZoHJmCjQCc38kLgcEiQVuQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"22178571","delegator_shares":"22180771.000000000000000000","description":{"moniker":"''","identity":"","website":"''","security_contact":"","details":"''"},"unbonding_height":"7648627","unbonding_time":"2021-10-04T11:39:38.154057693Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.300000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1fun809ksxh87nzf88yashp9ynjz6xkscrtvzvw","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Ukt5MB8TGQthSbzMWUiwA1+AwwOoxXGk0IAHl6qzZVA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"172696645568","delegator_shares":"172731189476.859079810785054709","description":{"moniker":"Tessellated","identity":"E308F774D80FF40B","website":"https://tessellated.io","security_contact":"team@tessellatedgeometry.com","details":"Tessellated Builds \u0026 Validates on Proof of Stake Networks"},"unbonding_height":"18036627","unbonding_time":"2023-12-18T16:43:18.336935481Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-11-18T01:29:46.564295272Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["201846"],"validator_bond_shares":"485097013.103615348233423595","liquid_shares":"11159770264.990412532727265121"},{"operator_address":"cosmosvaloper1fagujjmqt4fvnsckz34sth0a9daq953lc0j6cg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"kYZGsbKUQubDhIhphAh00VedUppkIBc8AMOFYWXXiO8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"12360937","delegator_shares":"12360937.000000000000000000","description":{"moniker":"-","identity":"","website":"","security_contact":"","details":"-"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-09-24T05:22:12.679195792Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper12r4rsw7s2vnccwealt5zu0kukdxgwamyltmrud","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"J7Ve74DlDh2dpQiyQY92/iUviMdqu5u4TAiFJzTXwWQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"139986000","delegator_shares":"140000000.000000000000000000","description":{"moniker":"Laomedeia","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"6935006","unbonding_time":"2021-08-05T03:35:44.484210159Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-03-16T19:01:13.485433870Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper12xx74t5sx3vgyew7es9h8e9py4ttts6zcg3vxk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"H0f+J1Q0zUbWqLuCF/5yVYwO0PYWK9yjYVyd212Rcyo="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"616041512","delegator_shares":"616041512.000000000000000000","description":{"moniker":"BlueStake 🚀","identity":"2C12B61930DF3586","website":"https://bluestake.net","security_contact":"","details":"100% refund on downtime slashing ✅ Highly secure and reliable infrastructure, distributed across various datacenters and operated by a team of DevOps engineers."},"unbonding_height":"10113272","unbonding_time":"2022-05-05T09:53:51.858572447Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper122j3zmqdl6d2g64qmjuqzj65gfejsvjp07yljn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"xqk6/omhFwP3NNu/Bsxgh4ED4RjDQjD0ig/FMQXJZ7k="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1760427707","delegator_shares":"1760427707.000000000000000000","description":{"moniker":"COS_Validator","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"18591744","unbonding_time":"2024-01-26T16:13:12.531930486Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.050000000000000000","max_change_rate":"0.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["291596"],"validator_bond_shares":"10015237.000000000000000000","liquid_shares":"60089.000000000000000000"},{"operator_address":"cosmosvaloper12w2qkvxp7udd29t2wrz5uhffuuns4ds6c6p2aj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"A8/jzUJnnJSO+rZ0XyJCSKBzjJn8r8hegIeC3XIm2IM="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000","delegator_shares":"1000.000000000000000000","description":{"moniker":"SenseiNodeStake","identity":"","website":"https://www.senseinode.com/","security_contact":"","details":"We drive the decentralization of the blockchain ecosystem in Latin America with a simple, scalable and secure node management platform."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-09-07T15:14:08.338110894Z"},"min_self_delegation":"1000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper12w5u5f0r27j0q0ywv5kwqslnc0yvza57qfezr4","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"OQ0bATiYmu7amqXn4qM9v4wdsGGXrAbfHYYN+wwq774="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10300","delegator_shares":"10300.000000000000000000","description":{"moniker":"test2","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper12w6tynmjzq4l8zdla3v4x0jt8lt4rcz5gk7zg2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5zFLeygxybzLuxq9iMEO0sl9rfkD+2qBifsuY1NTZIU="},"jailed":false,"status":"BOND_STATUS_UNBONDING","tokens":"16942321359","delegator_shares":"16944015690.811288989707787301","description":{"moniker":"Huobi-1","identity":"CF01514DBF6583FE","website":"https://www.huobi.com/","security_contact":"","details":"As a world-leading company in the blockchain industry, Huobi Group was founded in 2013 with a mission to make breakthroughs in core blockchain technology and the integration of blockchain technology to other industries."},"unbonding_height":"20711865","unbonding_time":"2024-06-24T18:06:03.690360791Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-12-09T09:19:28.587528497Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"1","unbonding_ids":["51347","72035","105770","106896","107079","109814","110642","111478","121138","151217","351919","364666","537929","540568","562455","574404","583442","625980","626280","626693","711491","724590"],"validator_bond_shares":"5000500.036514848998398101","liquid_shares":"20007.719633707264746331"},{"operator_address":"cosmosvaloper125umsz3fws7gepn5ccsh0sv4gre9r6a3tccz4r","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"sKGR3p3K0a3GLBpxDgtPAGyLBsEVrnQEv4N9gyUoDeo="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"38946255725","delegator_shares":"41016559763.369968247643941610","description":{"moniker":"Moonstake","identity":"742F7B64C32DF7A6","website":"https://www.moonstake.io/","security_contact":"","details":"Shoot For The Moon"},"unbonding_height":"17062543","unbonding_time":"2023-10-10T00:42:22.940220720Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["48183","63321","66819","137092"],"validator_bond_shares":"1053.169287873189651819","liquid_shares":"20536.886622595724904218"},{"operator_address":"cosmosvaloper124maqmcqv8tquy764ktz7cu0gxnzfw54n3vww8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"V4ooPEhtI8lNENMVfkFfyUdldUOGtSqRjNZcxhpqKQA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"728967548071","delegator_shares":"728967548071.000000000000000000","description":{"moniker":"Simply Staking","identity":"F74595D6D5D568A2","website":"https://www.simply-vc.com.mt","security_contact":"","details":"Simply VC runs highly reliable and secure infrastructure in our own datacentre in Malta, built with the aim of supporting the growth of the blockchain ecosystem."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-05-17T13:57:58.136755326Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"23527317554.000000000000000000","liquid_shares":"111330358238.000000000000000000"},{"operator_address":"cosmosvaloper12knqu4ecmg0982plzs9m9f5jareh0cvegcw3wu","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"wOLAnPHtGadmjF/px7AgY7x6+VrD1UWg10hBdiUJrAc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"14988","delegator_shares":"14988.000000000000000000","description":{"moniker":"offline","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-05-23T08:59:35.800761576Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper12h3d9e9jmnsdjnlwd88dy3wyrx5nrzx265055f","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QJwiiukAFCxI23CJwyh2SJUFivD4R55l1RFxe5mynF4="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000","delegator_shares":"1000.000000000000000000","description":{"moniker":"TerraVegas","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-08-10T08:47:59.911683470Z"},"min_self_delegation":"500","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper12etdez5nurn9avdjrnuezzttck59s0spsx4xea","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"cRTLZkGnsZWlF+4Ey9mnlW21fcEhjMPmTGI80+cnte4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"test","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"5246486","unbonding_time":"2021-03-15T07:54:55.803710225Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-06-15T08:37:45.174077506Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper12lfqufkk2h3w2ycp50czme6nj3ln5tdv7nj3hx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"cxESXyOoe0zCTb2jHAGOhawC3p5w2RcS9C1xJ6sNc94="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"31755794","delegator_shares":"31758967.258285926245604790","description":{"moniker":"Fanfury | fury.fan | Stake to Win","identity":"83705014F2B618A7","website":"https://fury.fan","security_contact":"fanfuryvalidators@proton.me","details":"Fanfury is ratifying its commitment to Cosmos through secure staking, enterprise-level infrastructure, and high-quality applications. In doing so, we further demonstrate our goal of building Cosmos's only Private DFS, Sports, Gaming, and Gambling Chain. Powered by SysteQ."},"unbonding_height":"16250822","unbonding_time":"2023-08-13T01:09:47.632648918Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-09-19T13:37:16.635530304Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["50835","98353","98825"],"validator_bond_shares":"750075.006661809939210184","liquid_shares":"20001.009541536958761382"},{"operator_address":"cosmosvaloper1tpxs9gf9gg74mdu7ya4gxhr5560jsxnp4zq979","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2ojXASzvaThDdG3ckNgyQbmlJMuDNeNSixJ7khUXjto="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1183477","delegator_shares":"1183712.489112187464732175","description":{"moniker":"Cosmos-Validator.com","identity":"B10E3A8255F33866","website":"http://www.cosmos-validator.com/","security_contact":"","details":"Your First Expedition to The Moon. Buckle Up"},"unbonding_height":"5219793","unbonding_time":"2021-03-13T02:59:50.092655370Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-08-23T03:30:00.197596374Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.989807255970878455"},{"operator_address":"cosmosvaloper1tzp2tz0w2eld69jhmyvlalcrjez3tw9g3hzd00","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"AoqNea5Z7VT41YUTI9y4OXv2KXiQ8hQif7g7M3u6kq0="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1547321","delegator_shares":"1547321.000000000000000000","description":{"moniker":"KiKi Finance","identity":"","website":"https://kiki.finance/","security_contact":"","details":"https://kiki.finance/"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-02-26T12:02:19.690511115Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1tr5var87ga3fyy9d0r76uurpmkfm05rg37xacn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"FbJ8zOSHBelo79ganvMFAdAHFuQR9AgEOptZZGzhbok="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"21","delegator_shares":"20.001980174818611724","description":{"moniker":"SpaceTimeContinuum","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-09-03T21:40:03.886119427Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.017500000000000000"},"update_time":"2019-03-18T18:49:39.531694824Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1tflk30mq5vgqjdly92kkhhq3raev2hnz6eete3","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"dhhD3I5QbtC870Il4IzML5Q2AwVDiSn9/HJ9w09Rgdg="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"9839673670956","delegator_shares":"9839673670956.000000000000000000","description":{"moniker":"Everstake","identity":"EF5AC70C00BECEDC","website":"https://everstake.one","security_contact":"","details":"Reliable and experienced staking service provider from Ukraine. Visit our website for more details."},"unbonding_height":"0","unbonding_time":"2019-12-07T19:10:59.878559804Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-05-16T00:01:20.585867965Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"850000000.000000000000000000","liquid_shares":"8028503413.000000000000000000"},{"operator_address":"cosmosvaloper1ttfytaf43nkytzp8hkfjfgjc693ky4t3y2n2ku","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"VNMNfw7mrQBSpEvCtA9ykOe6BoR00RM9b/a9v3vXZhY="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"33417408","delegator_shares":"33447493.708775317721875762","description":{"moniker":"StarCluster","identity":"F97B6EF4FD82202F","website":"https://starcluster.tech","security_contact":"","details":"With decades of passion invested in tech, we provide a team of top security and infrastructure engineers as a service. With extensive knowledge in the blockchain space and having run a successful ICO, we are confident that providing our experience \u0026 skills could benefit many."},"unbonding_height":"10104402","unbonding_time":"2022-05-04T16:07:17.284529547Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"0.150000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-10-26T21:50:11.420458720Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10009.003873814109872303"},{"operator_address":"cosmosvaloper1t00q7dp0wslx34kee4elz496ts2uqlwphz860l","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"h0o4F4Sbt9IqYQH0X/IJTzHeKHANwYuDw2Tu4MLWuYE="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"6196953","delegator_shares":"6198771.608253241697609349","description":{"moniker":"Public Payments","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"5414381","unbonding_time":"2021-03-29T05:07:06.462228227Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1t3x2vutaan59q0jf55yyc24fmae9gljlalrldg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5rIPekexZrX7jZiksVxpE11ljqCDbLFPui0RkBxFTxE="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"100858056694","delegator_shares":"100858056694.000000000000000000","description":{"moniker":"Matterhorn","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-01-17T21:31:01.992501714Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1tjwad66qx72xyr3ydcyascrgdyhee58y5x6zdc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"lSa77Zkv8zvsxVxZxYyllEJmPWbR8dT3TWD6EUR1M1c="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1548718","delegator_shares":"1548718.000000000000000000","description":{"moniker":"😴","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"6051868","unbonding_time":"2021-05-21T18:44:00.699625633Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-01-21T05:04:42.933449543Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1tk2xujvwtn0q60u8xelh50u9xzqvrnpk4d00qj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"6WMd7ZPC+/DO6oUFgffTUJixr23S1ATgWphA+ii8cgk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"50498929","delegator_shares":"50519127.869083770438021186","description":{"moniker":"NASDAQ-BTCS","identity":"","website":"https://www.btcs.com","security_contact":"","details":"BTCS Inc. (“BTCS”) is the first U.S. public company focused on blockchain infrastructure and technology. We secure disruptive next-generation blockchains by actively validating transactions through Proof-of-Stake consensus mechanisms."},"unbonding_height":"12808083","unbonding_time":"2022-12-02T20:22:48.399101777Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-01-11T14:42:12.913564993Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10004.000603398509596169"},{"operator_address":"cosmosvaloper1thwngyhuf7xw6200um6w249ltmtzeldk90wjtk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XKeMi/sBvi1FzLN2PrzSH2VjVe1AZmnMyqk/KWRTFC4="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"ARIGATO2.xyz","identity":"5FB844B04DC96D5F","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2023-11-03T07:00:39.055509469Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1thl5syhmscgnj7whdyrydw3w6vy80044hjpnxh","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"bvL7u2t1j5WoBcIkCUBt/5Tkk8aeeZJ7sb2kskfEI5U="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"364075520","delegator_shares":"364075520.000000000000000000","description":{"moniker":"UNSTAKE/RE-DELEGATE","identity":"0000000000000000","website":"-","security_contact":"infra@rockawayx.com","details":"Validator ouf of active set from 4.12.2023"},"unbonding_height":"18594873","unbonding_time":"2024-01-26T21:31:27.635063105Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-02-02T14:06:46.244847294Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["213716","238635","292703"],"validator_bond_shares":"10014449.000000000000000000","liquid_shares":"26089.000000000000000000"},{"operator_address":"cosmosvaloper1te8nxpc2myjfrhaty0dnzdhs5ahdh5agzuym9v","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"khWkK81bJAgsgLL2GsoTKevosSJ+82VklvpC8gOh6yk="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"358003755901","delegator_shares":"358003755901.000000000000000000","description":{"moniker":"CoinoneNode","identity":"F4E86EE9BD73A11F","website":"https://coinone.co.kr","security_contact":"","details":"The more, the easier. Coinone Node manages your assets securely."},"unbonding_height":"16311695","unbonding_time":"2023-08-17T09:08:23.292239390Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-14T09:22:28.276013718Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["101971"],"validator_bond_shares":"10014138.000000000000000000","liquid_shares":"245310811.000000000000000000"},{"operator_address":"cosmosvaloper1vzvx9zq9czxedvtsvwdtxuslsn67q2vmvr9wej","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"HOivhDffWKgnJ+edbUOAXDaf3M3shX+TeRvf0l1XIRM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"bigone-pool","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"5250174","unbonding_time":"2021-03-15T15:13:25.637592082Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-07-16T08:49:15.776171263Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1vz0clw0mqw5cjvmk38hg6nakkmvwugxrrhjhkg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"bhCfzD4sM9m1xN5ZwBpYMEN8bc/siMa/upPZ6LNjURk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"3","delegator_shares":"2.000357976325844710","description":{"moniker":"ghost","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-05-17T09:24:07.806164280Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2019-04-12T14:52:19.367519004Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1vrg6ruw00lhszl4sjgwt5ldvl8z0f7pfp5va85","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"VdM0vGy2p2gxYrA+SrCR0qGZ4TZflogNhovsOVGGc/s="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1724712936","delegator_shares":"1724885422.334292218120185465","description":{"moniker":"SSSnodes","identity":"C5B68615F8828EC0","website":"http://sssnodes.com/cosmos","security_contact":"","details":"Stake and earn rewards with the most secure and stable validator. Winner of the Game of Stakes. Operated by SSSnodes, a Corp. focused on delegation service for multiple Proof of Stake networks, such as COSMOS, ChainX, IOST, CyberMiles, Lambda, ONT, etc."},"unbonding_height":"5210292","unbonding_time":"2021-03-12T08:04:49.467032067Z","commission":{"commission_rates":{"rate":"0.110000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-10-28T09:51:56.059257893Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.000087206931102418"},{"operator_address":"cosmosvaloper1vygmh344ldv9qefss9ek7ggsnxparljlmj56q5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"0Nu7qOxlaLNKgOKM2Ck0fB6aKdsH1tjOeJw18VtES2g="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"189786090817","delegator_shares":"189786090817.000000000000000000","description":{"moniker":"PUPMØS","identity":"69A46F39FB01F4D4","website":"","security_contact":"","details":"contact: bulldogjack@pm.me"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"10015129.000000000000000000","liquid_shares":"290440794.000000000000000000"},{"operator_address":"cosmosvaloper1vf44d85es37hwl9f4h9gv0e064m0lla60j9luj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XJXB9ZVBXZNG9uUOfvHmrDmB4L8NiV0INOHdXbG0PWA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1804387192108","delegator_shares":"1804567645493.059453570138912921","description":{"moniker":"MultiChain ventures","identity":"06E24C7678282B53","website":"https://www.multichain-ventures.com","security_contact":"","details":"Secure stake and earn rewards with MultiChain ventures"},"unbonding_height":"20917847","unbonding_time":"2024-07-09T11:42:54.623837325Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-22T09:46:52.889700Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"1","unbonding_ids":["117988","174987","750274"],"validator_bond_shares":"1379137911.925733403188153257","liquid_shares":"164624762.625125132075333120"},{"operator_address":"cosmosvaloper1vvwtk805lxehwle9l4yudmq6mn0g32px9xtkhc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"U4ssXnFQCpZV/hZh+r3L71ZloasEcXR//LdIVR9zQb4="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"3138324044198","delegator_shares":"3138324044198.000000000000000000","description":{"moniker":"Imperator.co","identity":"0878BA6BE556C132","website":"https://imperator.co/","security_contact":"contact@imperator.co","details":"100% refund on downtime slashing -- Eligible to all kind of airdrops -- Professional Delegated Proof-of-Stake Network Validator"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"6000009944.000000000000000000","liquid_shares":"94059467405.000000000000000000"},{"operator_address":"cosmosvaloper1vwweykn96nk2d2c7r60cd3ym5pt643z627t9jy","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"LaUP/+gwLsPPwqVgJyviUwY6Uve7t8QxeChSyY8pRyw="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"sleepykitten","identity":"0F79129686FFEFD4","website":"","security_contact":"","details":"Kitten powered blocks"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-11-05T16:38:44.276277843Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1v0g7guekttkdmerz5z8hjj8u8j68c6p00zqgf5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"LZuupXMba4Ac+fnOEjCa89+NbIMfuAeB9QtHu6KqeA8="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"52402006","delegator_shares":"52407243.641810361038897517","description":{"moniker":"✨👱🏻‍♀️ JADE DAO 👱🏻‍♀️✨","identity":"FAEE19B88919C3AE","website":"","security_contact":"","details":"We are all one."},"unbonding_height":"16245571","unbonding_time":"2023-08-12T16:10:35.017690985Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.200000000000000000"},"update_time":"2022-10-03T02:27:51.753645348Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["19586","28519","29396","35310","98417","98616"],"validator_bond_shares":"750075.060549987817131213","liquid_shares":"20001.727569822234802329"},{"operator_address":"cosmosvaloper1vsc7v43kmz7m8kpcxlwwjysa72k5u5gpknu57h","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"9eYdYijvZKPcFyzNPgdidDYANm7cjjv3YeMb/bj7Wtc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"blocktest","identity":"","website":"www.blockpool.com","security_contact":"","details":"Power the staking economy"},"unbonding_height":"5251672","unbonding_time":"2021-03-15T18:11:30.391899203Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1v34d48p2z8mttnly3n9es2aqsqkem9pr6f0fdy","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"zf4JfMRoRgqsvDXnJGNFUkamGw+djI/TXOAaihfscfs="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"blocktest111","identity":"","website":"www.blockpool.com","security_contact":"","details":"Power the staking economy"},"unbonding_height":"5257023","unbonding_time":"2021-03-16T04:46:50.318015349Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-06-22T04:04:20.214320097Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1vjqault583hwktfj63k2hh7r02sj2a66fmvzqz","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"by0WjAY1EHgpi2fCIvggfrmvZdOjl+GpyGLnlySbIVE="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"16","delegator_shares":"16.000000000000000000","description":{"moniker":"Simply VC Genesis","identity":"F74595D6D5D568A2","website":"https://www.simply-vc.com.mt","security_contact":"","details":"Simply VC consists of a team of security, cryptocurrency \u0026 business experts passionate about supporting the blockchain ecosystem. We are in the process of switching validators to improve the max commission settings in favour of our delegators. Read more at twitter.com/Simply_VC."},"unbonding_height":"0","unbonding_time":"2019-07-13T08:41:12.506006788Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2019-04-10T20:17:17.162205524Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1vjn3559ncztu87qj8v4ryasgny7vjfx7jhxzu6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ncIvnaHj+Z5sZm3PXwW/145+MeMlr+xH66suKxdyqi4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"53518151","delegator_shares":"53528848.379215570638257689","description":{"moniker":"Anonstake","identity":"FCAD12142E878B17","website":"https://www.anonstake.com","security_contact":"","details":"We offer reliable non-custodial staking service"},"unbonding_height":"4517687","unbonding_time":"2021-01-12T12:26:55.933413435Z","commission":{"commission_rates":{"rate":"0.060000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2020-11-18T11:27:03.066381385Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1v5y0tg0jllvxf5c3afml8s3awue0ymju89frut","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Lbk6LJSg/x/Paa6Wk15P12B7+EE2G35Lem+edKZ6siE="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"9442038459572","delegator_shares":"9442038459572.000000000000000000","description":{"moniker":"Zero Knowledge Validator (ZKV)","identity":"3E38E52A12F94561","website":"https://zkvalidator.com/","security_contact":"","details":"Zero Knowledge Validator: Stake \u0026 Support ZKP Research \u0026 Privacy Tech"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2019-11-11T15:48:18.737920871Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"490000000.000000000000000000","liquid_shares":"8672651557.000000000000000000"},{"operator_address":"cosmosvaloper1vk706z2tfnqhdg6jrkngyx7f463jq58nj0x7p7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"eBvGu7/ggkoFf+cpzeLUSFU4KAlVpBjrwPj8ROqdQak="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"365905965","delegator_shares":"385163943.840418089041997926","description":{"moniker":"Dont Use","identity":"1850627141D54797","website":"","security_contact":"","details":""},"unbonding_height":"3158180","unbonding_time":"2020-09-18T21:55:51.407646364Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1vh3mytf5mahtqkdzg76v6j6xtu7wks9dejqlhe","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"gH0bJ5bvniTk04/zKUDTEWZd1xPLQlNNFK3qBfSKUwU="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"48104000","delegator_shares":"48104000.000000000000000000","description":{"moniker":"Numenor.one","identity":"461E4BFAEBA0E873","website":"https://numenor.one","security_contact":"","details":""},"unbonding_height":"10564347","unbonding_time":"2022-06-10T17:53:13.807570221Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-14T06:13:29.189713619Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1v69lzl909kje64k8vae24uytpxcnpxgullz2dx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"wShrvIuQC+GsUYAM3GZj/dMoDqKtGXKl6XQ2yQCkA5s="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"183859874836","delegator_shares":"183878262299.937351497916900549","description":{"moniker":"TerraBitcoin Club","identity":"EC3443CC6E038CFA","website":"https://terrabitcoin.club/","security_contact":"","details":"Professional Proof-of-Stake Network Validator | 100% refund on downtime slashing | Eligible to all kind of Airdrops | Follow us for macroeconomy and DeFi opportunities"},"unbonding_height":"10387861","unbonding_time":"2022-05-27T14:53:05.085744405Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1369874306.587598498248296590","liquid_shares":"1776774995.242513026736536318"},{"operator_address":"cosmosvaloper1v6fqxzhzvvjgqmcreffvvvazvws46pwcvyaw4x","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"4Vexj1l3t+SJxGpcrrL29isTCXh6nwTAPr2JLXSdXfk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"3293500","delegator_shares":"3293500.000000000000000000","description":{"moniker":"Wolf 1","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"10540222","unbonding_time":"2022-06-08T20:02:06.427357051Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2021-11-16T01:06:42.004486873Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1vu8ygkp3jvqy3a6s8d7f9lepppr063fqn9mapd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"F0JvB/nuNFIzPFZUJ8sIQxasvHJJtcYL1sEoUVlR/9g="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"Supernova","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-01-27T06:12:32.821772184Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1vulhv3det93gr20dmm32zlt3y3qgx8srk0thaf","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Z8jJURtQxI+KLg6ePxfbODt2yJhu+6MBts7/lu3xRow="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"2600000","delegator_shares":"2600000.000000000000000000","description":{"moniker":"test-pl-validator","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-01-12T10:11:51.117133395Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1v78qrdl7680h7rv007rd7aq6dmx9xf9de63egw","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"vBiE75x8k8WI16miaW66XJFqde0fiOxlILQY/J7eBnw="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1300000","delegator_shares":"1300000.000000000000000000","description":{"moniker":"BitHome","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-28T13:03:38.892448355Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1v78emy9d2xe3tj974l7tmn2whca2nh9zp7s0u9","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"bDO9bUrbyg0f1pTpmjjZU5cgsweCWdwL6HUVnsKJi7k="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"243636254373","delegator_shares":"243636254373.000000000000000000","description":{"moniker":"a41","identity":"87D9921253A2A9EB","website":"a41.io","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-09-30T09:55:35.419958950Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"800000000.000000000000000000","liquid_shares":"145101147431.000000000000000000"},{"operator_address":"cosmosvaloper1vlmgjhwt2r8ddwxygsudqyg7tqqdmlkflvwt8q","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"PcihcINA2omjgSGiQcc2nnEfsC22468S6LOGEuV5EYM="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"12820603","delegator_shares":"12820603.000000000000000000","description":{"moniker":"Altiplanic","identity":"7CE309D6D6326E6C","website":"https://www.altiplanic.io","security_contact":"","details":"Altiplanic provides and maintains cutting edge solutions that power tomorrows financial applications."},"unbonding_height":"18249906","unbonding_time":"2024-01-02T14:57:39.311730167Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2023-09-27T16:39:33.245368494Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":["231340"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1dqp325was50l7ut2lnx6s8xhmtwj3wrtx06gzu","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"H1Qb15Q5zvLWdeavlwkFgtDhXR8njaAz0aO5EfgP5kk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"6449667843","delegator_shares":"6450957934.604014698125783282","description":{"moniker":"Nocturnal Labs","identity":"DE810BE47E3B73B3","website":"https://www.nocturnallabs.org/","security_contact":"","details":"Building bespoke private, immutable and decentralized validator infrastructure across the most critical blockchain networks"},"unbonding_height":"20525394","unbonding_time":"2024-06-11T15:22:54.970335673Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-02-14T22:31:45.861334981Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["51103","98195","109937","157957","223012","702875"],"validator_bond_shares":"20961192.722408211511899426","liquid_shares":"16095.987287847695853256"},{"operator_address":"cosmosvaloper1dzv2cfhynf9xqgz9xae4y94ychxy4gus6rhw8u","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"yF3PKQgErZ6hr7mn/PZ4TkfsCfdFHvpVF0k2fuJ7InQ="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"Active Nodes","identity":"A2EA7DE76AD57E1A","website":"https://www.activenodes.io","security_contact":"","details":"We Skyrocket your Stake! Highly Available Enterprise Infrastructure with multiple nodes around the world"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.500000000000000000"},"update_time":"2022-10-17T08:10:43.000217097Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1dzwa9q95cdwn2ys3m98j6nktxnw4y04vjj94kl","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ttQu/zmtyHHb6vpqJ1M4eA9bJpuwx2jnqjzmtIqyyaU="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"Commons Hub","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.150000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-08-25T12:20:11.832307734Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1d8dvurm066vxhjxyaraml3esff9cywften2lec","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"TejMLTsDGDpBW5+Wf8Vf/qyC4l8ATJs0BMamn00gHGw="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"4000000","delegator_shares":"4000000.000000000000000000","description":{"moniker":"AG_Node_A","identity":"833F4BCC70748155","website":"https://alphagrowth.es","security_contact":"nodosag@alphagrowth.es","details":"Make it happen!"},"unbonding_height":"10622589","unbonding_time":"2022-06-15T08:17:25.874339250Z","commission":{"commission_rates":{"rate":"0.075000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.020000000000000000"},"update_time":"2022-05-20T15:29:46.739654142Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1dt93l3qgmhhlp97srjyqyendrgu9nx0suxtwe8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ils2v7pMD3f3JLodaXHIlsv46BRe+bOir3FNivhIzWo="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"11986449219","delegator_shares":"11988846723.628560494110693024","description":{"moniker":"天照☀","identity":"3912AE47B45446D7","website":"https://amateru.dev/","security_contact":"","details":""},"unbonding_height":"18794948","unbonding_time":"2024-02-09T23:30:06.593590501Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["51104","56072","215532","216115","304267","325337","336923","339223","342651"],"validator_bond_shares":"78007801.372257576725582451","liquid_shares":"128109.523626840217686044"},{"operator_address":"cosmosvaloper1dt4h3hn9zpxvm2t26erf96aaszp3va2wkq28ez","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"LLb+pdI4LjDIeoC4Sk8rg+im66AscOVS4p/6+OloeBI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999902","delegator_shares":"1000000.190026856192957174","description":{"moniker":"deleteme","identity":"66425D7D043D9840","website":"https://donthave.com","security_contact":"","details":"letstryagain!"},"unbonding_height":"33431","unbonding_time":"2020-01-04T09:24:19.312712717Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.700000000000000000","max_change_rate":"0.030000000000000000"},"update_time":"2019-06-27T16:28:12.233449412Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1ddle9tczl87gsvmeva3c48nenyng4n56nghmjk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"1JnB586AElesgc95XXB45DM7jAhZqKpqLxbSNOFd2cU="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"519619145868","delegator_shares":"519619145868.000000000000000000","description":{"moniker":"Vitwit (Previously Witval)","identity":"51468B615127273A","website":"https://www.vitwit.com","security_contact":"","details":"We are a cosmos dev agency, one of the core contributors of Cosmos-SDK. Operating highly available and secure validators and relayers"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.150000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2023-11-08T16:29:24.052868118Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1056120236.000000000000000000","liquid_shares":"8961886662.000000000000000000"},{"operator_address":"cosmosvaloper1d0aup392g3enru7eash83sedqclaxvp7fzh6gk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+WXgBcxP3hgEm75hKp1xW/vRSM/apOlwhm+E6kbgnaE="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"225040526752","delegator_shares":"225085540881.307683017914478573","description":{"moniker":"Stir","identity":"52079344AD4AD624","website":"https://stir.network","security_contact":"","details":""},"unbonding_height":"18791180","unbonding_time":"2024-02-09T17:07:35.816246973Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-12-22T11:16:12.832459461Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["341836"],"validator_bond_shares":"6000600.048676183355508274","liquid_shares":"270393389.711476916384866620"},{"operator_address":"cosmosvaloper1dse76yk5jmj85jsd77ewsczc4k3u4s7a870wtj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"k3BUDcCmzNWhWrsKv1CR+uHeRGvaNB8oL23PGsZyrDQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"20991705","delegator_shares":"21000003.068016128877238930","description":{"moniker":"gf.network","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"8714005","unbonding_time":"2022-01-06T08:40:58.294562162Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-27T12:23:08.242833465Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1dcf60vccyvqewnnm7sq5prrrrd98fzwruj2ntp","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"eEy6wLU5wkqGq2ZbKSG7QoRS2W9TJtjxEHLfppXo1as="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2999700","delegator_shares":"3000000.000000000000000000","description":{"moniker":"O'Leary Labs","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"28374","unbonding_time":"2020-01-03T23:37:47.902654Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2019-04-28T21:51:44.001739147Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1de7qx00pz2j6gn9k88ntxxylelkazfk3g8fgh9","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"cOgTyf7W0kbPzsWAL1T/G+VHiciCVzSFiBaGJ47MYBw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"400086558255","delegator_shares":"400206607428.189753309422106886","description":{"moniker":"Cosmic Validator | 100% Uptime \u0026 Auto-compound","identity":"FF4B91B50B71CEDA","website":"https://www.youtube.com/@cosmicvalidator","security_contact":"","details":"100% Uptime Institutional-Grade Infrastructure | Rewards auto-compounding enabled to maximize your ATOM yield: https://restake.app/cosmoshub | Selected by Stride \u0026 ICF | Follow our Cosmos ecosystem educational content: https://www.youtube.com/@cosmicvalidator"},"unbonding_height":"14778716","unbonding_time":"2023-04-27T18:54:40.057904554Z","commission":{"commission_rates":{"rate":"0.099000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-10-05T18:22:15.583610532Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["1196","19337"],"validator_bond_shares":"2488642087.873791085441789570","liquid_shares":"135612402609.768401388763891405"},{"operator_address":"cosmosvaloper1dm9tz58y5mvw85yrjv7h979lnf9ckc445tzrzx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+PGsJVQ4pgIhDheroj/ixkkR8YryFczE30Vh6XVDagc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"Gundam Stake","identity":"6A0D65E29A4CBC8E","website":"https://cross.technology","security_contact":"","details":"Gundam Stake"},"unbonding_height":"7649125","unbonding_time":"2021-10-04T12:41:58.088310359Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1dm6n0u6l7vwn7nyy87gzmfjryg5jsg9kzn6kng","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"h3RlIKMb/VWGikfZYNHHm4DJ5KF5cNkEVVL1ZVBe0U8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"17732826","delegator_shares":"17732826.000000000000000000","description":{"moniker":" Consensus One","identity":"38172502B043D302","website":"https://www.consensus.one","security_contact":"","details":"Delegate to Consensus One to help secure, support and shape Cosmos. Secure and highly available, 24/7/365. By delegating, you agree to our terms of service."},"unbonding_height":"10129873","unbonding_time":"2022-05-06T18:44:48.731466959Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-05T00:47:07.819868275Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1wqy2s6nwnxj57l0l5rdjxxr646p3al6y70435m","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"KDfZS95BDOjVAfIb5h8+3/QWnDtygldvMll1oPTy5do="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"168475703487","delegator_shares":"168475703487.000000000000000000","description":{"moniker":"Klub Staking","identity":"CF0852DD298E2B0D","website":"https://klub.ki/staking","security_contact":"","details":"Highly secure and resilient infrastructure for Cosmoshub. Powered by Klub."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.060000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-03-02T07:38:14.294426248Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"10014744.000000000000000000","liquid_shares":"263615686.000000000000000000"},{"operator_address":"cosmosvaloper1wqdc7szc4fxp0pg8yfq76e5qqq3trpv27vewr6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"NpnHzjEQEdeMx7+9vFuuLbrk5rSkW6O9ij4d80XNCKw="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"CryptoPath","identity":"E0FFDFF8ADDB1FEE","website":"https://cryptopath.me","security_contact":"","details":"Experienced validator running nodes for many crypto projects. All nodes run on physical hardware in a top-tier data center in California."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-06-01T14:46:18.557665332Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1wp9jne5t3e4au7u8gfep90g59j0qdhpeqvlg7n","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"16r0nGqJh+q4tf0y4qb6mdwOcWjalBdohBkaCj/bQ2w="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"4126189776","delegator_shares":"4126189776.000000000000000000","description":{"moniker":"Newroad Network","identity":"F898ACE263EC1C4E","website":"https://newroad.network/cosmos/","security_contact":"","details":"We provide a professional delegation service for multiple Proof of Stake networks. We use a secure and redundant setup. Visit our website for more information."},"unbonding_height":"12489634","unbonding_time":"2022-11-07T22:57:05.638734771Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1wrx0x9m9ykdhw9sg04v7uljme53wuj03aa5d4f","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"HiJx5FTqpD8Uy4s22yFnm16RNGu5jCzjLA5OED8NQPg="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"610786271175","delegator_shares":"611152845746.958798392057098216","description":{"moniker":"Meria","identity":"9A516A1CD4116BBF","website":"https://meria.com","security_contact":"","details":"French Crypto Investment Company"},"unbonding_height":"16466153","unbonding_time":"2023-08-28T08:34:37.144093394Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["109805"],"validator_bond_shares":"700420120.301647996693204185","liquid_shares":"1339293504.905868625640686210"},{"operator_address":"cosmosvaloper1wrxkqna8w5ldl3twgmyne6fvt9hsfgmksrjwlj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"wL8uqJk5ZYvyXGIkD/gp8/KxLYvqTQr8g6s/yI95Fjw="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1999800","delegator_shares":"2000000.000000000000000000","description":{"moniker":"discontinued","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"5230382","unbonding_time":"2021-03-14T00:00:39.912794534Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.250000000000000000"},"update_time":"2020-04-24T03:06:32.385951708Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1wtv0kp6ydt03edd8kyr5arr4f3yc52vp3u2x3u","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"eInQcvrB2bkkSV1jwBPpVmUgywzgVCGuFqv4QRzQAos="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"44037082263","delegator_shares":"44037082263.000000000000000000","description":{"moniker":"kytzu","identity":"909A480D5643CCC5","website":"https://kytzu.com","security_contact":"","details":"Kytzu Validator"},"unbonding_height":"15373493","unbonding_time":"2023-06-10T07:03:20.170471561Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-02-24T06:00:09.204991207Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["11269","51253"],"validator_bond_shares":"5000000.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1wvt5zugk97mrl5rm9c3m573f9gj03w2gyh8m5v","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"7EXK4t6Ri9QBfQS8K2rMY9mvBIUfecr2JL3FPDqKirc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"5387202025146","delegator_shares":"5387202025146.000000000000000000","description":{"moniker":"CloudByte","identity":"7AD666398A483B05","website":"https://cloudbyte.ro","security_contact":"","details":"Securing the future."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-07T11:54:38.923925271Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1wdrypwex63geqswmcy5qynv4w3z3dyef2qmyna","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"g/K/WCk6kfg6kiymEObDD31v6QPRra8JYEFJPd0SOq0="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"192764113642","delegator_shares":"192764113642.000000000000000000","description":{"moniker":"Stakeflow","identity":"205B591721D10A73","website":"https://validator.stakeflow.io","security_contact":"team@stakeflow.io","details":"Stakeflow is a reliable and secure non-custodial validator that has been running since 2018. We focus on providing public goods for our delegators and supported chains. Check our block explorer https://stakeflow.io and website https://validator.stakeflow.io for more information."},"unbonding_height":"18037727","unbonding_time":"2023-12-18T18:33:57.769418069Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-15T17:32:00.387570437Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["202096"],"validator_bond_shares":"700000000.000000000000000000","liquid_shares":"10290375385.000000000000000000"},{"operator_address":"cosmosvaloper1wd8vquxza6svsvvnh489tdvg9vdjjfpepcfvf9","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"TUAVoUztUjR5EaYqH8/gfNEyaqBka9KwVyRKzjDydJM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1014414121","delegator_shares":"1014515503.015897595251704365","description":{"moniker":"DeBank","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"5111150","unbonding_time":"2021-03-03T15:01:39.658954956Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1wwspfe7whh3zu4ql5rvpg044lyk6cuu7fpnd9e","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"F4n7C07ocO7S0UT8y+spa8FvYA4KhmvT6X/9+7IXrs4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"33123149","delegator_shares":"33126441.817948805923050133","description":{"moniker":"Bit Cat🐱","identity":"FAB46CEEAEAB9FA1","website":"https://www.bitcat365.com","security_contact":"","details":"Secure and stable validator service from China team"},"unbonding_height":"5220669","unbonding_time":"2021-03-13T04:44:15.156224618Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-05-07T11:58:07.726011023Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.994113799024942661"},{"operator_address":"cosmosvaloper1wwcp3ath738qcy3panwqxtva3w28kvqdjw5hee","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"kOw24M8wA1V0IRpFLwMAt2V9mXFwb7XDbZmrxErSBHA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"178778386934","delegator_shares":"178778386934.000000000000000000","description":{"moniker":"BigBrainStaking","identity":"836C08DD436606F3","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.030000000000000000"},"update_time":"2023-11-23T15:06:06.269709418Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1w024sqzpvj5g57maxmvnlzellzwapwsv42360d","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2OntX+A24r/QZJxO4KcP7dodb6W216liuMme/XIE8vI="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"6258169963","delegator_shares":"6258169963.000000000000000000","description":{"moniker":" Earn Stash","identity":"5D62C8CB2743185C","website":"https://www.earnstash.com","security_contact":"","details":" Earn Stash – Helping you earn more with your stake. 100% slash protection. Contact us at grow@earnstash.com."},"unbonding_height":"10507940","unbonding_time":"2022-06-06T06:41:56.804660622Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.050000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1w0330zv7quttes76vmdhda3tnz045uqs37wfx0","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"C2vWp/xo2R7sY5xB5iWnkc+OT8d56paNOOrlXMgggc4="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"68199051","delegator_shares":"68199051.000000000000000000","description":{"moniker":"Mythos","identity":"2E9FDF34351A5112","website":"https://mythos.services","security_contact":"","details":"Staking and validator services for crypto networks"},"unbonding_height":"12478346","unbonding_time":"2022-11-07T02:25:04.947137336Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-07-09T12:41:07.715247827Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1w0494h0l4mneaq7ajkrcjvn73m2n04l87j2nst","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"4bPLheiRz8psfLc6IQzYqOcpc7b8KpGpAjfdKqShP9M="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"227307","delegator_shares":"227419.297028972284312395","description":{"moniker":"heaven","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"6560765","unbonding_time":"2021-07-03T21:29:11.306443516Z","commission":{"commission_rates":{"rate":"0.700000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.500000000000000000"},"update_time":"2021-06-11T09:43:38.818595625Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1w42lm7zv55jrh5ggpecg0v643qeatfkd9aqf3f","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"FrxZm4ptkt0QtyLA5iVCqTmWD6AlrbVXVeornQlePeI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"36038419","delegator_shares":"36045624.650066470351805545","description":{"moniker":"mythos-legacy","identity":"2E9FDF34351A5112","website":"https://mythos.services","security_contact":"","details":"Staking and validator services for crypto networks"},"unbonding_height":"3365068","unbonding_time":"2020-10-06T10:48:40.117388935Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.999983989856679796"},{"operator_address":"cosmosvaloper1we6knm8qartmmh2r0qfpsz6pq0s7emv3e0meuw","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"11pGwt6bot1EC5xeug8mulFNBBWsHV+X7XrxLUmTNF8="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"607260451597","delegator_shares":"607260451597.000000000000000000","description":{"moniker":"Staked","identity":"E7BFA6515FB02B3B","website":"https://staked.us/","security_contact":"","details":"Staked operates highly available and highly secure, institutional grade staking infrastructure for leading proof-of-stake (PoS) protocols."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.020000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"405000000.000000000000000000","liquid_shares":"246330794.000000000000000000"},{"operator_address":"cosmosvaloper1w6em34qympp59ecdu4ef4f5elcdlyp787tahxd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"CZv3QpbpHmTegBKO0CTh4uNHenPlZC9kuuz/6+xEqH4="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"500000","delegator_shares":"500000.000000000000000000","description":{"moniker":"bantest","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-01-16T06:06:01.347835391Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1wmdp7z3wr98wxn54u8x7tjk4fk2cp9rwle4rlc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"xvqU/ReNuEPIfhheGFGMywMMdzrJbKpRrvcEp/USN/M="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1100000","delegator_shares":"1100000.000000000000000000","description":{"moniker":"Dora Factory","identity":"","website":"https://dorafactory.org/","security_contact":"node-operation@dorahacks.com","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2023-01-04T14:06:36.401497785Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1wukx88lfn7l4gfmrgsy96h6kf5tvrv3ucg502l","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"dRb4rPlc2+hMk7Rtjbo/O/uQ9NM5V+vu2mP+1ARh1iw="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"29975012","delegator_shares":"29978002.052231753000644620","description":{"moniker":"#NGC StakeX","identity":"A21D897660B856AC","website":"https://www.ngc.fund/","security_contact":"","details":"NGC StakeX IS BACKING COSMOS! IRIS! LOOM! TOMO!"},"unbonding_height":"10001","unbonding_time":"2020-01-02T11:58:18.459331455Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20001.996342918695529240"},{"operator_address":"cosmosvaloper1wa9zrywwzzwcvarngjq3rrhv6z9gzw4htq3sv3","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"rKpLuOQh6U47A7wyP/Wzcp2jmKZmkGcSvMiL6h3HYAg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"20665887","delegator_shares":"20667948.758137429633637382","description":{"moniker":"BTC.Secure","identity":"1BF3208F584A72F9","website":"https://btcsecure.io","security_contact":"","details":"Staking-as-a-Service Provider. Secure and reliable validator infrastructure with 50+ servers in 11 countries."},"unbonding_height":"5219795","unbonding_time":"2021-03-13T03:00:04.334703123Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.997662542831882143"},{"operator_address":"cosmosvaloper1wauge4px27c257nfn4k3329wteddqw7gs3n66u","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"B1KW35dqxvbqfzrcEfTBh6oI7NPRwWmPJq6oRpcYL94="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2844001","delegator_shares":"2844285.288165843009902371","description":{"moniker":"DappPub","identity":"BB2D113EFC6DFDC4","website":"https://dapp.pub","security_contact":"","details":"DappPub, Unleashing the Power of DApps"},"unbonding_height":"3601672","unbonding_time":"2020-10-26T14:35:58.445912531Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2020-07-31T16:16:59.614921497Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.999606420120843496"},{"operator_address":"cosmosvaloper1w7xcxu92mrw6tp8tx7y7hy5t832v4mx5e6j7ss","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"V0pWoI4GUtc6wKxqLyAKdmj1ArcsRVBu+uGv/eIWchU="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"Interbloc","identity":"","website":"interbloc.org","security_contact":"contact@interbloc.org","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2022-10-28T20:20:39.759370236Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1wlpz5hau2ezu0gmuxav63m53d8s77az9wfzlt6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"KU+Vx/eMOzItRS6GRt70bPOtYm88aaewXsAeODvEmxQ="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1695445765","delegator_shares":"1695954477.776272202624457223","description":{"moniker":"🙏 uGaenn ⛅","identity":"C5B66825D57ED8DE","website":"app.ugaenn.io","security_contact":"","details":"Your Gain is Our First Priority"},"unbonding_height":"18037846","unbonding_time":"2023-12-18T18:45:53.607536222Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["17221","202115","202123"],"validator_bond_shares":"418125424.243888292746818647","liquid_shares":"36100.121464820145118148"},{"operator_address":"cosmosvaloper1wlagucxdxvsmvj6330864x8q3vxz4x02rmvmsu","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"efOai5jzck+C46Zt8ruUcD1w2E7wnDnL9u2ATsODIPg="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"262571462871","delegator_shares":"262571462871.000000000000000000","description":{"moniker":"DSRV","identity":"CC434B6FE536F51B","website":"https://dsrvlabs.com","security_contact":"validator@dsrvlabs.com","details":"DSRV is an integrated blockchain solutions company with the mission of enriching the crypto ecosystem via stronger connectivity. We strive to be your gateway to a suite of all-comprehensive blockchain services. Everything distributed, served complete."},"unbonding_height":"14298268","unbonding_time":"2023-03-23T17:29:29.940121372Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.900000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2021-02-26T15:02:19.028351586Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"600000000.000000000000000000","liquid_shares":"92069895318.000000000000000000"},{"operator_address":"cosmosvaloper10qp0aaj5ugtls6qjy36820ea6yhy5wrm6p533s","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"fu+CjX4HKEOArweNt7/GkjFg84Sl8OR+3b95hVaqEjI="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"kiln-beta","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-05-24T08:58:08.879656786Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper10rt48q0geutn5ajrw502xuq7k5u6jq0kpf60j9","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+Nh2K1ButKgthhuxsGgECjH3gp8zTGIqe+6LyZTlz6U="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"10010000","delegator_shares":"10010000.000000000000000000","description":{"moniker":"UniverseDAO","identity":"3EB183235B56FFFD","website":"https://universedao.io","security_contact":"","details":"Decentralized reserve currency for the Interchain."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-03-27T19:33:06.814091724Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper10rnghuzfntag7dxhqwfeamhuzyymcd3kqpewzh","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"pbgcZd83SbU+Hy6gNmpc58fHlM5nTLl+G9Oq3D3BWQA="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"BasBlock","identity":"","website":"https://twitter.com/basblock_io","security_contact":"","details":"Your Trusted Staking Partner for the Cosmos Ecosystem!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-29T13:56:20.209386182Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper108yt8qsc79gs5rhyrmmdke4tr9zcsykfl9uv03","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"8/fr9MzCquh9SeFhNd5LGvpykg0gu0ex8VwUCqAj70Q="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"31780000","delegator_shares":"31780000.000000000000000000","description":{"moniker":"Validators United","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1083svrca4t350mphfv9x45wq9asrs60cdmrflj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"SRCGDt6z8TFeUjGZt88gBSi4pSRyzbEuba5HB15A0jQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"24680558188","delegator_shares":"24680558188.000000000000000000","description":{"moniker":"Notional","identity":"0E480E2B83B23D80","website":"https://notional.ventures","security_contact":"contact@notional.ventures","details":"High-quality in-house validation, relaying, and software engineering for the Cosmos"},"unbonding_height":"18628022","unbonding_time":"2024-01-29T05:23:03.454644583Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.001000000000000000"},"update_time":"2022-04-01T09:43:06.140077502Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["303100"],"validator_bond_shares":"520721906.000000000000000000","liquid_shares":"70560118.000000000000000000"},{"operator_address":"cosmosvaloper10g9dqqnaskpy0c06r9ejyx9g0k2hyv0sljl2qw","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"kLIXk8sC1baq7vpkugs6BnMFEfDS1IFEeVS2HKZpCHk="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"11000","delegator_shares":"11000.000000000000000000","description":{"moniker":"Nodiums","identity":"279A0D50E36D67F1","website":"https://nodiums.com","security_contact":"nodiums@gmail.com","details":"Nodiums — professional validator. Slash protection."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-10-31T14:30:19.211246791Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper10f9wkd6vdspac05djyfwfx0uxcqxapnqhnkcg8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"OcLXkfrzTaix1evVDKjeax5O//mkVSHPcmE+gWhnh8o="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"22402695974","delegator_shares":"22402695974.000000000000000000","description":{"moniker":"Shutting down please redelegate","identity":"32E618F4E9103878","website":"https://tavis-digital.com","security_contact":"info@tavis-digital.com","details":"The Tavis Digital node is shutting down due to lack of delegations April 21, 2023. Please redelegate to another validator you trust, e.g. Chorus One."},"unbonding_height":"14739358","unbonding_time":"2023-04-24T21:59:37.252390744Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-04-20T10:10:26.070859446Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["16957"],"validator_bond_shares":"1000.000000000000000000","liquid_shares":"30000.000000000000000000"},{"operator_address":"cosmosvaloper102zp2v3ysn8nhuk5q7lvxzsthg8usmw2c0s405","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"zn2odhaZlED/VQ5OBhQoHF3Y6dl+tCVonXi6o88w6Rs="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1430541000","delegator_shares":"1430541000.000000000000000000","description":{"moniker":"Validatrium.com - 0% fee","identity":"9E31CFA37DA22B31","website":"https://validatrium.com","security_contact":"validatrium@gmail.com","details":"Stake with us!"},"unbonding_height":"8733263","unbonding_time":"2022-01-07T22:15:08.270395813Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper102ruvpv2srmunfffxavttxnhezln6fnc54at8c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"K7PFMeLp0twwz3RDAvlWoz0N6vTsCg6KeKx8xwUm5Hw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"197328474671","delegator_shares":"197367945957.011742095621113888","description":{"moniker":"Ztake.org","identity":"09A303A2C724C591","website":"https://ztake.org/","security_contact":"","details":"Support reliable independent validator"},"unbonding_height":"6919502","unbonding_time":"2021-08-03T21:08:36.297179232Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2019-08-14T05:12:52.848294105Z"},"min_self_delegation":"10","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"500089949.478439725290113554","liquid_shares":"10404813341.300999699476083861"},{"operator_address":"cosmosvaloper10wz6lfhmqfw6egg0062ytnawaj6vr89ly5g4yg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XvSvmQe+6rxMDEW0U0NZR9aYAK7WWxxsHoykhsesh9g="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1499558","delegator_shares":"1500155.958642765675279512","description":{"moniker":"BitMax Staking","identity":"","website":"https://bitmax.io/","security_contact":"","details":"Trading Platform Industry Leader driven by Product Innovation"},"unbonding_height":"5507885","unbonding_time":"2021-04-06T00:03:46.269283512Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-01-19T12:21:32.956535488Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10003.987565954539106053"},{"operator_address":"cosmosvaloper10wljxpl03053h9690apmyeakly3ylhejrucvtm","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"8KD85R8EMmFataztLyUO40jp1o21+A6pbsoAL/m1SBI="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"5160921178170","delegator_shares":"5160921178170.000000000000000000","description":{"moniker":"Ledger","identity":"38491F730E86F0C5","website":"https://www.ledger.com/staking-cosmos","security_contact":"","details":"Earn rewards by staking your ATOM with the trustworthy and highly secure Ledger validator."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.075000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-05T08:01:57.900345014Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"10014538.000000000000000000","liquid_shares":"246584344.000000000000000000"},{"operator_address":"cosmosvaloper1000ya26q2cmh399q4c5aaacd9lmmdqp90kw2jn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"yWPYIfSf5yi/MlBzEZx2yMhOJ/daXRx8Eg3NOso8V7c="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"179135573027","delegator_shares":"179135573027.000000000000000000","description":{"moniker":"Staking Fund","identity":"805F39B20E881861","website":"https://staking.fund","security_contact":"","details":"We've been actively engaging in the validating role for numerous novel Proof-of-Stake protocols since early 2018 and proving our commitment to secure decentralized blockchain networks with high availability and zero slashing."},"unbonding_height":"13181702","unbonding_time":"2022-12-30T19:46:14.453163769Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.334000000000000000","max_change_rate":"0.012019031323000000"},"update_time":"2021-10-12T04:16:38.292547368Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"2050000000.000000000000000000","liquid_shares":"244510018.000000000000000000"},{"operator_address":"cosmosvaloper103agss48504gkk3la5xcg5kxplaf6ttnuv234h","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"4JG2XY/etwz9fe4rDCAUkaIxpI9jmgiJqKqZQxp3758="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1191131294571","delegator_shares":"1191607845258.179332182538946839","description":{"moniker":"MANTRA","identity":"FE5139C43EB63C53","website":"https://mantrachain.io","security_contact":"tech@mantradao.com","details":"MANTRA Chain is the Cosmos Layer 1 for RWAs"},"unbonding_height":"20335502","unbonding_time":"2024-05-29T07:26:25.663886902Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.880000000000000000","max_change_rate":"0.080000000000000000"},"update_time":"2024-05-02T14:56:42.940904691Z"},"min_self_delegation":"88","unbonding_on_hold_ref_count":"0","unbonding_ids":["19353","51129","93134","105094","106813","107069","110267","110401","117615","119335","120344","573439","678729"],"validator_bond_shares":"1000.419806493942123715","liquid_shares":"25650.570710202516079111"},{"operator_address":"cosmosvaloper10jzj3jjd3frna0ay08sh4zu4fpy957s49jkk7m","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"s11j8L7dxnSWJR8piA8ncX8NQhNT7zDfBiphviLxlWk="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"457582031585","delegator_shares":"457582031585.000000000000000000","description":{"moniker":"Onbloc Node","identity":"0F5C52A373112D4C","website":"https://onbloc.xyz","security_contact":"info@onbloc.xyz","details":"Onbloc is a reliable blockchain infrastructure company based in South Korea."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-07T05:52:08.009242118Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"405972552.000000000000000000","liquid_shares":"10301162578.000000000000000000"},{"operator_address":"cosmosvaloper10jm8fvdyqlj78w0j5nawc76wsn4pqmdxl683c7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"oLNcThEBX57Tn6OFG940nLsHvm1QXLOvpdFIpFlbHH4="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"6920000","delegator_shares":"6920000.000000000000000000","description":{"moniker":"NosNode⚛️","identity":"913CE38447233C01","website":"https://NosNode.com","security_contact":"nos@nosnode.com","details":"Nostradamus411's Gaia Node"},"unbonding_height":"10152217","unbonding_time":"2022-05-08T14:31:18.369761389Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper10nzaaeh2kq28t3nqsh5m8kmyv90vx7ym5mpakx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"3yAYBP6Jfv+iagCf0fRotrGEkUE6tuT+A4AE4LL8vTk="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"873549037385","delegator_shares":"873636399775.962532389503478606","description":{"moniker":"Blockdaemon","identity":"35892AC552B8A0A8","website":"https://blockdaemon.com/node-marketplace/#staking","security_contact":"","details":"Blockdaemon provides maximum uptime for the Cosmos network so that you can be confident your node will be there, ready and secure, for optimal reward generation. Contact us to stake on Cosmos today."},"unbonding_height":"9995421","unbonding_time":"2022-04-25T14:16:13.760939752Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-04-03T18:09:08.292058897Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"650065005.828020072128188285","liquid_shares":"244554474.484000045349680233"},{"operator_address":"cosmosvaloper10e4vsut6suau8tk9m6dnrm0slgd6npe3jx5xpv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XnuJkcL3Bz7iunLHgka7ISR1SVR8yePrREpIFqOs7mk="},"jailed":true,"status":"BOND_STATUS_UNBONDING","tokens":"338300462423","delegator_shares":"338334295512.881710679846916465","description":{"moniker":"SHUTDOWN_SOON","identity":"8957C5091FBF4192","website":"https://bharvest.io","security_contact":"","details":"To our delegators, we encourage you to redelegate by June. 14, 2024, As we will be sunsetting on that date. Please refer this tweet: https://x.com/B__Harvest/status/1796553229003874800"},"unbonding_height":"20859098","unbonding_time":"2024-07-05T07:44:49.368071950Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-24T11:21:51.694254562Z"},"min_self_delegation":"9000000000","unbonding_on_hold_ref_count":"1","unbonding_ids":["743274"],"validator_bond_shares":"4000400038.352702243195234670","liquid_shares":"11848822.219824879737379791"},{"operator_address":"cosmosvaloper106yp7zw35wftheyyv9f9pe69t8rteumjrx52jg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"0PoQzviEQrLd/HjlpGJYVm2Rb3LXZkmhuuZ5/pbL16Q="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"346444427217","delegator_shares":"346444427217.000000000000000000","description":{"moniker":"Bro_n_Bro","identity":"97EE2A4FADFB1524","website":"bronbro.io","security_contact":"97EE2A4FADFB1524","details":"We are a community-driven bare-metal operated validator and interchain relayer fighting for transparency and decentralization on the Great Web. Visit our portfolio management at app.bronbro.io, validator scoring at score.bronbro.io, and live chains stats at monitor.bronbro.io."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.075000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-10-04T09:48:30.794684675Z"},"min_self_delegation":"90000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1468000000.000000000000000000","liquid_shares":"134598617810.000000000000000000"},{"operator_address":"cosmosvaloper106kt5cmued596rqusmthfnh39h38k64e73fxce","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"OzKrp4yZL9mVYvMkiC4fd75ETsekEBjnebrmaQeRl5A="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"35010641","delegator_shares":"35010641.000000000000000000","description":{"moniker":"SG_NODE","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.075000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2020-01-05T15:07:50.293616042Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper10unx6s0cdqntvrumd5hs07rgd5ytcztqh8etw6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"FCTclUMmyeW0/Zi3vhO5b9+O9HKVCps4faHDj5Xx4Lo="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"372366487636","delegator_shares":"372403727534.327508065156300870","description":{"moniker":"GATA HUB","identity":"44937E3DA9AA699A","website":"https://gatahub.zone","security_contact":"","details":"Cat brings you the max rewards. Secure staking with the most decentralized community-owned validator, trusted by thousands of delegators with millions of funds. Join GATA family 🐾"},"unbonding_height":"19104478","unbonding_time":"2024-03-03T01:56:10.487655904Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"10000","unbonding_on_hold_ref_count":"0","unbonding_ids":["412836"],"validator_bond_shares":"200000000.000000000000000000","liquid_shares":"244548246.828829142616354519"},{"operator_address":"cosmosvaloper10u5uewa85d7vq05d2seanz26pyrc4pp3k6tpku","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"NJIh2w4S0NIHpWqGhjFBdLoGf6ppHRZiSPrY7p99NFo="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"188925652932","delegator_shares":"188944546831.006109457427469683","description":{"moniker":"Amplifier","identity":"","website":"","security_contact":"","details":"Amplifier operates blockchain infrastructure for over 20 networks"},"unbonding_height":"18593527","unbonding_time":"2024-01-26T19:14:49.238934664Z","commission":{"commission_rates":{"rate":"0.075000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-05-30T08:52:23.028691142Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["292322"],"validator_bond_shares":"8011645.000000000000000000","liquid_shares":"244547517.327440489726541599"},{"operator_address":"cosmosvaloper1symf474wnypes2d3mecllqk6l26rwz8mfjqdus","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Z8Bs/NBxshUqUG4gJI0/O6qMn/H/ZoD16Rl0tejctY0="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"428267550539","delegator_shares":"428267550539.000000000000000000","description":{"moniker":"BlockHunters 🎯","identity":"BEAC09B6FE7F908B","website":"https://blockhunters.org/","security_contact":"blockhunters@pm.me","details":"Hunt for the best stake. 🏹"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"414500000.000000000000000000","liquid_shares":"4940403434.000000000000000000"},{"operator_address":"cosmosvaloper1sxx9mszve0gaedz5ld7qdkjkfv8z992ax69k08","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"lObsqlAjmPsnBfBE+orb8vBbKrH2G5VskSUlAq/YcXc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"154585479980","delegator_shares":"154631864776.292888436039258392","description":{"moniker":"validator.network","identity":"357F80896B3311B4","website":"https://twitter.com/validator_net","security_contact":"","details":"Security first. Producing blocks since 2018."},"unbonding_height":"19747467","unbonding_time":"2024-04-18T03:15:32.820428193Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-08-25T12:42:28.353237927Z"},"min_self_delegation":"100000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["106783","450729","516605","573153"],"validator_bond_shares":"200040007.009808425240589747","liquid_shares":"245394404.588828384828391643"},{"operator_address":"cosmosvaloper1sx8wwjyzxsu02mkld488nps8p8anlsr47ygka5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"U/Y5NWWJEtzWU6cKiYTuaDG6TzAHFZlgNRFKkVIKbEg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1099900","delegator_shares":"1100000.000000000000000000","description":{"moniker":"axepool","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"5261673","unbonding_time":"2021-03-16T13:59:28.232794376Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-07-03T17:41:10.370267727Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1sgcfa5z7dmhekhf79m040natu37unyuek54tp7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"kSYswDz5PWvAIupsG8s/rV8bi1Khzrw8DybrcpF0wXo="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"169577814","delegator_shares":"169577814.000000000000000000","description":{"moniker":"Kleomedes","identity":"AD6C05DA12E42B70","website":"https://www.kleomed.es","security_contact":"","details":"The first ever decentralized enterprise."},"unbonding_height":"10128082","unbonding_time":"2022-05-06T15:12:16.214391158Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-04T14:56:53.015197719Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1svwt2mr4x2mx0hcmty0mxsa4rmlfau4lwx2l69","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"0PIJIxF7zNKbME1AxbweH7mE4dCYz08BuuiUSdGzncw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"263226415962","delegator_shares":"263226415962.000000000000000000","description":{"moniker":"Twinstake","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"15371818","unbonding_time":"2023-06-10T04:06:51.469777785Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-28T14:24:23.725910195Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["51105"],"validator_bond_shares":"10014472.000000000000000000","liquid_shares":"247320794.000000000000000000"},{"operator_address":"cosmosvaloper1sdz4rc95vnzh2f54sacec50vjxnmwdakfym4vh","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"nuzJ97cOU9W6eoQtnDnoJNG7knZTU0dScg/3Xuws0cQ="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"336306471193","delegator_shares":"336306471193.000000000000000000","description":{"moniker":"Chill Validation","identity":"3820B9E30B3BD99E","website":"www.chillvalidation.com","security_contact":"","details":"Chill Validation Services - We take care of the Validation so that you can Chill :)"},"unbonding_height":"14923863","unbonding_time":"2023-05-08T09:06:00.862091728Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-03-31T12:15:32.949797053Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["20074","28513"],"validator_bond_shares":"1000000000.000000000000000000","liquid_shares":"115882451679.000000000000000000"},{"operator_address":"cosmosvaloper1sd4tl9aljmmezzudugs7zlaya7pg2895ws8tfs","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"OQ9dO3Q6d75hZg+xAG+ijQtTTJbGezf8PlKmtOuUJjo="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"173015969201","delegator_shares":"173015969201.000000000000000000","description":{"moniker":"InfStones","identity":"39A41C2FDE0AD040","website":"https://infstones.com","security_contact":"partnerships@infstones.com","details":"Fueling Blockchain Beyond Infinity!"},"unbonding_height":"17965617","unbonding_time":"2023-12-13T17:20:14.935891328Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-04-04T18:23:13.247348576Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["51106","182988","195283"],"validator_bond_shares":"7009901.000000000000000000","liquid_shares":"245330794.000000000000000000"},{"operator_address":"cosmosvaloper1s05va5d09xlq3et8mapsesqh6r5lqy7mkhwshm","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QahmjM81l/oM+Yu8yUVFSi8UzyE/boMd6vTbSdpGFwE="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"3542433539","delegator_shares":"3543496425.918814483473212598","description":{"moniker":"Wetez","identity":"26FA2B24F46A98EF","website":"https://www.wetez.io","security_contact":"","details":"Wetez is a professional Web3 service provider, starting in 2018. The services we offer including the validation services, the infrastructure services and the API services, etc.."},"unbonding_height":"18037156","unbonding_time":"2023-12-18T17:36:31.878501580Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["648","201970"],"validator_bond_shares":"7185368.421581770161421180","liquid_shares":"1016403.368464278205642722"},{"operator_address":"cosmosvaloper1s0lankh33kprer2l22nank5rvsuh9ksam8l32u","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"4qgnBMni20vIpBCRPamLUBK9RsHu+N75UP6E83zk0FI="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"4000000","delegator_shares":"4000000.000000000000000000","description":{"moniker":"KingSuper","identity":"C8992BB62C009B9F","website":"https://kingsuper.org","security_contact":"aditya@kingsuper.services","details":"Others Trust, We Validate ! Your Stake is Important to Us. Secure Networks while You Earn Rewards."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.040000000000000000"},"update_time":"2023-09-30T12:56:21.606807890Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1ssm0d433seakyak8kcf93yefhknjleeds4y3em","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"GghJGDl/JZSZ07B2ARdvvJ8SPKtoi/dh8PbYSui359I="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"466219055873","delegator_shares":"466265682091.720025601219806685","description":{"moniker":"IRISNET","identity":"DB667A6F239969F5","website":"https://www.blockbeat.hk/en/Validation.html","security_contact":"","details":"Interchain Service Hub for NextGen Distributed Applications."},"unbonding_height":"11446675","unbonding_time":"2022-08-19T04:42:04.285883328Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.020000000000000000"},"update_time":"2023-02-20T09:44:57.707381662Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"97998869879.543992969314716862","liquid_shares":"8083937512.513561131173704178"},{"operator_address":"cosmosvaloper1sjllsnramtg3ewxqwwrwjxfgc4n4ef9u2lcnj0","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"0kNlxBMpm+5WtfHIG1xsWatOXTKPLtmSqn3EiEIDZeI="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"6024336403211","delegator_shares":"6024336403211.000000000000000000","description":{"moniker":"🐠stake.fish","identity":"90B597A673FC950E","website":"stake.fish","security_contact":"","details":"We are the leading staking service provider for blockchain projects. Join our community to help secure networks and earn rewards. We know staking."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"499000000.000000000000000000","liquid_shares":"408648232.000000000000000000"},{"operator_address":"cosmosvaloper1skhpmqtr8nw2takaduwh4ve5zk9pm5h5tnwlsx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ZqjifpKRJaBDEt7ty9tXB20glNfb1GWjA4pJRzhMfuY="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"Appeal2Heaven","identity":"FED7C177A2303737","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-05-19T16:39:58.761809280Z","commission":{"commission_rates":{"rate":"0.250000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-04-26T15:22:29.371769577Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1skhguug7ffln3wekpmjmnnneu8wqfg3yk2uchv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"wMoE082Qg6IDgYUzrLezn6nhrYeI2nWF/EhvJ0QQ01Q="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"3509402","delegator_shares":"3510002.711806997787417996","description":{"moniker":"Gentarium Validator","identity":"0DA9092661F87186","website":"https://mn.gtmcoin.io/validators/cosmos","security_contact":"","details":""},"unbonding_height":"5221462","unbonding_time":"2021-03-13T06:18:47.118568475Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-06-24T06:28:24.879098510Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.711721276154135143"},{"operator_address":"cosmosvaloper1s6x9fy4wc49wj9jx4jv6czredqsmp46h7vnk2q","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"TaxOZNOCv+G5WzK3Apz3z27xyZVWSgOeGMR3ClxIrQM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"22237519801","delegator_shares":"22239743642.820901030112188513","description":{"moniker":"SNZPool","identity":"FF2019D4CF1F3185","website":"https://snzholding.com","security_contact":"","details":"SNZ is a crypto assets capital, consulting agency, community builder and professional \u0026 reliable POS validator for a dozen of projects like Cosmos, IRISnet, EOS, ONT, Loom, etc."},"unbonding_height":"14193114","unbonding_time":"2023-03-15T23:32:11.193331592Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1s6t3wzx6mcv3pjg5fp2ddzplm3gj4pg6d330wg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"nhrdfZuo6qzbJ1KzTKH9/maws+aThdX6bAkn8L2Y5Sk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"13606599","delegator_shares":"13606599.000000000000000000","description":{"moniker":"omega3","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"10333693","unbonding_time":"2022-05-23T06:15:13.127170993Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2019-03-22T01:22:56.427114790Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1s65zmn32zugl57ysj47s7vmfcek0rtd7he7wde","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"HjSC7VkhKih6xMhudlqfaFE8ZZnP8RKJPv4iqR7RhcE="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"21970975477","delegator_shares":"21986361244.262343623469493172","description":{"moniker":"firstblock","identity":"23D9B8528FC93D58","website":"https://firstblock.io","security_contact":"","details":"You Delegate. We Validate."},"unbonding_height":"15835204","unbonding_time":"2023-07-14T03:45:44.044607303Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-01-09T03:45:47.112144406Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["77178"],"validator_bond_shares":"5003501.387362970733971680","liquid_shares":"10006.188437502499195552"},{"operator_address":"cosmosvaloper1s7jnk7t6yqzensdgpvkvkag022udk842qdjdtd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"nO6jz/KlIYiooQzvgbzG9bmCsnAMWhdhR3Nvcy5Y9JM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"43886366047","delegator_shares":"43960939344.526817241671119830","description":{"moniker":"Blockscale","identity":"F38EDEA063FD446C","website":"https://blockscale.net","security_contact":"","details":"Planet-scale blockchain infrastructure."},"unbonding_height":"12119809","unbonding_time":"2022-10-10T18:38:18.489334619Z","commission":{"commission_rates":{"rate":"0.250000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-09-21T01:23:56.637276990Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10016.992363520085001607"},{"operator_address":"cosmosvaloper1slt7tkd7srlaxnt8vk6uff7j3mc7pk233rs0r5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"KDarRxsrzS8gD1z0OgRKZQ9LilwXOVPhMgZJ4g7djr8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"30867459","delegator_shares":"30882895.488497801287065567","description":{"moniker":"Dominator","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"10971612","unbonding_time":"2022-07-12T22:09:35.966988157Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-08-15T19:43:49.346023340Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20010.002396712053128698"},{"operator_address":"cosmosvaloper13ql36flc4cdjhx08hke5vpr4dyv03aafnmvtnc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"1Ak5QLknwlDRdxbkVLIMi0EUq9CjLHuRLu2ZHtA3v7o="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"416621364220","delegator_shares":"416621364220.000000000000000000","description":{"moniker":"TTT 🇻🇳","identity":"E46A1AC121BEAD77","website":"https://tienthuattoan.com","security_contact":"hello@tienthuattoan.com","details":"Vietnam's largest community validator, offering validation services, educational resources, and market penetration in the Vietnamese crypto market."},"unbonding_height":"19209137","unbonding_time":"2024-03-10T14:03:33.029828284Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["449348"],"validator_bond_shares":"405919309.000000000000000000","liquid_shares":"81459786203.000000000000000000"},{"operator_address":"cosmosvaloper13p5ckpmc9g2v8ez5qsxs00wadqvcc7q0qheh26","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"MxwiMTxBOMgJJcNcn2iePozLlvC3rEB/lIJiVbu0atA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"260867720911","delegator_shares":"260893806022.215470644427907265","description":{"moniker":"Cosmos Spaces","identity":"06B033BAC39DA21C","website":"https://cosmosspaces.zone","security_contact":"","details":"Bare Metal Validators, Relayers, and RPC providers. Top tier infrastructure providers rooted in the Cosmos community."},"unbonding_height":"14778725","unbonding_time":"2023-04-27T18:55:40.980273094Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-07-14T11:56:36.480274014Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["19338"],"validator_bond_shares":"623598363.776332645310822981","liquid_shares":"113774817874.488185545657201925"},{"operator_address":"cosmosvaloper13zenl68sgz2fg9r5a59f3f2cdd4zwq8kupgn9k","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"akoiw6DBuviW3auqR85VPN3WCseaPPh919HX3IvgJcU="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"2000000","delegator_shares":"2000000.000000000000000000","description":{"moniker":"Ivaldi Labs","identity":"adcdd7ddbc16386b","website":"https://ivaldilabs.xyz","security_contact":"","details":"They can't cancel spring"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-06T22:17:53.814480798Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper13r34577pag76yykfsangw0dx74js8srq2nls67","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"CIsY4vK9afqWOv5LHJKsBZFaXRlAkMTi2R6xdCKXNos="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"3000000","delegator_shares":"3000000.000000000000000000","description":{"moniker":"validator-bithome-mainnet-00","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-12-06T05:43:53.161015646Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper13x4pynlp86prhcmtns742kgsgu7pjtzj4djh7s","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"wTpxfK1qRDevJkNWR20w+GQ3+OV9hASGJDJDJNGGkRk="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"226498164008","delegator_shares":"226520815364.774770441940303863","description":{"moniker":"CryptoDungeon","identity":"93EEE9A0E6827ECA","website":"https://Cryptodungeon.org/","security_contact":"","details":"The CryptoDungeon. Our servers are located in an underground facility designed to withstand an F4 tornado, with backup power and three separate ISPs"},"unbonding_height":"17502217","unbonding_time":"2023-11-10T14:20:48.249549758Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-10-16T22:40:32.063484955Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["95253","124249","131793","131952","143104","153507","156062"],"validator_bond_shares":"5433272246.028327789018724652","liquid_shares":"11896666837.004430853377478708"},{"operator_address":"cosmosvaloper13x77yexvf6qexfjg9czp6jhpv7vpjdwwkyhe4p","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"wXMVIoVMpD8vPS/U1+6Cm+jpoMSoyGprQYyMnVtNaWc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"224688338419","delegator_shares":"224688338419.000000000000000000","description":{"moniker":"blockscape","identity":"C46C8329BB5F48D8","website":"https://blockscape.network/","security_contact":"","details":"By delegating, you confirm that you are aware of the risk of slashing and that Blockscape Finance AG is not liable for any potential damages to your investment."},"unbonding_height":"2671774","unbonding_time":"2020-08-09T07:24:32.992528359Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-02-23T08:25:20.211728650Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1061000000.000000000000000000","liquid_shares":"8888078398.000000000000000000"},{"operator_address":"cosmosvaloper13fjm3anwze4gnkzv7r44pp0lnkr755xmdu37ct","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"9qOccog2ov4tSilsuotBNF9IQNTJwznQXe7Abh44Elc="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"143530177","delegator_shares":"143544525.117650103637503984","description":{"moniker":"Altiplanic","identity":"2B7202440CDE9749","website":"https://www.altiplanic.io","security_contact":"","details":"Altiplanic provides and maintains cutting edge solutions that power tomorrows financial applications."},"unbonding_height":"18676063","unbonding_time":"2024-02-01T14:33:41.436562389Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":["237072","244864","304163","316655"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper132juzk0gdmwuxvx4phug7m3ymyatxlh9734g4w","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"KbhRasSMxRtStejqK/Ayzexm/DtavlfbNjWGznPXMlE="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"4564641482142","delegator_shares":"4564641482142.000000000000000000","description":{"moniker":"P2P.ORG - P2P Validator","identity":"E12F4695036D8072","website":"https://p2p.org","security_contact":"","details":"One of the winners of Cosmos Game of Stakes. We provide a simple, secure and intelligent staking service to help you generate rewards on your blockchain assets across 9+ networks within a single interface. Let’s stake together - p2p.org."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-06-25T08:09:19.886810498Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"720000000.000000000000000000","liquid_shares":"8999126894.000000000000000000"},{"operator_address":"cosmosvaloper130mdu9a0etmeuw52qfxk73pn0ga6gawkxsrlwf","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"T2/RQlkfKOBz6eCt/drq8pCIQUPmk2e8QFJ39IsA96M="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1547705509856","delegator_shares":"1548015091382.837589793438732124","description":{"moniker":"strangelove","identity":"158DA6C7FCFB7BD23988D9C0D0D8B80F1C5C70B5","website":"\u003chttps://strange.love/\u003e","security_contact":"[infra@strange.love](mailto:infra@strange.love)","details":"Bringing IBC everywhere and USDC to Cosmos. We build noble, rly, horcrux, ibc-apps, interchaintest and many more. 100% soft slash protection."},"unbonding_height":"15650744","unbonding_time":"2023-06-30T15:17:28.502349718Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.150000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2021-03-19T18:29:44.287558408Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["66729"],"validator_bond_shares":"19021887.144947989186386352","liquid_shares":"367442959.817506136764560041"},{"operator_address":"cosmosvaloper13sduv92y3xdhy3rpmhakrc3v7t37e7ps9l0kpv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"A1rnWvZI4N1rlS2RG+gR0utmUp5n4CB3La4iQsdTwAs="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"402741178585","delegator_shares":"402942609137.799199888132861602","description":{"moniker":"nylira.net","identity":"6A0D65E29A4CBC8E","website":"https://nylira.net","security_contact":"","details":"Stake and earn with security and peace of mind. Operated by Peng Zhong."},"unbonding_height":"18930860","unbonding_time":"2024-02-19T15:41:39.862046519Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-14T21:33:23.863828710Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["103019","151156","362818"],"validator_bond_shares":"10017152.252822033619874963","liquid_shares":"245491243.048969066260081436"},{"operator_address":"cosmosvaloper13nvnv6q8d3yg7tjeahjzljkqu0y27s8y9e7as9","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"40mPHu2n7+r4Q6FGyXY9DjdBU236yAKvDZTOnev83Zs="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"56706946","delegator_shares":"56706946.000000000000000000","description":{"moniker":"Latent Iron","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"16390829","unbonding_time":"2023-08-22T23:54:05.445870284Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-09-01T17:14:54.182291702Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["106377"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper134z30285xhayem22zqrsvnujdlxfpvr7h724l5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"EnO0MSxZ/ADdIPx3LIB6cHkvY0wqQvSPv8FTrGA5ZdE="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"120000","delegator_shares":"120000.000000000000000000","description":{"moniker":"anythings","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-11-30T11:55:55.757607690Z"},"min_self_delegation":"100000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper134935fp2av3d9h09rxq2j3ct8qzf4vzpw90gtw","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"iSxSsgBBRSJzD8dCCec1W5pBglRhOnn0NkPtxWbwLNc="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"genznodes","identity":"86D0A9427E51D239","website":"https://genznodes.dev","security_contact":"validator@genznodes.dev","details":"Committed to helping build a more inclusive and decentralized Web3 ecosystem."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-06-22T14:54:44.007531524Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper13hule0xx8gvzjrgstqjct0kwygfh7kd03dr93f","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"7qBe8oqKPzERIduxKLlE49O58SsdshYq3wNIqiskMbk="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"34660000","delegator_shares":"34660000.000000000000000000","description":{"moniker":"noogra.nuts","identity":"E711E530899015DC","website":"https://nutbox.io/","security_contact":"contact@nutbox.io","details":"A multi-chain staking protocol and staking-based DAO creation platform."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-04-25T15:23:05.993143825Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper13ce7hhqa0z3tpc2l7jm0lcvwe073hdkkpp2nst","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2Z7cB20vAe5nFjtOd/xrOsJbMsnfRP2tj+jJlWG9UIc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"100347732","delegator_shares":"100347732.000000000000000000","description":{"moniker":"RockX","identity":"A15B586AB203F14E","website":"www.rockx.com","security_contact":"","details":"Unlocking the full value of digital assets and decentralized governance"},"unbonding_height":"2002548","unbonding_time":"2020-06-14T08:21:08.863683452Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-09-05T08:00:55.144718017Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper13e0scpzvzjvx8d2fgevch67gc7zqs3sgt6nwqk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"BxYf4RlD1plQNVGY5WTVW2+Z4MsScNJuT9ySgVLfsLg="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"CommunityStaking","identity":"F8FCC108B0120E16","website":"https://twitter.com/CommunityStakin","security_contact":"communitystaking@gmail.com","details":"We bridge the gap between technology and endusers. We also give back through our #CommunityJackpot. For our Telegram Announcements: https://t.me/CommunityStaking"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-18T13:57:50.750378697Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper136zvatxwq7xfhnaxku6np2c3n59j3p39z5u77g","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"gE4X7NRTLEu3MF47igAzYYy8wk6yXEBG3zuGMsT/jfc="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"20000000","delegator_shares":"20000000.000000000000000000","description":{"moniker":"Atom Online","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper13maqgtlklmereflvg3lq3e8zrp0jsqhr8ef3kk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"1HzhBPQhjOFbz3/gRjfHr8+82vQuvK6Mi0K7+bOraLA="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"5440034621","delegator_shares":"5440034621.000000000000000000","description":{"moniker":"ChainUp \u0026 NewHuo","identity":"9AA2E438AA43CDEB","website":"https://cloud.chainup.com","security_contact":"","details":"A World-Leading BlockChain Technology Service Provider"},"unbonding_height":"19364821","unbonding_time":"2024-03-21T18:39:08.811048069Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-10-20T03:42:36.126110824Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["483384"],"validator_bond_shares":"6008470.000000000000000000","liquid_shares":"60089.000000000000000000"},{"operator_address":"cosmosvaloper1jxv0u20scum4trha72c7ltfgfqef6nsch7q6cu","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"mPnu910hOOa1tAQ7pbOLFDxvllbQUmrbtGjqQrYg1nM="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"352317960029","delegator_shares":"352317960029.000000000000000000","description":{"moniker":"Ping","identity":"6783E9F948541962","website":"https://ping.pub","security_contact":"","details":"We are one of the most secure and stable validator, welcome to delegate to us. 我们是最安全,最稳定,性价比最高的验证人节点,欢迎委托给我们!"},"unbonding_height":"19992543","unbonding_time":"2024-05-05T07:49:47.740014573Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.200000000000000000"},"update_time":"2023-10-23T08:12:49.632002845Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["109938","626426"],"validator_bond_shares":"39017133.000000000000000000","liquid_shares":"245354671.000000000000000000"},{"operator_address":"cosmosvaloper1jx7uhnrg8pylqydtxwykc288mzh24866emytpa","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"s2Z7UYuNl3jSvM20qlRcZV4z8fDCgfRFV5pxAPoMGX8="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"236453087100","delegator_shares":"236453087100.000000000000000000","description":{"moniker":"Sygnum","identity":"BCAF7FCBB19A5DE6","website":"https://sygnum.com","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-05-01T07:28:49.905225801Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"10014148.000000000000000000","liquid_shares":"245354577.000000000000000000"},{"operator_address":"cosmosvaloper1jgczjsz3tugudsutektmr9z9lmv8u6vy0l2de7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"A3RsEJQT5Hx6ZxHRAvl3Hsk4C2IdSxhJckfF7QEUJUw="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"InActive","identity":"","website":"","security_contact":"","details":"Inactive"},"unbonding_height":"0","unbonding_time":"2019-05-24T19:19:48.762771278Z","commission":{"commission_rates":{"rate":"0.130000000000000000","max_rate":"0.130000000000000000","max_change_rate":"0.000000000000000000"},"update_time":"2019-04-29T19:37:14.162795368Z"},"min_self_delegation":"400","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1j2ytk05qyx40twttvtph5ytes7lmhgshpuk50d","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"n4nvnPI7ry9fPrCg4HXcMK+FSsnVAgi8DS7EV7zq6OE="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"SpaceXPool","identity":"","website":"https://cosmos.spacexpool.com","security_contact":"","details":"Secure staking with SpaceXPool, the most experienced institutional grade staking team."},"unbonding_height":"5267024","unbonding_time":"2021-03-17T00:33:57.660250483Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-20T16:07:32.969554178Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1jw8ett8uzrvjjhfcyajwcnckfl64npwxvlz2q8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"N7LllfhWgStmFvqkr/ltNmu6IiPqr942rafNVpUYM7I="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"Deperacated","identity":"","website":"www.rockx.com","security_contact":"","details":"Please do not vote me"},"unbonding_height":"5268649","unbonding_time":"2021-03-17T03:46:48.305400107Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-07-19T08:54:32.505511782Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1j0vaeh27t4rll7zhmarwcuq8xtrmvqhudrgcky","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ZOvaws6Rz4Pl8mThEEh3IR7rsnx213jY9smYC1GcC6o="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"189002198245","delegator_shares":"189021100208.858409249124570738","description":{"moniker":"Chainflow","identity":"103DCE407C9F1D13","website":"https://chainflow.io/cosmos","security_contact":"","details":"Independent validator building crypto infrastructure for a brighter future / Cosmos since 2017 / #KeepStakeDecentralized"},"unbonding_height":"10521292","unbonding_time":"2022-06-07T08:13:46.312848069Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-11-01T15:40:22.416837289Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"400040003.901986999729741112","liquid_shares":"10326101329.167602507484093273"},{"operator_address":"cosmosvaloper1jst8q8flpn94u9uvkpae8mrkk3a5pjhxx529z2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"IeTUELQs74lZj6+ktOM4UN+UVbAbiweas9uC1vQ/Onk="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"484078544334","delegator_shares":"484078544334.000000000000000000","description":{"moniker":"Node Guardians","identity":"26FE476C84A3C760","website":"https://infra.nodeguardians.io/","security_contact":"","details":"Cosmos Network is under the watchful eyes of the Node Guardians - nodeguardians.io"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-09-18T13:35:39.678135695Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1200000000.000000000000000000","liquid_shares":"11406737334.000000000000000000"},{"operator_address":"cosmosvaloper1jjstwduq89rzkw4qcsk0q7d4ycq5ktmqd7nrmg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"W8fUQT56KgOldek1DWQkzmhpbnei4AAiDqkbBxveT5E="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1120799","delegator_shares":"1120904.695919320972897479","description":{"moniker":"LiebiPool","identity":"361936D6B8D5C14F","website":"https://pool.liebi.com","security_contact":"","details":"全新一代的 PoS 矿池,持有矿权即挖矿 All new PoS mining pool, Holder i.e. Mining"},"unbonding_height":"48525","unbonding_time":"2020-01-05T14:39:09.815854687Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1jknayw5aejl5l2lctpxw8uy7x0xmc5vmu4q2zr","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"RhO9kGKY4yGNcXqNP6uIku62xI4En+XsDhOzdZUzoBk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"20000","delegator_shares":"20000.000000000000000000","description":{"moniker":"Please Redelegate","identity":"FEF740F1760E1B56","website":"https://chihuahua.wtf","security_contact":"","details":"Please, redelegate to some other validator"},"unbonding_height":"10201510","unbonding_time":"2022-05-12T15:17:31.119928488Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1jmykcq8gylmy5tgqtel4xj4q62fdt49sl584xd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"EbpW+vs11yVlXtMEnJBtH+CghPyUcVVbzbTTSmhC4M8="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"251005503531","delegator_shares":"251055706351.031887170931966386","description":{"moniker":"Blocks United | blocksunited.com","identity":"F7A8462BC66D7E03","website":"https://blocksunited.com","security_contact":"","details":"Blocks United | blocksunited.com"},"unbonding_height":"15871413","unbonding_time":"2023-07-16T18:33:01.113489131Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-09-18T16:00:36.932755618Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["79051"],"validator_bond_shares":"449089804.595064227534685373","liquid_shares":"8135400514.673655249590414135"},{"operator_address":"cosmosvaloper1jmd8vcja8f7vqypxh0rceucrkt9hgsxk4kt5ad","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Zp8cSh5rdjxlu4yhqf4J4uhkE+rdN1qtaVHmcM73slE="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1999800","delegator_shares":"2000000.000000000000000000","description":{"moniker":"nexus","identity":"","website":"https://discord.gg/J7aUXzs","security_contact":"","details":"Riding the Cosmos!"},"unbonding_height":"5239254","unbonding_time":"2021-03-14T17:36:00.145172871Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1ju455e78y7p4sgj08qwwnrn5ffwhcv54sd7l2c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"w/M/uNT4s4UWEc0lPVbLFNf94of4Fhy/L+suKYZ/MR4="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1121101","delegator_shares":"1121101.000000000000000000","description":{"moniker":"alphab.ai","identity":"","website":"https://alphab.ai/","security_contact":"https://t.me/intelix","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-09-18T00:31:38.334178357Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1j78gfl4ml9h2xdduhw2cpgheu3hdalkpuvk7m5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"TGYyxdzPSE4wDhigXKmqNmtiuAeg3c597WhkGXcbVLw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"253651630506","delegator_shares":"253727741001.696533376572952290","description":{"moniker":"TeeNode","identity":"E81DC6CACBEFE410","website":"","security_contact":"","details":"Stake ATOM here. Staking service secure, trusted"},"unbonding_height":"20839745","unbonding_time":"2024-07-03T22:55:27.436073135Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.800000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-02-03T08:41:03.918588977Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"1","unbonding_ids":["469485","726581","741699"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1j7fgj7v9nqjg6wfda9paldcxezd8yv4qmhftye","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"E9bOMJmq2B1PCW7+yf23CXujzCCBiJKT7RtiOWRmaxE="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"294367872","delegator_shares":"294367872.000000000000000000","description":{"moniker":"Gelotto 🛡 Slash Protected","identity":"6696D60A73064DFE","website":"https://gelotto.io/","security_contact":"","details":"IBC luck based gaming platform with a mission to secure the Cosmos"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-11-02T22:43:54.541041968Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1jlr62guqwrwkdt4m3y00zh2rrsamhjf9num5xr","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"pk7vL9YoXJy5A3EOyesIvZ5qlxc2qsW99Kk/VzobkgY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"565760289089","delegator_shares":"565760289089.000000000000000000","description":{"moniker":"StakeWithUs","identity":"609F83752053AD57","website":"https://stakewith.us","security_contact":"","details":"Secured Staking Made Easy. Put Your Crypto to Work - Hassle Free. Disclaimer: Delegators should understand that delegation comes with slashing risk. By delegating to StakeWithUs Pte Ltd, you acknowledge that StakeWithUs Pte Ltd is not liable for any losses on your investment."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2022-04-16T05:56:11.920416064Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1000000000.000000000000000000","liquid_shares":"87670790671.000000000000000000"},{"operator_address":"cosmosvaloper1nz3c4q40j8jyvg2hcljkwhe69872mnllf7v9xh","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"sO/vfG76XMutSsa/b3bA880XQTEXUMgOZdxBr/GZUJw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"343302519257","delegator_shares":"343302519257.000000000000000000","description":{"moniker":"Interstellar Lounge 🍸","identity":"9633C081790FAB0A","website":"https://twitter.com/Interstellounge","security_contact":"bartender@interstellar-lounge.org","details":"Validating networks since 2021 using a high-availability infrastructure consisting of a hybrid of dedicated cloud and bare metal servers."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-01-02T01:59:45.720341189Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"500000000.000000000000000000","liquid_shares":"10359427578.000000000000000000"},{"operator_address":"cosmosvaloper1nykdskut2fq8k84epnuwjttwfupmdfwmpc3yvt","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"WUFA93sGD9Xbz8Ao5YBV0Ny3aUr5eHV//0jJsQry7XU="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"10140524","delegator_shares":"10140524.000000000000000000","description":{"moniker":"Foundry USA","identity":"","website":"https://foundrydigital.com/staking-services/","security_contact":"","details":"Foundry works to empower a decentralized infrastructure. We are protocol-agnostic and seek to support like-minded blockchain entrepreneurs who share our mission to advance the industry."},"unbonding_height":"18038912","unbonding_time":"2023-12-18T20:33:13.170332863Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-08-09T18:38:50.445757380Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["160518","162284","185927","202290"],"validator_bond_shares":"9000000.000000000000000000","liquid_shares":"45037.000000000000000000"},{"operator_address":"cosmosvaloper1n9juyach9xvnsnkeale4kc4kjgaedvsape5vf3","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"xbrMVPTPJQ1kpZQc58G3jMa5Spf1yysDQHTEvCPsUxY="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"7177631","delegator_shares":"7178328.360902117744855778","description":{"moniker":"----------=🛸=----------","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-05-12T11:26:26.479339761Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.972968656949083270"},{"operator_address":"cosmosvaloper1nxe3gnztx8wvayj260dp6yw7jg797m8up02h7z","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"jJ8FNaA3OSuKVUKJGTpFU5o3M+zMxnHljPZnrd6UQKc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"136463198909","delegator_shares":"136463198909.000000000000000000","description":{"moniker":"cosmos hub","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"19349083","unbonding_time":"2024-03-20T15:22:05.693842963Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-07-21T03:41:41.087009833Z"},"min_self_delegation":"500000","unbonding_on_hold_ref_count":"0","unbonding_ids":["1539","1738","4560","9250","45437","52384","154694","156063","158187","182275","183213","185573","202111","236369","237390","239450","244935","262039","401350","413994","461233","477115"],"validator_bond_shares":"10001667.000000000000000000","liquid_shares":"245329568.000000000000000000"},{"operator_address":"cosmosvaloper1nf0hr6a34wz9dpcz27qn7rm2v04azlxqu8wkmc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/hP+ZGu8pLymYF5pFWEUzix2Y4G1v/2ttPvNBOwae1w="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"10304992","delegator_shares":"10304992.000000000000000000","description":{"moniker":"bithome-validator-mainnet-01","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-01-24T08:18:44.859826435Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1n229vhepft6wnkt5tjpwmxdmcnfz55jv3vp77d","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"GUqbUS+7PeplNfxVcnDIyrXTLJPNdJQ4MQ6kBg5eYpw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"8209520320633","delegator_shares":"8210341248643.622974860731433076","description":{"moniker":"Allnodes","identity":"3999DA33020A4DBC","website":"https://www.allnodes.com/atom","security_contact":"support@allnodes.com","details":"Allnodes leads non-custodial infrastructure for Cosmos, offering auto-compounding rewards, seamless node and governance management across all supported Cosmos-based chains from one portfolio page. Fast, reliable, and free RPC endpoints: https://cosmos.publicnode.com"},"unbonding_height":"5361963","unbonding_time":"2021-03-24T20:51:09.498386371Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"500049999.314557861913078071","liquid_shares":"30735870812.714382550801222269"},{"operator_address":"cosmosvaloper1nths3ruxgdthfxx3y8d4a9wfq5a2mkwhvc3k8g","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"OzNkdinZoRFTYfjnBGzGesaWqCQc+xNhN9d+1z2Kaqs="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"redelegate_please","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1nta8dt082qts2uldz2c2at6xmx8wpdwhld0mdh","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"54obZCHewVtaH0Sy4EraX9DNLjZZs5Rss5DCpozIeYg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999851","delegator_shares":"1000000.997649519927490299","description":{"moniker":"mrinal","identity":"346FCFD72E79C196","website":"https://twitter.com/mrinal","security_contact":"","details":"Run by Mrinal Wadhwa"},"unbonding_height":"5271174","unbonding_time":"2021-03-17T08:46:14.805556325Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.150000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2019-03-26T05:50:18.238011317Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1n3f5lm7xtlrp05z9ud2xk2cnvk2xnzkm2he6er","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"RcVaDS7Ahsd/3FGhs7Q92BB0LFmWtNXOnumKVFC2+FM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"257578111","delegator_shares":"257603857.883137147199665728","description":{"moniker":"AirGap 🛡","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"9188122","unbonding_time":"2022-02-14T22:44:45.339793179Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2020-02-13T08:38:50.239783489Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20001.999562926072415445"},{"operator_address":"cosmosvaloper1n3nll7yl3lcv932s2r7l6jzvkjtjk0qppp3rls","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"i2CBZGEZyKsii/Jn9ofNEU3MQj/Okt5SspMLxeJ5Pcc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"852867669","delegator_shares":"852867669.000000000000000000","description":{"moniker":"RoundTable21 by WildSage Labs","identity":"3D1E44805E3D59D1","website":"","security_contact":"","details":"RoundTable21 is an International, multi-disciplinary team of consultants and advisors partnering alongside leading blockchain startups to offer guidance, expertise, investment and hands-on assistance in every aspect of development. Infrastructure provided by https://WildSage.io"},"unbonding_height":"15018638","unbonding_time":"2023-05-15T07:01:16.662369397Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-04-17T06:11:26.067665862Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["29391","33599"],"validator_bond_shares":"1000.000000000000000000","liquid_shares":"30000.000000000000000000"},{"operator_address":"cosmosvaloper1n3mhyp9fvcmuu8l0q8qvjy07x0rql8q46fe2xk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"t0Yoals7uv2cJJugTF8e1f/2pA/vasY37LbBG79n2xY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"818881966349","delegator_shares":"818881966349.000000000000000000","description":{"moniker":"0base.vc","identity":"67A577430DBBCEE0","website":"https://0base.vc","security_contact":"","details":"0base.vc is a validator who doesn't trust any blockchain. We validate it by ourselves."},"unbonding_height":"5749479","unbonding_time":"2021-04-26T06:48:47.086650356Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.340000000000000000","max_change_rate":"0.020000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"3355651304.000000000000000000","liquid_shares":"8070159261.000000000000000000"},{"operator_address":"cosmosvaloper1n5pu2rtz4e2skaeatcmlexza7kheedzh8a2680","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"m0thJvdnGUsrANKJx+aM9Em4IN17v5mXHilLzDkeujQ="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"20243787","delegator_shares":"20253907.821943063328473123","description":{"moniker":"BlockMatrix 🚀","identity":"DA33F58EC17769B4","website":"https://blockmatrix.network","security_contact":"","details":"Experienced validator across multiple PoS and DPoS networks. Winners in the Game of Stakes. Cosmos FTW!"},"unbonding_height":"12472190","unbonding_time":"2022-11-06T15:16:34.857536307Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"10","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10005.000869552821983455"},{"operator_address":"cosmosvaloper1n5xufj0753hvhv6q09f5lh29s57epnrl59lpp6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"fEHh7IA1phnVp5uzSnKEoTyYMKoMs3pkgd7XkVJZsls="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"BlockPool.com","identity":"","website":"www.blockpool.com","security_contact":"","details":"Power the staking economy!"},"unbonding_height":"5277025","unbonding_time":"2021-03-17T20:20:24.614755061Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1n5epesmpcyx9x643aa3m9qw2fk3tf0myesv9zw","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"D06Rs/S1scIzoct0zx9T0WJiZAEtz9XBWpBtMvIB5ws="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"25199999","delegator_shares":"25199999.000000000000000000","description":{"moniker":"MMS","identity":"0AB0957AA5A01AD1","website":"https://mms.team","security_contact":"mainnet@mms.team","details":"We are MMS"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1n5e2z5d5324rcms0f5c9nn5ux65u47j29ng6ed","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5JZeN5NRY5oCRK9FwP2NoWDhKGwzeWURrcwsoJ+v+94="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"501300","delegator_shares":"501300.000000000000000000","description":{"moniker":"⚡ AstroTech Labs ⚡","identity":"","website":"https://astrotechlabs.com/","security_contact":"buidl@astrotechlabs.com","details":"Unlocking the power of blockchain data through cutting-edge AI models, our team aims to drive value for the ATOM token and increase blockchain adoption for all."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.240000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-01-16T18:50:39.618992451Z"},"min_self_delegation":"5000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1ncp4h8ckha4c6lel5wktclt4yrz4t896qawm7z","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"sVVWbXdEXbCvWHwe40fGzW0CFtfI+mW+MzkjYRc5ofk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1049904","delegator_shares":"1050008.674280869400563931","description":{"moniker":"Comdex","identity":"6ED3253224A3060F","website":"https://comdex.sg","security_contact":"","details":"We are winners in Game of Stakes under Never Jailed Category. Stake with our secure and stable validator."},"unbonding_height":"52935","unbonding_time":"2020-01-05T23:11:55.800616539Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2019-04-16T13:28:23.650182569Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.996989066327974404"},{"operator_address":"cosmosvaloper1nesedjyngslkvgg8jxy6nuy6r4g6ty0fdk3yky","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QrlLxAIPjBJ9Sky2FVnLNek/Lh/lnMWt+lajbf5gTvw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"522563864383","delegator_shares":"522563864383.000000000000000000","description":{"moniker":"Leap Wallet","identity":"AE36BAA74DC5D397","website":"https://www.leapwallet.io/validator","security_contact":"validator@leapwallet.io","details":"Leap Wallet is a super wallet for Cosmos"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2023-09-29T10:36:48.469856877Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1n68tqcrf348t5qjzz5he4fw7jxvmm843l4wpkc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"pFRMetTn5y4qoRVPUr2Kh1wPk/nmiodV8TgBIeqe4uI="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"decommissioned","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-07-25T01:00:27.444841671Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1nm0rrq86ucezaf8uj35pq9fpwr5r82clzyvtd8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"hOaINb2kWl6B2RMDA1eXVOzrTrMfafdVZPlnHb1ArZk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"5537582537","delegator_shares":"5537582537.000000000000000000","description":{"moniker":"Kraken","identity":"44F2F30E6D6C0265","website":"kraken.com","security_contact":"","details":"Kraken.com Validator"},"unbonding_height":"9937712","unbonding_time":"2022-04-20T19:37:14.074743745Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2020-01-22T08:27:20.214359212Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1nuhls0wyf8slhmuasha5pz0u89jrf9nnugq8ak","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"7eHS9nARXr4gyuuDVxbQC2CDVkEa22ye3uHhcbeLurc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"682740805869","delegator_shares":"682740805869.000000000000000000","description":{"moniker":"Golden Ratio Staking","identity":"1C32EF4035953E8B","website":"https://www.goldenstaking.com","security_contact":"info@goldenstaking.com","details":"Bare Metal Interchain Relayer And Validator. Powered By Most Beautiful Number In The Cosmos!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"333396540.000000000000000000","liquid_shares":"6446418914.000000000000000000"},{"operator_address":"cosmosvaloper1nlfrwx5t3mm3cuqqkvjv6jv24m7s2z5utzfe8s","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"oTsqdRcvZbCfgwow/kHhiurC4w7dSeSK8mUyJaFvfyc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"240397286882","delegator_shares":"240397286882.000000000000000000","description":{"moniker":"CroutonDigital","identity":"47B453B80ECFA342","website":"https://crouton.digital","security_contact":"croutondigital@aol.com","details":"Your everyday crypto partner"},"unbonding_height":"19927094","unbonding_time":"2024-04-30T16:40:33.243758456Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.150000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-29T10:29:57.208091047Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":["615236"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper15r4tc0m6hc7z8drq3dzlrtcs6rq2q9l2nvwher","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"lgJcii0W2QanDlXpb/9gZJAJ3X9l+tqArhYAmNUJ1lw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"286754451624","delegator_shares":"286754451624.000000000000000000","description":{"moniker":"DragonStake","identity":"EA61A46F31742B22","website":"https://dragonstake.io","security_contact":"","details":"Forking the Banks"},"unbonding_height":"12728818","unbonding_time":"2022-11-26T17:11:18.977775388Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-04-05T11:27:12.516208885Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"500000000.000000000000000000","liquid_shares":"245335431.000000000000000000"},{"operator_address":"cosmosvaloper15ytx6mflyrxynjerqlud6w646v6u3qvtjtfane","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Q2/zDsgORU9FIwmezc47skCXTFg7h/0FAvhftirIhS0="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"2488476842","delegator_shares":"2488476842.000000000000000000","description":{"moniker":"securesecrets","identity":"C5C28A947096C28A","website":"https://securesecrets.org","security_contact":"","details":"Focusing Privacy and Transparency"},"unbonding_height":"16621661","unbonding_time":"2023-09-08T11:49:26.570155708Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["118025"],"validator_bond_shares":"300000000.000000000000000000","liquid_shares":"30000.000000000000000000"},{"operator_address":"cosmosvaloper159eexl76jlygrxnfreehl3j9tt70d8wfnn39fw","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"fK/JbSrg68t7vzhuvQwmcn3VVQDd0Izi+XueVKPyKvc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1010475","delegator_shares":"1010662.422781454878536003","description":{"moniker":"fishegg.net","identity":"","website":"http://www.fishegg.net","security_contact":"","details":"welcome to join staking"},"unbonding_height":"5281037","unbonding_time":"2021-03-18T04:17:15.457463279Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper15xl8lrtz65dm7yqtnpntmmv7asl0jqk8xc5jd0","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"S3Y93jS2PQAxNOHMWw4QEfhnRtaF8Oi7MmG1eBdAMKA="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"30186895","delegator_shares":"30186895.000000000000000000","description":{"moniker":"Station8","identity":"0EE0E1ADCAEC1633","website":"station8.zone","security_contact":"info@station8.zone","details":"Professional"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-07-20T18:49:10.983711028Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper15w6ra6m68c63t0sv2hzmkngwr9t88e23r8vtg5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"y93r6Bb+MMcF6jX12yWRKPU6DEjuHQsjPKT4ln86Fa4="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"311353333016","delegator_shares":"311384471028.621984136406092946","description":{"moniker":"w3coins","identity":"63C62007AB5345E3","website":"https://www.w3coins.io","security_contact":"info@w3coins.io","details":"w3coins is a Professional Validator and web3 Venture Capital. Stake Your Cryptocurrency with us to Maximize Your Earnings."},"unbonding_height":"18453819","unbonding_time":"2024-01-16T22:38:37.066162026Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-11-30T23:21:45.380471152Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["216094","261885"],"validator_bond_shares":"507000000.000000000000000000","liquid_shares":"10388797272.692389438157399539"},{"operator_address":"cosmosvaloper150g2n4ypex05nla65j6akz38n9tu4quu8nna3h","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/LS08zoFZS0Yvh6eABJsvNv8Yg9MyNKlnehJolnmtxk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"999900","delegator_shares":"1000000.000000000000000000","description":{"moniker":"regen-validator","identity":"","website":"https://vaasl.io/en/regen-validator","security_contact":"","details":""},"unbonding_height":"5289604","unbonding_time":"2021-03-18T21:15:51.170400186Z","commission":{"commission_rates":{"rate":"0.600000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-07-21T05:18:37.383836032Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper15jlcxs57cku65nrve3hfjlmcr8kaavxcn30mz2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"THTV1cztgV0udBLM644k5pcwX82VwaHRlVt/8k+Cw/4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"11","delegator_shares":"11.001090940456070707","description":{"moniker":"Certify Network","identity":"E7E44347D730FEDB","website":"http://certify.live","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-09-20T00:46:45.136226556Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.700000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2019-05-30T09:40:22.689196211Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper156gqf9837u7d4c4678yt3rl4ls9c5vuursrrzf","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"W459Kbdx+LJQ7dLVASW6sAfdqWqNRSXnvc53r9aOx/o="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"2337447162087","delegator_shares":"2338148525730.589852909953548803","description":{"moniker":"Binance Staking","identity":"","website":"https://binance.com","security_contact":"","details":"Exchange the world"},"unbonding_height":"17501890","unbonding_time":"2023-11-10T13:47:20.841584441Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["100268","156036"],"validator_bond_shares":"10018313.167374734879454495","liquid_shares":"250501443.422965341985441308"},{"operator_address":"cosmosvaloper15urq2dtp9qce4fyc85m6upwm9xul3049e02707","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"lh/p8UTp1kF8+4noOeInUG3PuWpFzk6Mnopj0updt4I="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"4408618880652","delegator_shares":"4408618880652.000000000000000000","description":{"moniker":"Chorus One","identity":"00B79D689B7DC1CE","website":"https://chorus.one/","security_contact":"","details":"Secure Cosmos and shape its future by delegating to Chorus One, a highly secure and stable validator. By delegating, you agree to the terms of service at: https://chorus.one/cosmos/tos"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.075000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.020000000000000000"},"update_time":"2019-08-13T17:43:26.871706216Z"},"min_self_delegation":"10","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"435000000.000000000000000000","liquid_shares":"8991306883.000000000000000000"},{"operator_address":"cosmosvaloper157qezau9xnzypse3vu2vhs7r4ee83fdecew0fz","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"btJt7angZ6bI9bcbiWT1fKN1zED0bm7mEawvNwLEq0U="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"2461608718","delegator_shares":"2461608718.000000000000000000","description":{"moniker":"KuCoin","identity":"5C1C93C4EF2FFE39","website":"https://www.kucoin.com","security_contact":"","details":"KuCoin"},"unbonding_height":"13461298","unbonding_time":"2023-01-20T10:09:44.760648703Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-09-21T13:09:42.406403781Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper157v7tczs40axfgejp2m43kwuzqe0wsy0rv8puv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"0wQ1SJucRxDeAVwCQzFinkm3K0UkOlnkf5Ll+BluDQA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"2156962209347","delegator_shares":"2156962209347.000000000000000000","description":{"moniker":"POSTHUMAN 🧬 StakeDrop","identity":"8A9FC930E1A980D6","website":"https://posthuman.digital","security_contact":"validator@posthuman.digital","details":"PHMN StakeDrop for delegators 🧬 100% slashing protection ⚛️ https://posthuman.digital"},"unbonding_height":"19747485","unbonding_time":"2024-04-18T03:17:19.274457032Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-06-04T09:23:18.197039201Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["537569","573156"],"validator_bond_shares":"811978996.000000000000000000","liquid_shares":"114011455771.000000000000000000"},{"operator_address":"cosmosvaloper14qazscc80zgzx3m0m0aa30ths0p9hg8vdglqrc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"gvvk7fborWsqtB4pseZL+QWab7iJnT0PZYs+0oFa2BA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"702946581366","delegator_shares":"702946581366.000000000000000000","description":{"moniker":"✅ CryptoCrew Validators 🏆 Winner #GameOfChains","identity":"9AE70F9E3EDA8956","website":"https://ccvalidators.com","security_contact":"support@ccvalidators.com","details":"CryptoCrew Validators | Multichain IBC relayer | Bare Metal Alliance | 🏆 1st place Game Of Chains 2022. REstake enabled https://restake.app. Based in Europe. https://t.me/cryptocrew_validators"},"unbonding_height":"8642482","unbonding_time":"2021-12-31T01:42:20.460087238Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2023-02-05T13:42:30.536482397Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"12205875670.000000000000000000","liquid_shares":"252271943164.000000000000000000"},{"operator_address":"cosmosvaloper14r2vx8zpwzwv53yq3ngh8llf5sdmk430fx9dsd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"hSO4acQNYteX7lqzzUc9tYhauYZRMvXZHoPKeOLYavQ="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":" ","identity":" ","website":" ","security_contact":" ","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-10-29T08:50:28.948409267Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper14r7kzdf6gfh3t9v2c7efdp2fn5apsl93qga2ed","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"S5+WdVTo0qG0C9o/cLQWerKgDGVSa7IWpjqcZsey99I="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"30000","delegator_shares":"30000.000000000000000000","description":{"moniker":"Shutting down, redelegate","identity":"j","website":"https://google.com","security_contact":"","details":"Shutting down"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-11-14T16:09:06.681196071Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1485u80fdxjan4sd3esrvyw6cyurpvddvzuh48y","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"zPplH31DiZvj4cQnZ//YfNnahLclGk8S5GXeYLOna6s="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"986092745","delegator_shares":"986191324.421114976068674141","description":{"moniker":"AIR DROP STATION","identity":"29639AC899E40A48","website":"","security_contact":"","details":"AIR DROP STATION"},"unbonding_height":"16259491","unbonding_time":"2023-08-13T15:56:52.077038834Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-04-01T08:39:52.399086863Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["98243","99256"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.925695434256699253"},{"operator_address":"cosmosvaloper142w8q2l0gxsfna72gq8t7e4ee4ul37e9htgtxx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"gNYvCgprVVyF4n6bsrRX2IHsfE8AgJIbEfVIWq4zu3I="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"20605436","delegator_shares":"20605436.000000000000000000","description":{"moniker":"NEOPLY","identity":"5F91113ACF4DCD7E","website":"https://neoply.io","security_contact":"","details":"NEOPLY is a blockchain specialized company that stably operates various nodes."},"unbonding_height":"13513101","unbonding_time":"2023-01-24T05:27:36.528508442Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2020-12-01T02:35:15.231662304Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper14ts0j42qkpr43a3tgxr7zz6l6zdf7hde8va8km","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"oQDXUoY9ZUaXQgllMo7ggvOhdPWzcOUiuX2A6GxZNLI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"20000","delegator_shares":"20000.000000000000000000","description":{"moniker":"Inactive","identity":"D540D0234B3AE1B9","website":"https://example.com","security_contact":"ChemicalBrosValidator@protonmail.com","details":"Inactive"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-22T21:13:43.199211834Z"},"min_self_delegation":"5","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper14tjyfyt0l3l0hvzur932k4qt4zuxdqy0yw66ly","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"FwAtxfjKYuzB2ffrgMvReXzlxgGtbgKP6+H0wwhF0mE="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1","delegator_shares":"1.000000000000000000","description":{"moniker":"Chucks validator","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-09-20T19:26:14.093082510Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1402ggxz5u6vm29sqztwqq8vxs3ke6dmwl2z5dk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"bUFytAgmMlqe06nGroLeB9C+ObtOcuk8Reyq0cXsjHA="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"17581005","delegator_shares":"17584468.787913111720189950","description":{"moniker":"Cosmoon","identity":"8935A6F323FA0881","website":"https://cosmoon.org/","security_contact":"","details":" Professional Stake Rewards Service "},"unbonding_height":"3612462","unbonding_time":"2020-10-27T12:25:49.654990295Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.970187661690398353"},{"operator_address":"cosmosvaloper140e7u946a2nqqkvcnjpjm83d0ynsqem8dnp684","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"o+qPFJ66zagsptOWGsSpr7viNdw6anGFe2Mg8qO3yhs="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"129362781533","delegator_shares":"129362781533.000000000000000000","description":{"moniker":"Coinage x DAIC","identity":"C92C6965D89F07A3","website":"https://daic.capital","security_contact":"office@daic.capital","details":"The official validator node from Coinage (Coinage.Media) run by DAIC (https://daic.capital/telegram)"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1001100000.000000000000000000","liquid_shares":"5294801249.000000000000000000"},{"operator_address":"cosmosvaloper140l6y2gp3gxvay6qtn70re7z2s0gn57zfd832j","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"FxSjsSvWPbw5NQczsh0+QRWqYTVauFJd/MateonbfO8="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"881221969028","delegator_shares":"881310092579.258961443723593897","description":{"moniker":" Lavender.Five Nodes 🐝","identity":"F87ADDB700C0CC94","website":"https://www.lavenderfive.com/","security_contact":"hello@lavenderfive.com","details":"100% soft slash protected. We strive to make the cosmos a more holistically wholesome place. Come say Hi! https://twitter.com/lavender_five https://t.me/LavenderFive https://discord.gg/RsSvF8jjrz"},"unbonding_height":"10052236","unbonding_time":"2022-04-30T07:56:22.844369835Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2022-01-18T22:53:01.038869749Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"2514111797.406977316752067519","liquid_shares":"203487485052.162613329125349796"},{"operator_address":"cosmosvaloper14srf00pdyykxscu8dp0csdluclvkkwltnn4c4r","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"kgMWmXC+WJ+u6bRXdIA8PONolXFPXnDdvmaYZ695sws="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"“HelionCosmosValidator”","identity":"","website":"","security_contact":"","details":"Redundant hardware in data center. Stake with us"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-09-01T13:14:18.780971407Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper143g8ag20zg42z7h2j3dszw52ac6alyv876p2q8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"oBlhJuxM0eHe3KJ7wilC12ru9Hm9xDoCfjikNbn/xSg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1019900","delegator_shares":"1020000.990197049212793345","description":{"moniker":"WALLAKIA","identity":"60BF61C920C67F62","website":"http://wallakia.com","security_contact":"","details":""},"unbonding_height":"5291113","unbonding_time":"2021-03-19T00:15:13.852871911Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.770000000000000000","max_change_rate":"0.070000000000000000"},"update_time":"2019-05-30T09:35:15.886223733Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.990197049212793345"},{"operator_address":"cosmosvaloper14jlpmqquh0gste6nzf4dn43kc8h50l6fmx6dfs","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"muR30ol1kYhpkPyd7rNLE3wOaVMwG7QS9aKblUQaNOE="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"4705238837","delegator_shares":"4953377377.307301689590671976","description":{"moniker":"Liqee","identity":"A0E09B90826D4F7B","website":"https://liqee.io","security_contact":"","details":"Liqee (liqee.io) is the first and largest liquid staking assets lending market, also provides PoS staking services and actively participate in the ecosystem governance."},"unbonding_height":"12842606","unbonding_time":"2022-12-05T12:27:04.781436859Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"21054.733728368321093925"},{"operator_address":"cosmosvaloper14kn0kk33szpwus9nh8n87fjel8djx0y070ymmj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2k346W3w8NFAQh21j1hBp+Mvur+ZhHFuEQk8DEOlN+c="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1075241927494","delegator_shares":"1075241927494.000000000000000000","description":{"moniker":"Forbole","identity":"2861F5EE06627224","website":"https://forbole.com","security_contact":"","details":"As a prominent validator and contributor in Cosmos since 2017, Forbole is devoted to build a stronger Cosmos ecosystem. We are award winners in Game of Stakes and HackAtom. Please join our [community](https://t.me/forbole) or visit [our website](https://www.forbole.com/)."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.095000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-11-10T16:52:29.417872059Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"910000000.000000000000000000","liquid_shares":"100164779621.000000000000000000"},{"operator_address":"cosmosvaloper14k4pzckkre6uxxyd2lnhnpp8sngys9m6hl6ml7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5f4G3k6oAqwpegXoLy02ooGPK0qKX5Xg6Yz9ch+cuqg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"101945607890","delegator_shares":"101945607890.000000000000000000","description":{"moniker":"\u003cdecommissioned\u003e","identity":"\u003cdecommissioned\u003e","website":"\u003cdecommissioned\u003e","security_contact":"\u003cdecommissioned\u003e","details":"\u003cdecommissioned\u003e"},"unbonding_height":"18281226","unbonding_time":"2024-01-04T20:00:50.023368389Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-04-22T04:57:29.717811274Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["237731"],"validator_bond_shares":"10012573.000000000000000000","liquid_shares":"60028.000000000000000000"},{"operator_address":"cosmosvaloper146kwpzhmleafmhtaxulfptyhnvwxzlvm87hwnm","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"TjzJhR+Eeze5QWaeHlWDi8KmmB/d9/G1j9xOSK0aOVk="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"185939569666","delegator_shares":"185939569666.000000000000000000","description":{"moniker":"🌐 KysenPool Sky ☁️ ","identity":"2474A8FCC4426BC5","website":"https://www.kysenpool.io","security_contact":"","details":"Unlock the Power of Staking with Our Trusted Blockchain Infrastructure Services"},"unbonding_height":"0","unbonding_time":"2019-09-06T03:47:00.801583378Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-04-10T01:59:57.667786684Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"439380865.000000000000000000","liquid_shares":"10370766778.000000000000000000"},{"operator_address":"cosmosvaloper14upntdx8lf0f49t987mj99zksxnluanvu6x4lu","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"0txFmbl4WHKIGOFfSLNLEc6kHZIpx58VNRhhU+fNon8="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"170959840804","delegator_shares":"170959840804.000000000000000000","description":{"moniker":"Republic Crypto","identity":"88931283C8B8D7B8","website":"https://republiccrypto.com/services/infrastructure","security_contact":"","details":"Republic Runtime provides infrastructure for institutional staking on networks like Avalanche, Aptos, and Sui, with tailored services to meet your needs."},"unbonding_height":"12135671","unbonding_time":"2022-10-11T23:49:51.692181074Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-08-03T19:19:07.856645813Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"699998000.000000000000000000","liquid_shares":"273587987.000000000000000000"},{"operator_address":"cosmosvaloper14az9dmutwtz4vuycvae8csm4wwwtm0aumtlppe","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"oVap7iG9La5g76ufP2SaLz55rzlTSV833KRAqp+NOpU="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"479429089","delegator_shares":"479477032.646218522238983910","description":{"moniker":"F4RM","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"3871512","unbonding_time":"2020-11-18T10:21:22.985589496Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-10-11T18:00:13.787070196Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.000036239322263212"},{"operator_address":"cosmosvaloper14l0fp639yudfl46zauvv8rkzjgd4u0zk2aseys","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"9KA7fKlALPdKPb7SM4UGlpnbSU4U9U1A4c3u8V2KdTs="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"93672899052","delegator_shares":"93729122225.041016257170640178","description":{"moniker":"Atomic power node","identity":"","website":"","security_contact":"atomicpowernode@gmail.com","details":"Rebranded to Atomic Power Node. We provide the best in class validator service to support Cosmos chain. Reliability first for the chain and stakers."},"unbonding_height":"20564028","unbonding_time":"2024-06-14T08:28:12.680759788Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2023-11-08T01:22:17.436954392Z"},"min_self_delegation":"5000","unbonding_on_hold_ref_count":"0","unbonding_ids":["77008","202301","252075","379053","387152","624915","643253","644746","646729","652437","666622","677654","678779","680191","680569","684966","687784","688084","695184","695960","703904","706591","707750"],"validator_bond_shares":"1000600.220350705724456143","liquid_shares":"36105.061909225637340535"},{"operator_address":"cosmosvaloper14lultfckehtszvzw4ehu0apvsr77afvyju5zzy","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"C+VWc34ZF6n/QoIAXo4191OwKxQWpbFnrGKCqcNbe1E="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"8442020655159","delegator_shares":"8442020655159.000000000000000000","description":{"moniker":"DokiaCapital","identity":"25422F4ADF3F6765","website":"https://staking.dokia.cloud","security_contact":"","details":"Downtime is not an option for Dokia Capital. We operate an enterprise-grade infrastructure that is robust and secure."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"0.150000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"490000000.000000000000000000","liquid_shares":"255376215.000000000000000000"},{"operator_address":"cosmosvaloper1kqld7f3tu3ha5ht3qv2rq9ac9683d3xf356rc9","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"wAWy/2XYrTWSVXxBeeCiXP/z78u3hgtNvw/HdKHgpgc="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"589731467","delegator_shares":"589731467.000000000000000000","description":{"moniker":"airdropdao","identity":"","website":"http://airdropdao.zone","security_contact":"","details":"The airdropdao team is building one product. Delegate your tokens and Wait for the airdrop announcement!"},"unbonding_height":"11666471","unbonding_time":"2022-09-05T12:39:48.093548965Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1kzzxf55puvdncekx8ln2jfzrklm72qn46uez7l","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+96IM0/7EAgNq8/btO73jwmOK8gL2k0rlA8bC9l+IXw="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"Leonoor's Cryptoman","identity":"216E0EE1BA80B5F8","website":"https://t.me/LC_Announcements","security_contact":"","details":"Here to serve the Cosmoverse with validating services and community support. Check the Telegram channel on which chains we can be found and which ones are upcoming!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.020000000000000000"},"update_time":"2022-10-25T06:13:13.707244643Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1kyfce0nvluyhgfsdzz8hwrsf5336gsc95pyy4u","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5jmurYd0trU/LO3bml9mblRfCGhR8j4TjfYK2ZsjouY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"404023559675","delegator_shares":"404144790445.029725669993614587","description":{"moniker":"StakeSeeker by BTCS","identity":"","website":"https://stakeseeker.com","security_contact":"","details":"StakeSeeker by BTCS (Nasdaq:BTCS) is a comprehensive crypto dashboard for users to earn crypto rewards by staking through its non-custodial Stake Hub and evaluate their crypto portfolios across exchanges and wallets in a single analytics platform."},"unbonding_height":"20703795","unbonding_time":"2024-06-24T04:31:45.398760881Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["59316","98196","116709","151157","573149","584748","591941","597602","605546","611285","617535","713878","723813"],"validator_bond_shares":"10016682.235089002824523100","liquid_shares":"245409411.091774244947380559"},{"operator_address":"cosmosvaloper1ky5k0305lm4t4xa72a2g5ahfdzqxnwx358agra","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ypasN9tHlMcm2v9ylFco0CGS4aQbAc21Fy46xpcxSlU="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1677273468","delegator_shares":"1677441164.968066712136856038","description":{"moniker":"Valnodes - Carbon Neutral Staking","identity":"7ACD3320CCADD897","website":"https://www.valnodes.com","security_contact":"","details":"Carbon-Neutral | Transparent | Smart validator backed by cutting edge innovations in active-sync, one-sign to ensure high uptime. Reach us at t.me/ValNodes."},"unbonding_height":"10685716","unbonding_time":"2022-06-20T07:31:49.535305395Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20001.999803723877382890"},{"operator_address":"cosmosvaloper1k9aw4y6ff0tncmmuxp86dk0fxy5s57a3f8frky","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"OveQX6ia95RPtmD1mfGD12A9ewxrB13HTtCoAcWIN6M="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"110000","delegator_shares":"110000.000000000000000000","description":{"moniker":"Zenscape","identity":"F10E3CDCBC4EA7AA","website":"https://zenscape.one","security_contact":"","details":"Enterprise-grade level infrastructure for DeFi degens to stake their crypto assets and earn yields on it. Eat, Sleep, Stake, Repeat!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-05-25T14:09:56.244646664Z"},"min_self_delegation":"100000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1k9a0cs97vul8w2vwknlfmpez6prv8klv03lv3d","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"SgJAVNasC6tDdkjH6XM9LbbTW/S6y1MgJsqq/1Y8Lhk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2624461887","delegator_shares":"2762867292.344319849886882581","description":{"moniker":"Stake Capital","identity":"1417DBC57CB3EB69","website":"https://stake.capital","security_contact":"","details":"\"Trustless Digital Asset Management\", Twitter: @StakeCapital, operated by @bneiluj @leopoldjoy"},"unbonding_height":"7081693","unbonding_time":"2021-08-17T12:10:58.891768055Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.030000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"21054.733589616192813752"},{"operator_address":"cosmosvaloper1kgquh04ffqvadekf6e47070gskm0s0h28cl7ht","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"F7V3xpdLVnXbqrVH2OHWBM44aADciLQOYl588GdsmK8="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"43449753957","delegator_shares":"43615184524.133078226721372956","description":{"moniker":"tokenweb","identity":"AD74AC2CC498CD7A","website":"https://tokenweb.io","security_contact":"","details":"put your tokens to work"},"unbonding_height":"10445082","unbonding_time":"2022-06-01T05:15:35.058129892Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-10-08T16:23:40.050549306Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10038.073994920894390264"},{"operator_address":"cosmosvaloper1kg99k8wd67r0ffxwavgnxup7yk46rvttxc53j7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"EKss2Acm8AIdxoaqgMPcf2mBCa6Kmu/+2I0Z+x+goxI="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1735596917","delegator_shares":"1735770388.312840933119966600","description":{"moniker":"⊤⊥","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"12495575","unbonding_time":"2022-11-08T09:40:24.357158671Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20001.999874186084483902"},{"operator_address":"cosmosvaloper1kgddca7qj96z0qcxr2c45z73cfl0c75p7f3s2e","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"6Sn2gbsgiFAkZY5mbe/YdBtO9SLV+AZgRFg7cLqrd04="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"191988414938","delegator_shares":"192007615495.679970387655608417","description":{"moniker":"ChainLayer","identity":"AD3CDBC91802F94A","website":"https://www.chainlayer.io","security_contact":"","details":"Secure and reliable validator. TG: https://t.me/chainlayer"},"unbonding_height":"7776665","unbonding_time":"2021-10-15T15:14:53.422138349Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-04-01T18:02:13.514368678Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1729890324.456087718632653658","liquid_shares":"6734419921.669618997484293534"},{"operator_address":"cosmosvaloper1k2d9ed9vgfuk2m58a2d80q9u6qljkh4vfaqjfq","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"t9l8HjwxL8WVwanxbZTOv7YNeUIp5EnMwg2xaVgi8I0="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"2435160438268","delegator_shares":"2435160438268.000000000000000000","description":{"moniker":"Stakecito","identity":"D16E26E5C8154E17","website":"","security_contact":"","details":"Securing \u0026 Decentralizing PoS Networks."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-04-30T17:56:30.783593817Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"715000000.000000000000000000","liquid_shares":"11257661670.000000000000000000"},{"operator_address":"cosmosvaloper1ktecz4dr56j9tsfh7nwg8s9suvhfu70qykhu5s","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"rnjPZGsF0MMP/aHilBUaEpimiHb5YBxfNZVGqLOW2ZQ="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"426559627","delegator_shares":"426687586.840233457056862243","description":{"moniker":"Dawns.world","identity":"AA70E5B206F952A3","website":"https://dawns.world","security_contact":"","details":"To discover token's intrinsic real value and enhance its liquidity"},"unbonding_height":"11296505","unbonding_time":"2022-08-07T08:57:57.151143551Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-03-19T09:01:31.753304729Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20006.000479995211602849"},{"operator_address":"cosmosvaloper1kwl5p69gc2cwthkw8cghyf6pzkc73esc3ldzh9","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"gYxeUFf63MQuPhJMt3/SA8QZLhJ1pLZdW75k5FOOEI8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"L0vd.com","identity":"421C6FA7FA848282","website":"https://l0vd.com","security_contact":"","details":"Professional validating and staking services provider. More than 50 networks contributed. With L0ve."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-08-30T19:36:45.791206831Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1kj0h4kn4z5xvedu2nd9c4a9a559wvpuvu0h6qn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ZihmjCxvIZinDz1hTU69024uNIKWyOkZVE2Q5Sbwl58="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1284417997","delegator_shares":"1284674897.815273192495742152","description":{"moniker":"Cryptium Labs","identity":"5A309B5CA189D8B3","website":"https://cryptium.ch","security_contact":"","details":"Secure and available validation from the Swiss Alps"},"unbonding_height":"5571935","unbonding_time":"2021-04-11T09:02:05.501837387Z","commission":{"commission_rates":{"rate":"0.110000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-27T11:16:35.284063151Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20004.000532128087813191"},{"operator_address":"cosmosvaloper1kn3wugetjuy4zetlq6wadchfhvu3x740ae6z6x","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"weH0gbAWGno4QnZ52bH53W9UNxR1rxyvWfLOIsRKrx8="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"49582427947","delegator_shares":"49597305630.094253157452833527","description":{"moniker":"Huobi","identity":"B094077DF80DB836","website":"https://www.huobi.com/","security_contact":"","details":"As a world-leading company in the blockchain industry, Huobi Group was founded in 2013 with a mission to make breakthroughs in core blockchain technology and the integration of blockchain technology to other industries."},"unbonding_height":"20719836","unbonding_time":"2024-06-25T07:29:46.634115932Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-12-12T08:13:32.362289364Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"1","unbonding_ids":["123679","558020","624914","725227"],"validator_bond_shares":"5000000.000000000000000000","liquid_shares":"245452844.980742524531905920"},{"operator_address":"cosmosvaloper1k447djp2qrfk8pl44vd02qdlld2asjeepjxsep","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"SIxW/CFSqgOpwpoiGnCCfLKTA+0FB1dsluVtWKTEr6Y="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2456329","delegator_shares":"2456329.000000000000000000","description":{"moniker":"Neptune Stake (TSXV:DASH)","identity":"12A956E65CB71882","website":"https://neptunedash.com","security_contact":"","details":"Neptune Dash (TSXV:DASH) is a public company listed on the Toronto Stock Exchange that works with institutional investors looking for regulated access to cryptocurrency staking. Our validator runs on our own hardware and HSM in a top Canadian datacenter."},"unbonding_height":"0","unbonding_time":"2019-11-25T20:35:43.321200108Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-30T14:31:16.887586507Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1k4mtqv0y964set0ayr8e09r54mpqs4xfw0ysew","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ZZrsMjUnACNTocjqfdaT/GrjcAdVQYVAyj1Rgm/5y14="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"6988081","delegator_shares":"6993672.856790303576320971","description":{"moniker":"DLINODES.COM","identity":"9DB6748C01218F56","website":"“https://dlinodes.com”","security_contact":"","details":"“DLI"},"unbonding_height":"7406963","unbonding_time":"2021-09-13T22:23:24.324613127Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2020-09-15T17:54:45.070606259Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10008.001991949297062127"},{"operator_address":"cosmosvaloper1khnuwdpnyv6utvqx3plt3x6makh3rc9tv0wvv9","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QRBrvDNfyXBcbWCdi+RCg93Fv4j3e1akmzmwQGM+A48="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1009908","delegator_shares":"1010001.272498262950400091","description":{"moniker":"cosmos-sta","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"7639650","unbonding_time":"2021-10-03T17:05:44.945827575Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-10-22T03:30:17.816727082Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.923574209363134068"},{"operator_address":"cosmosvaloper1kculeejzmnac8lezfpg9ulkj5gfy5tuf9ez29w","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"W87GiNEZpdwy1cJDWri8qAiXDa5tzA1JVZu7dmMch14="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"3052311","delegator_shares":"3052311.000000000000000000","description":{"moniker":"ATOMI","identity":"82236AA2E979D3D9","website":"https://atomii.modoo.at","security_contact":"","details":"Ever Jailed Validator - ATOMI"},"unbonding_height":"0","unbonding_time":"2019-06-20T01:45:18.519167391Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.500000000000000000"},"update_time":"2019-05-02T07:33:17.655908831Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1ke26kzj9qsvp8qy39dzrhf0rvhtd807c456kmu","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"K91IvGzcaagCC2X64oVJ7XDu7+1hH/w3qVvpfscqDnY="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"120001","delegator_shares":"120001.000000000000000000","description":{"moniker":"Mr.Robot🤖️","identity":"","website":"https://github.com/Manisso/fsociety","security_contact":"darkarmy@fsociety.com","details":"A bug is never just a mistake. It represents something bigger. An error of thinking that makes you who you are."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-01-27T02:03:31.246876639Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1keltez56g3zm9w8wr8gcmmulze48g2q3usuw8c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"eOd8T0i/EIn3fw0dSL0/FOOS5vPLSEFp4Ncj43wn7uQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"37448302832","delegator_shares":"37448302832.000000000000000000","description":{"moniker":"DO NOT DELEGATE - Defi Wallet","identity":"6FB5F568506104F5","website":"https://crypto.com/en/defi/wallet/","security_contact":"","details":"Crypto.com DeFi Wallet is the best crypto wallet to store, earn and grow your ATOM."},"unbonding_height":"17660330","unbonding_time":"2023-11-21T22:22:26.337226522Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.300000000000000000"},"update_time":"2023-10-31T21:13:17.522752243Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["166723"],"validator_bond_shares":"10014616.000000000000000000","liquid_shares":"35909.000000000000000000"},{"operator_address":"cosmosvaloper1k6e7l0lz497l8njqjxpd3g4wlkdfwe93uqf03k","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+vm6bfYlarAQPbuIOTacPcpRn30QgyDALavlFlX2I44="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"784364996457","delegator_shares":"784364996457.000000000000000000","description":{"moniker":"Trust Nodes","identity":"","website":"https://trustwallet.com","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-08-09T15:27:57.673554089Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1kmvhdc3p57q4pwsn2txaluvuxfugeg39zqj783","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"JfbvbIYQWb05EyzTq3g8pZqUGlCN8aIggUy4Ybczbks="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1020811","delegator_shares":"1021115.090118267167230429","description":{"moniker":"DUAL.systems","identity":"86AFEC0A2EB34700","website":"https://cosmos.dual.systems","security_contact":"io@dual.systems","details":"We maintain stable growth."},"unbonding_height":"7690137","unbonding_time":"2021-10-08T01:46:15.819940525Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10002.978907146055119218"},{"operator_address":"cosmosvaloper1hpgj9ncum96xp4llwkgl5a9as0nyzmxnp7fxgv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ei+M+1e53oM2NPD0wyiHbhOHWd9Pwxnrvgx/SFuHPlo="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"3033112","delegator_shares":"3033112.000000000000000000","description":{"moniker":"Flipside","identity":"84D5F4CF21FBF123","website":"","security_contact":"“governance@flipsidecrypto.com”","details":"Flipside Crypto provides access to the most comprehensive blockchain data sets in all of crypto."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-26T20:26:01.621957947Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1hxxzr9kaekelt84u4zus5mkxpwesrfxylc6gve","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"E0d5dUA4LSkWdUHrphTvDHV0OhJknCmJ0lXG6vhINVQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"20000","delegator_shares":"20000.000000000000000000","description":{"moniker":"Test111","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1hg4wpfzr70d9vjzlwfeel555f6plwj2jqpx9sh","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+EXt88h70yjmtsY5teVrGaXmVezmvUuoU696wsRCpPk="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"🐔 The Chicken Coop 🦝 | NFT Airdrops","identity":"EA70527EE3B8AE8D","website":"https://linktr.ee/jasonsopko","security_contact":"info@sopko.net","details":"This server is running on a homestead in rural Western Pennsylvania. Our own bare metal maintained by 27 years of professional IT experience. If you would like to support true decentralization as well as our family, please stake with us. Thank you!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1hf8a9yg6yswtj8lgchlr76mcenj2nd7a0e6z0z","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QZUJkIm8z3dwj/SjeQZcGUnQaRoq0BKP56u6eYE98cY="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"674953","delegator_shares":"675017.911261659404192961","description":{"moniker":"Bumblebee__🐝","identity":"66A2D7C46D27DFC6","website":"http://dahuangfeng.online","security_contact":"","details":"Cosmos to everything!"},"unbonding_height":"703451","unbonding_time":"2020-02-28T06:48:27.995874605Z","commission":{"commission_rates":{"rate":"0.130000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-01-05T06:47:11.817306372Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.961715284759149051"},{"operator_address":"cosmosvaloper1hvsdf03tl6w5pnfvfv5g8uphjd4wfw2h4gvnl7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"p/UWIafZcXxHEVOnT67ih02jGaT4RbuDcnDQm7Y7VB0="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"138425113","delegator_shares":"138452793.958856053068476692","description":{"moniker":"chain-node","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"11888736","unbonding_time":"2022-09-22T22:06:36.686395554Z","commission":{"commission_rates":{"rate":"0.500000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-06T06:19:39.981914132Z"},"min_self_delegation":"2","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20003.999976092282423710"},{"operator_address":"cosmosvaloper1hvhyunq7qvykzvrcnhjj4xnkcla58xus6pzml7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"I5O+WOLXX9WxbHgAq4Tc+HEFOQ1IQbX9lnkRbgKwkzI="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1190000","delegator_shares":"1190000.000000000000000000","description":{"moniker":"Architect Nodes","identity":"AB730C3A241BB718","website":"https://architectnodes.com","security_contact":"architectnodes@gmail.com","details":"Bare Metal validation with hsm security"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-26T20:59:39.160736661Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1hdrlqvyjfy5sdrseecjrutyws9khtxxaux62l7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"sgYnzrP98JYHQrEiJxYHMLRHyUQcB05HcTtO/Xjbkfc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"306190945967","delegator_shares":"306252187742.484594053449462249","description":{"moniker":"SmartNodes","identity":"D372724899D1EDC8","website":"https://smartnodes.one","security_contact":"","details":"Earn Rewards with Crypto Staking \u0026 Node Deployment"},"unbonding_height":"20650557","unbonding_time":"2024-06-20T10:45:37.557049505Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-28T18:28:01.757628721Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["109928","127510","573154","583986","680558","695941","711475","718653"],"validator_bond_shares":"39025880.196128225374631125","liquid_shares":"245417107.323424889692756864"},{"operator_address":"cosmosvaloper1hw236j2f6ny4kc5r0dsy53avvxj25hpfaw2pl8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"4+zlBlPKUACAAh+zeA3dYKzY+SyiqjXKLUnB4oL4rgE="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"Aquanode","identity":"","website":"https://aquanow.io","security_contact":"","details":"Aquanow is operating validator nodes in support of emerging decentralized finance projects."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-11-18T01:37:00.954954689Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1hwu4wp5y47d2ntm3std5xeygqnqua3ekcpzp0v","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"oqdHK1PS+7HHPZTxfUGCW+eOGXZhOLS5DruoTUPZnAo="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"4009600","delegator_shares":"4010001.000100010001000100","description":{"moniker":"FishKing","identity":"","website":"","security_contact":"","details":"Let's decentralized our world. A honest third party validator from Taiwan"},"unbonding_height":"29005","unbonding_time":"2020-01-04T00:50:54.782079710Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-17T18:45:28.583362383Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.000100010001000100"},{"operator_address":"cosmosvaloper1hjct6q7npsspsg3dgvzk3sdf89spmlpfdn6m9d","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"n9bW9hmvwSwm/AnJtDwZNGA+2RSoQsfoMFsc2Rrb0vY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1783205384442","delegator_shares":"1783205384442.000000000000000000","description":{"moniker":"Figment","identity":"E5F274B870BDA01D","website":"https://figment.io","security_contact":"","details":"Makers of Hubble and Canada’s largest Cosmos validator, Figment is the easiest and most secure way to stake your Atoms."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-12-06T12:17:54.693866931Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"495000000.000000000000000000","liquid_shares":"248874732.000000000000000000"},{"operator_address":"cosmosvaloper1hjadhj9nqzpye2vkmkz4thahhd0z8dh3udhq74","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"YAQR/TLMuDMgOTS/KcMdU80y2JAze7DX/GELq9uqdEM="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"799286873432","delegator_shares":"799686629886.118143800448909638","description":{"moniker":"Atomic Nodes","identity":"E73AFD8985423B14","website":"https://atomicwallet.io/","security_contact":"","details":"Atomic Wallet is a decentralized non custodial app to manage, exchange and stake over 300 blockchains and tokens. We have over 1,000,000 users across various devices and support entire blockchain ecosystem since 2017"},"unbonding_height":"20889154","unbonding_time":"2024-07-07T10:49:14.681136547Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-11-08T08:52:40.790485835Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"6","unbonding_ids":["43739","76660","98197","102362","571750","582758","590631","596420","606542","612571","618005","623556","627903","634538","637610","641676","646058","649770","654759","679707","684301","688057","691681","695175","698382","703771","707341","710984","716309","718393","721397","724414","729532","734877","737798","742238","745957"],"validator_bond_shares":"10003000.546915900272030392","liquid_shares":"252428833.823909858057721131"},{"operator_address":"cosmosvaloper1hj795mnfrvesljfw7kev938tagumezammnasa3","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"zGjXIMV1WDjipDZ0anbcqfeQjbQxkuScvn+N4i1l2Og="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010100","delegator_shares":"1010100.000000000000000000","description":{"moniker":"infstones","identity":"","website":"https://infstones.io","security_contact":"","details":"Fueling Blockchain Beyond Infinity!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-01-25T17:44:41.921060639Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1hkqejlyrj9h8knms9hwvrnp9xhqvjqlseh06vq","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"n9Mi6q5iU4aG0C24i0Ne4Dpd2lenw/4vjs1moQsciLw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"204142595658","delegator_shares":"204142595658.000000000000000000","description":{"moniker":"cosmosrescue","identity":"5489ADE7B1B91C65","website":"https://cosmosrescue.com","security_contact":"contact@cosmosrescue.com","details":"👾 Securing the Cosmos! Contributing to the community with Cosmobot, providing tools, public infrastructure, relaying and recovering assets for scam victims."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-09-19T10:19:34.139823073Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"9658539739.000000000000000000","liquid_shares":"259228564.000000000000000000"},{"operator_address":"cosmosvaloper1hmd535f69t3x262m6s9wc6jd0dmel2zevhyuhm","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"IP8ovHc8UqvtfE7NxHLk4Phf4RLsikwOgobyD+e6gpA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"5342395926495","delegator_shares":"5342395926495.000000000000000000","description":{"moniker":"PRYZM | StakeDrop","identity":"3CE640138108BAAE","website":"pryzm.zone","security_contact":"hello@pryzm.zone","details":""},"unbonding_height":"16235008","unbonding_time":"2023-08-11T22:10:02.233956590Z","commission":{"commission_rates":{"rate":"0.075000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-02-05T13:50:50.257756601Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["98198"],"validator_bond_shares":"200000030.000000000000000000","liquid_shares":"4194249343.000000000000000000"},{"operator_address":"cosmosvaloper1ha8d55747h8hsaluvz8ld88n24nfaw68rx4x92","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"sYJlDcV7KWW+oBEsZzCx2RFrki7q1IlKpqRRoup3/jo="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"315048523","delegator_shares":"315048523.000000000000000000","description":{"moniker":"Lightning Capital - Decommissioning May 2 - Please Unbond","identity":"","website":"lightning.capital","security_contact":"","details":""},"unbonding_height":"14838648","unbonding_time":"2023-05-02T03:39:18.478234491Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["22685"],"validator_bond_shares":"1000.000000000000000000","liquid_shares":"30000.000000000000000000"},{"operator_address":"cosmosvaloper1hlwku8r5h34zayle405tlesvrg5svu7ugkld20","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"v7PufXiYaQ5yyHipRBITD10ofqFxzGjC34gYeJQH4Yo="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1091233738","delegator_shares":"1091233738.000000000000000000","description":{"moniker":"The Node will soon cease operating","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"15977159","unbonding_time":"2023-07-24T10:02:41.277360543Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"10000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["379","833","19493","20583","84152"],"validator_bond_shares":"1000.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1cql9ska0xl2rkg6gcv0np4333gn6fygs55asrs","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"K9Sxg6Dc+9JR161k2R/yCoGeIQcenTp1OzCcEZFPo14="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"73857","delegator_shares":"73863.314932683112371680","description":{"moniker":"Atom Sandler","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"10001","unbonding_time":"2020-01-02T11:58:18.459331455Z","commission":{"commission_rates":{"rate":"0.250000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.990431743272364016"},{"operator_address":"cosmosvaloper1cz6q5nys0tgupq2mt99amsltepglxqgwfs6fum","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ZD/VXTYw4lSxVoYYtGc88DapOVbhkarLjhh2TfGv3js="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"45739023","delegator_shares":"45739023.000000000000000000","description":{"moniker":"melange","identity":"D486595D5EB8078C","website":"https://melangestaking.com","security_contact":"","details":""},"unbonding_height":"4688285","unbonding_time":"2021-01-26T23:51:18.589800623Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1crqm3598z6qmyn2kkcl9dz7uqs4qdqnr6s8jdn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"W9ITG4nnL9YkFziREMpzc1jBOLfmdiNmhbBkumYmCO8="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"473319623081","delegator_shares":"473366957968.172034358031936672","description":{"moniker":"Coinbase","identity":"E2A5772A111FD119","website":"https://coinbase.com/staking","security_contact":"security@bisontrails.co","details":"Coinbase maintains world-class, enterprise-grade staking infrastructure across multiple networks with zero slashing events and a 99% uptime guarantee."},"unbonding_height":"6551262","unbonding_time":"2021-07-03T02:13:18.237325708Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-11T14:45:47.349948151Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"10015437.507291040447552383","liquid_shares":"245359967.236909025847908256"},{"operator_address":"cosmosvaloper1crf28v52ptkygcw07kr79rw8dme7v2m2sy0p0p","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"8+yH6NjrYu/dK6H8wp6C3sL91ylWOKJjYr0rUBl6yJ0="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"14344","delegator_shares":"14344.000000000000000000","description":{"moniker":"Staker Space","identity":"59850BC3A3C5F039","website":"https://staker.space","security_contact":"","details":"Validator in Space!"},"unbonding_height":"0","unbonding_time":"2019-05-26T11:54:36.112417508Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-12T17:43:53.087549704Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1cyvspwjvnedc9s5j759zezufrwf7esfpe48agy","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"cxJl59h2tD+7CLpqt8MX5zTgPt2qE9hHqLWwv5+LTg4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1009900","delegator_shares":"1010001.000100010001000100","description":{"moniker":"terraformstaging","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"7649125","unbonding_time":"2021-10-04T12:41:58.088310359Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.120000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-19T03:49:52.478444556Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.000100010001000100"},{"operator_address":"cosmosvaloper1cgh5ksjwy2sd407lyre4l3uj2fdrqhpkzp06e6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"inTpwtq2gc0g86M+Sovdk7wCxe68QG0Kxr2XO9S/q+0="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"275910718507","delegator_shares":"275910718507.000000000000000000","description":{"moniker":"HashKey Cloud","identity":"CB79CF86DBD56A19","website":"https://www.hashkey.cloud/","security_contact":"","details":"Cloud for WEB3 More Than Staking"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-10-23T02:48:39.225406910Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"400000000.000000000000000000","liquid_shares":"10093725458.000000000000000000"},{"operator_address":"cosmosvaloper1cf9yqlamxgeza4nsn7y08vpkcs7qqjp46k6s3t","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"v6sR0bx6aRF0QxLbyIpKW4MTk9ndKf33PDN/uffH6NA="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10001","delegator_shares":"10001.000000000000000000","description":{"moniker":"ChainPool","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-04-17T07:08:57.260527297Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1cv6hnl6sq4srccnzveqe8ggc2tepvvx45vwcwz","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"atlLB3SsSyfZU8iR5pT/ObECS7H3Y3wd/oo4h6ENiLE="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"15042648","delegator_shares":"15042648.000000000000000000","description":{"moniker":"Sunshine Validation #solarpower","identity":"85130F5D06D9DC5E","website":"https://sunshinevalidation.io","security_contact":"","details":"Solar Powered Validator on the Cosmos Network. Also currently building an incentivized program to bring more solar power to the Cosmos!"},"unbonding_height":"10934065","unbonding_time":"2022-07-09T23:04:29.914203400Z","commission":{"commission_rates":{"rate":"0.069300000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-13T20:12:03.178996324Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1cjhz8st5409k2nzfcpcnexehjxh7k2fgn8kf3w","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"RUFThqowaH20ARALLKa/ofkfaDKkQrxRvsiP7HnpplY="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"Node\u0026Validator VN","identity":"6CB6AC3E672AAB9D","website":"https://linktr.ee/validatorvn","security_contact":"","details":"Trusted Proof-of-Stake validator across Cosmos universe. Active ecosystem contributor, IBC relayer and chain service provider since 2023."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1c5n3z6ju8e07pqmmxcn4hkqn69d8kmvq5nxnxa","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"mR6NmSWk0n54ntv7o7FRPU5++uiZjvPSOSHbCGQzkpk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1009901","delegator_shares":"1010001.000100010001000101","description":{"moniker":"anonym.ninja","identity":"3F756490F0116304","website":"https://anonym.ninja","security_contact":"","details":"Stake with Anonym.Ninja, the first anonymous validator on Cosmos Hub. Hardened against coercion and physical attacks."},"unbonding_height":"5239885","unbonding_time":"2021-03-14T18:51:02.988026769Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.400000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-16T12:51:01.487920251Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.000100010001000100"},{"operator_address":"cosmosvaloper1c4k24jzduc365kywrsvf5ujz4ya6mwympnc4en","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"LtiHVLCcE+oFII0vpIl9mfkGDmk9BpPg1eUkvKnO4xw="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"22418165930617","delegator_shares":"22418165930617.000000000000000000","description":{"moniker":"Coinbase Custody","identity":"AECA8EAB3D0AFAD1","website":"custody.coinbase.com","security_contact":"custody@coinbase.com","details":"Coinbase Custody Cosmos Validator"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-06-30T17:14:03.668558534Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"10012576.000000000000000000","liquid_shares":"245315504.000000000000000000"},{"operator_address":"cosmosvaloper1cc99d3xcukhedg4wcw53j7a9q68uza707vpfe7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"LdzSojUSWLkp1vfoEHABOmiqV/7baG77vqnaTJpwvJM="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1657382824097","delegator_shares":"1657382824097.000000000000000000","description":{"moniker":"dForce","identity":"AB99C8D824487B05","website":"https://dforce.network","security_contact":"","details":"dForce is a decentralized finance protocol matrix covering decentralized stablecoin(USX), lending, and trading, serving as DeFi infrastructure in Web3. We provide affordable staking service to atom holders and to contribute to Cosmos governance. "},"unbonding_height":"16403934","unbonding_time":"2023-08-23T22:23:35.187807058Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["106991"],"validator_bond_shares":"6000000000.000000000000000000","liquid_shares":"270325430.000000000000000000"},{"operator_address":"cosmosvaloper1cew4f2acglytrdsdewk7kv3v8ycxd89z28jel6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"15SzMab0maLO3+23MaAFxmtH91covxzWeWo8cqquMGU="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1009801","delegator_shares":"1010002.712627053140119439","description":{"moniker":"mr.tukutuku validator","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"500128","unbonding_time":"2020-02-11T13:35:12.836704664Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.997548299646565208"},{"operator_address":"cosmosvaloper1cm9mkmwaheq8l06zrdhudn4g5tkq36dd9p07zj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Qd7hjjHmPGs94wCrkX6A7/EVHOAFpMaxauQfb6aE8cg="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"tester0122","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-01-22T12:36:03.772409770Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1cu5d3l994kep6a0fkt9ks3m0dj2tzmr6j0ml6c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"0Z3u39dU04/ujnfj/t2HmBAJAWmQUHwVvXvciPHNdyA="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1100000","delegator_shares":"1100000.000000000000000000","description":{"moniker":"Mandragora","identity":"DFEAAB98E8D0975B","website":"https://mandragora.io","security_contact":"https://t.me/dann96","details":"Stake N' Chill Out!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-09-30T17:40:53.443203846Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1clpqr4nrk4khgkxj78fcwwh6dl3uw4epsluffn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"e3BehnEIlGUAnJYn9V8gBXuMh4tXO8xxlxyXD1APGyk="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"11011079970818","delegator_shares":"11011079970818.000000000000000000","description":{"moniker":"Cosmostation","identity":"AE4C403A6E7AA1AC","website":"https://www.cosmostation.io","security_contact":"","details":"CØSMOSTATION Validator. Delegate your atoms and Start Earning Staking Rewards"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"10","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1575000000.000000000000000000","liquid_shares":"217039325276.000000000000000000"},{"operator_address":"cosmosvaloper1ey69r37gfxvxg62sh4r0ktpuc46pzjrm873ae8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Roh99RlsnDKHUFYUcQVHk2S84NeZfZdpc+CBb6NREhM="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"5194640744419","delegator_shares":"5195679812100.454236319756790585","description":{"moniker":"Sikka","identity":"5B5AB9D8FBBCEDC6","website":"sikka.tech","security_contact":"","details":"Sunny Aggarwal (@sunnya97) and Dev Ojha (@ValarDragon)"},"unbonding_height":"7893737","unbonding_time":"2021-10-25T23:53:04.980335653Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"19900190313.433424125406054981","liquid_shares":"1262350725.000119672064063206"},{"operator_address":"cosmosvaloper1e859xaue4k2jzqw20cv6l7p3tmc378pc3k8g2u","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+VG4LZ/BDB76bSfecmi1MbBxvjk85vEln4mVSmWaB4Y="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"487741884382","delegator_shares":"487839446539.395865912576868126","description":{"moniker":"Citizen Web3","identity":"DF0280597A20ACFE","website":"https://www.citizenweb3.com/staking","security_contact":"","details":"Citizen Web3: Embracing Decentralization, Empowering Communities. The Voice of Web3 \u0026 Non-custodial staking service"},"unbonding_height":"7046211","unbonding_time":"2021-08-14T11:02:55.482026968Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-09-06T12:45:52.343835951Z"},"min_self_delegation":"10","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1168207285.161612673462331997","liquid_shares":"243359055266.069362362320990931"},{"operator_address":"cosmosvaloper1et77usu8q2hargvyusl4qzryev8x8t9wwqkxfs","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"SZ4TwijZt9Su1uidR3UVgnvIsRian8XVs6DYqYztaBU="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"149199250584","delegator_shares":"149214170283.209879484428505305","description":{"moniker":"Stargaze","identity":"9203983F91296B66","website":"https://stargaze.zone","security_contact":"","details":"Support the development of Stargaze, the Interchain NFT Hub."},"unbonding_height":"7714019","unbonding_time":"2021-10-10T03:19:32.213647330Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2021-02-12T20:02:17.651168600Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"499049900.749532974228709013","liquid_shares":"445386189.429408368181672907"},{"operator_address":"cosmosvaloper1ed5a27kfyu0yljmna00vtr8mgzp6rwh9zn77zz","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"FnAO170ylA2JhCLPrBlaDfU4d3hsGLDRyhf5u/Kz0cQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"13469098493","delegator_shares":"13473139764.345094484488120193","description":{"moniker":"CROSSTECH","identity":"8C36941CA5846DAF","website":"https://cross.technology","security_contact":"","details":"We are a software solution company based out of the UAE. We specialize in software development, website optimization for Web3, and web-based solution customization, as well as staking for various blockchains including COSMOS."},"unbonding_height":"19519565","unbonding_time":"2024-04-01T20:32:13.387592282Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["43737","531236"],"validator_bond_shares":"10017501.382527442528207840","liquid_shares":"36098.288847618246644816"},{"operator_address":"cosmosvaloper1ewtwxeksk59k0an3etj3n93al64l5qws2jw02z","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QAO9kue/aAFF/rLvPX3vqD2dNftD2TdHx9VZGb3/Nmk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1009935","delegator_shares":"1010001.323420911351837376","description":{"moniker":"Bitrue","identity":"","website":"https://www.bitrue.com","security_contact":"","details":"Bitrue exchange is established by a group of blockchain enthusiasts and focus on cryptocurrency trading.\n We dedicate to providing safe and convenient service for cryptocurrency trading, and being the best aggregator of qualified cryptocurrency all over the world."},"unbonding_height":"7649125","unbonding_time":"2021-10-04T12:41:58.088310359Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.656709797277565757"},{"operator_address":"cosmosvaloper1e0plfg475phrsvrlzw8gwppeva0zk5yg9fgg8c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"EeLdzXVGnPdqBBprGO3BsfQsyNMGsxjoyzNOFBZLNZA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"260172354790","delegator_shares":"260172354790.000000000000000000","description":{"moniker":"Easy 2 Stake","identity":"2C877AC873132C91","website":"www.easy2stake.com","security_contact":"","details":"Easy.Stake.Trust. as easy and as simple as you would click next. Complete transparency and trust with a secure and stable validator. GoS winner, Never Jailed Crew"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2023-02-27T16:04:33.135410596Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"598000000.000000000000000000","liquid_shares":"265335431.000000000000000000"},{"operator_address":"cosmosvaloper1e0jnq2sun3dzjh8p2xq95kk0expwmd7sj6x59m","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"TNosl/5d/FQ/dUo4mmOZtDZHf1ByjX4LyA6l1Y4lSng="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"260000","delegator_shares":"260000.000000000000000000","description":{"moniker":"Fission Labs","identity":"7DAC30FBD99879B0","website":"https://fissionlabs.io/","security_contact":"","details":"Fission Labs - Blockchain infrastructure and development services"},"unbonding_height":"1825431","unbonding_time":"2020-05-30T19:12:32.409032463Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-10-27T15:17:00.635446897Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1esh5lm53ew3cpscy3nmm20xfvm8dlygadrpkmp","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"hJVGDRYocrGGdGH5ETrObxH5Az20wq60+0gqEhznXXY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"388242344043","delegator_shares":"388242344043.000000000000000000","description":{"moniker":"bitlabs","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"19775910","unbonding_time":"2024-04-20T02:59:14.472646505Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-27T18:57:14.390831224Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":["582755"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1ej2es5fjztqjcd4pwa0zyvaevtjd2y5wxxp9gd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2xWuWOFp6r8AtEEmB96w36ZcKLgumqAAFlZcxe2bJPs="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"481754951274","delegator_shares":"481754951274.000000000000000000","description":{"moniker":"Frens (🤝,🤝)","identity":"C47845226662AF47","website":"https://frens.army","security_contact":"","details":"Your friendly validator for cosmos chains"},"unbonding_height":"20371190","unbonding_time":"2024-05-31T19:32:15.396769003Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-12T16:58:44.067741076Z"},"min_self_delegation":"100000","unbonding_on_hold_ref_count":"0","unbonding_ids":["128223","684385"],"validator_bond_shares":"2529978402.000000000000000000","liquid_shares":"11609782483.000000000000000000"},{"operator_address":"cosmosvaloper1e4vye322gkjx8n85jgcclnc7nvdvu82axnr5ll","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"P5bVXtQROUYluem7UhCW4Xg/SvFijRlSmq6daONPk7M="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"623675089068","delegator_shares":"623675089068.000000000000000000","description":{"moniker":"Binary Builders","identity":"3EB2AEED134D7138","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.040000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"2012361993.000000000000000000","liquid_shares":"248873122529.000000000000000000"},{"operator_address":"cosmosvaloper1eh5mwu044gd5ntkkc2xgfg8247mgc56fz4sdg3","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"PflSgb+lC1GI22wc6N/54cNzD7KSYQyCWR5LuQxjYVY="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1943698930488","delegator_shares":"1944476603593.503117026273313089","description":{"moniker":"BouBouNode","identity":"","website":"https://boubounode.com","security_contact":"","details":"AI-based Validator. #1 AI Validator on Game of Stakes. Fairly priced. Don't trust (humans), verify. Made with BouBou love."},"unbonding_height":"19649102","unbonding_time":"2024-04-11T05:51:58.318110721Z","commission":{"commission_rates":{"rate":"0.061000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["109939","558021"],"validator_bond_shares":"1000300059.781555536063894130","liquid_shares":"245438963.779727744534246127"},{"operator_address":"cosmosvaloper1ehkfl7palwrh6w2hhr2yfrgrq8jetgucudztfe","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Zvd+ILfG9q1jPnZfOOYdZOuNLThLdCRPkvRV+HrXkCs="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"991385656446","delegator_shares":"991385656446.000000000000000000","description":{"moniker":"KalpaTech","identity":"B4AD06F0EB355573","website":"http://kalpatech.co","security_contact":"","details":"KalpaTech | Genesis Validator Cosmos Hub | Game of Stakes winner | Services dedicated exclusively for Cosmos Ecosystem | Track record of 4 years in being a reliable and secure validator"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-11-22T11:06:20.545017259Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1000000000.000000000000000000","liquid_shares":"8959214784.000000000000000000"},{"operator_address":"cosmosvaloper1ehlmvdvgkpfcx8f07l929udjerc9mtyhl07ynp","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"U7Qc5P1gFX467tB+UMy9gFBiNT6lsrVV4jaiO99FTRo="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"192415387704","delegator_shares":"192434631094.659704055927400958","description":{"moniker":"Commons Hub","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"20749270","unbonding_time":"2024-06-27T14:43:48.499166094Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.150000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-08-25T15:33:29.548852299Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["160479","162260","730534"],"validator_bond_shares":"447992000.000000000000000000","liquid_shares":"11415948599.838886577387640140"},{"operator_address":"cosmosvaloper1ec3p6a75mqwkv33zt543n6cnxqwun37rr5xlqv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"aek+Unn7MEILEBjeTqP3ONLJ6wwoQxC+6NuXY90xx0Q="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"177951249731","delegator_shares":"177951249731.000000000000000000","description":{"moniker":"lunamint","identity":"4F26823468DD7518","website":"https://lunamint.com","security_contact":"","details":"Always adding value to Cosmos. Check out Lunagram, the Cosmos wallet built into Telegram."},"unbonding_height":"12296723","unbonding_time":"2022-10-24T07:01:41.470061731Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"403000000.000000000000000000","liquid_shares":"250135430.000000000000000000"},{"operator_address":"cosmosvaloper1eez6ks7upkjf8w3eaz0vah7x3d8zkade0mwn3f","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"CV6HWUh7wkj026ZdGycMJ1heC84sYwotOAjNSF8Dkhw="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10014501","delegator_shares":"10015502.049589159827963375","description":{"moniker":"FreeValidator","identity":"C0C8229F2687D500","website":"","security_contact":"","details":""},"unbonding_height":"19875","unbonding_time":"2020-01-03T07:09:44.812941043Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.999600069099626594"},{"operator_address":"cosmosvaloper1emw2f9auxyy532klzc5rkkfampgmn5ywftnv7l","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Ph+RT/1MfAExwcCa93W5U58e4UiA8rOBnnQcacDNqdw="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2009800","delegator_shares":"2010001.000100010001000100","description":{"moniker":"Darth Validator","identity":"13B0E28A01DEADAB","website":"https://darthvalidator.github.io/","security_contact":"","details":"Join The Darkside"},"unbonding_height":"7648627","unbonding_time":"2021-10-04T11:39:38.154057693Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.990000000000000000","max_change_rate":"0.020000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.000100010001000100"},{"operator_address":"cosmosvaloper1emaa7mwgpnpmc7yptm728ytp9quamsvu837nc0","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"TwzOJ4GcN+ZTswub4R8488SrKeWXjY/PaqCF5neXJig="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"8853374","delegator_shares":"8853374.000000000000000000","description":{"moniker":"kochacolaj","identity":"1E9CE94FD0BA5CFEB901F90BC658D64D85B134D2","website":"https://blog.cosmos.network/game-of-stakes-closing-ceremonies-eddb71d3b114#147d","security_contact":"","details":"Top 5 Game Of Stakes winner"},"unbonding_height":"12472688","unbonding_time":"2022-11-06T16:11:01.017040929Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-10-17T08:39:15.200127288Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1eup5t8pp8jq354heck53qtama7vss9l354kh6r","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"NesFClRXLphDnuKMS+52onyCrJHR1uNa2E//AEUg64s="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"16087736","delegator_shares":"16089340.981874213002140763","description":{"moniker":"IZ0","identity":"BF964D76855711CC","website":"www.izo.ro","security_contact":"","details":"Izo Data Network Staking"},"unbonding_height":"6051870","unbonding_time":"2021-05-21T18:44:14.723360758Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20001.999016112727631842"},{"operator_address":"cosmosvaloper1e7uaw3sdrfz7lt04qtwg09jwadlt806jvhwj0j","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"b9n9nkintTbQkQ9jNCMmbVFwYdIeccWPQKUzF34x51k="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"openbitlab","identity":"0C293487659F3386","website":"https://openbitlab.com/","security_contact":"openbitlab@gmail.com","details":"Proudly staking your assets since 2016. Twitter: https://twitter.com/openbitlab_node"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-09-28T07:17:57.079105564Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper16qnr6snzq49l6grkyu39lzchnfv3ajfdvejx55","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5RNwKUQWY66sHLpDWTH4OudE7tqe8HWbI9nGNziHR1s="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"198918706776","delegator_shares":"198918706776.000000000000000000","description":{"moniker":"Stake\u0026Relax 🦥","identity":"BD90F7F27099E9E3","website":"https://linktr.ee/stakeandrelax","security_contact":"stakeandrelax_validator@proton.me","details":"StakeandRelax to get Stake🥩\u0026Rolex⌚️Twitter:@StakeandRelax"},"unbonding_height":"17596236","unbonding_time":"2023-11-17T07:56:36.308592999Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-07-07T12:22:41.096866835Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["131920","154477","160396","162218"],"validator_bond_shares":"399800000.000000000000000000","liquid_shares":"10395126312.000000000000000000"},{"operator_address":"cosmosvaloper16qme5yxucnaj6snx35nmwze0wyxr8wfgqxsqfw","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"dO7o9EP95mLbvJMm/MC8VrNex6nVyZ1ksnh+pfwmLaM="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"108982308531","delegator_shares":"108982308531.000000000000000000","description":{"moniker":"KEK","identity":"B3500E3011D6C3D9","website":"https://kek.net","security_contact":"","details":"expect nothing"},"unbonding_height":"18131036","unbonding_time":"2023-12-25T07:48:26.203446907Z","commission":{"commission_rates":{"rate":"0.090000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2023-12-08T10:56:14.428071008Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["206102","212692"],"validator_bond_shares":"10014303.000000000000000000","liquid_shares":"245335430.000000000000000000"},{"operator_address":"cosmosvaloper16pp7hn3auelgc8z9tcax5jj8q490288cp53t0d","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"82ogNgS0v8YdJk5AJywhRyLKjO7GS05dQboyDkxKQOQ="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"6000000","delegator_shares":"6000000.000000000000000000","description":{"moniker":"XPRV","identity":"6F76E87715274694","website":"https://xprv.io","security_contact":"","details":"XPRV helps cryptocurrency investors earn returns through our high-uptime, secure staking platform."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper16zgjnqxryhq2kftfuv8urp50x0xwt5dagemhfl","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"zzf+dT6foQKDfZViyqG1aKVJJd7DZz0yaHNVvyN8qf4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1074006","delegator_shares":"1074110.323479270718550598","description":{"moniker":"Alphemy Capital","identity":"78DAB5C26CB56856","website":"https://alphemy.capital","security_contact":"","details":"Institutional grade staking for clients of Alphemy Capital."},"unbonding_height":"7804099","unbonding_time":"2021-10-18T01:10:59.149142862Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-04-20T19:33:55.395872948Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.971349129061835321"},{"operator_address":"cosmosvaloper16z6vc7e4wzk3z7y26fgtmd94d2jy526s77yxma","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"kTcd+eUgSYU1k7YlkU4pFQ4UWBv9DvzovDCJeXzuvqc="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"Cancer Research - Sponsored by SmartNodes","identity":"","website":"https://www.justgiving.com/page/smartnodes","security_contact":"","details":"75% of commission goes to Macmillan who gives people with cancer everything they’ve got. If you’re diagnosed, your worries are Macmillan’s worries. Macmillan’s doing whatever it takes. But without your help, Macmillan can’t support everyone who needs them."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-12-09T18:31:08.009014495Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper16yupepagywvlk7uhpfchtwa0stu5f8cyhh54f2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"WAeQesC3BNtVnZwJKie5DAOjD3Kljg82b5c7j/TB+l0="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1144666984449","delegator_shares":"1144666984449.000000000000000000","description":{"moniker":"Stakely.io","identity":"55A5F88B4ED52D3E","website":"https://stakely.io","security_contact":"admin@stakely.io","details":"🔥 Professional validator highly experienced in PoS 🔥 Slashing protection \u0026 Eligible for airdrops | Learn with our staking guides, video tutorials and FAQs | Part of the commission of our nodes will go to our Multicoin Faucet funds and other tools"},"unbonding_height":"9382035","unbonding_time":"2022-03-03T18:57:46.269144910Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"998500000.000000000000000000","liquid_shares":"133134297057.000000000000000000"},{"operator_address":"cosmosvaloper16gdxm24ht2mxtpz9cma6tr6a6d47x63h65p52c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"LChIwtpGjRoGyvyFCtdGQnfdi4FY/jRAuwcwU6pP5Lg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"ColmenaSvQ🐝","identity":"","website":"https://www.coworkingcolmena.com","security_contact":"","details":"May the force be with you"},"unbonding_height":"0","unbonding_time":"2019-05-19T03:28:17.528726781Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper16fnz0v4cnv5dpnj0p3gaft2q2kzx8z5hfrx6v5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"rb4owoyG2l/Vf6yqq0Movi/vdCoakKU+HNGb4BLHHBQ="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"15677761429","delegator_shares":"15679329235.133427706229398191","description":{"moniker":"decomm","identity":"CA9AC67C3BF42517","website":"xx","security_contact":"xx","details":"xx"},"unbonding_height":"19750441","unbonding_time":"2024-04-18T08:13:27.355101149Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["438755","558619","560755","573756"],"validator_bond_shares":"10003.581072844815175285","liquid_shares":"36098.709445363724581462"},{"operator_address":"cosmosvaloper16t2500p3la7zj6793zqa4an247mgqmhgpwfq4c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5ldh+qFR+ULRPzBluN2RbctHWEwaXrlUE4286kBrzNY="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"Blofin","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-03T11:46:31.383707756Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper16tdsscg6443vhp94hwmkafln5l59arugs6dnsx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+7Pm+XhVYaY0vsJ0+aHS6ByDznuUAh0pDag7ln9PUYA="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1899811","delegator_shares":"1900000.999276744968951148","description":{"moniker":"XPRV","identity":"6F76E87715274694","website":"https://www.xprv.io","security_contact":"","details":""},"unbonding_height":"18400408","unbonding_time":"2024-01-13T04:52:12.822573384Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":["253223"],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper16v3f95amtvpewuajjcdsvaekuuy4yyzups85ec","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2hwsbj0G8Hn+ZeVBQjYScbQxAHi+gqrEykLFlczU/H8="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"231555459","delegator_shares":"231578615.743775476453715932","description":{"moniker":"BlockPool","identity":"","website":"www.blockpool.com","security_contact":"","details":"Power the staking economy"},"unbonding_height":"1866856","unbonding_time":"2020-06-03T04:37:39.453562422Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.050000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.000051731688020955"},{"operator_address":"cosmosvaloper16ddmnhsxkjh6xt4n2xk36d56pndvjxcn6gffpm","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ERGIJ5UAgQ1wVy+6tajbGA9Xoswq9o8z+n7ur6lhXzk="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"3009700","delegator_shares":"3010001.000100010001000100","description":{"moniker":"cosmosgbt","identity":"","website":"https://bitstack.com","security_contact":"","details":"BitStack makes professional staking."},"unbonding_height":"34668","unbonding_time":"2020-01-04T11:48:00.591855986Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-04-18T14:36:49.762252310Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.000100010001000100"},{"operator_address":"cosmosvaloper160794m2vw5yu2dvmsw8lcjh33ur26myjxurm4n","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"vyy9v4qujrI5Xh2KP2x5I8Q7qWNwfqAtW0Ijs4QA3d4="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"🐱biglazycat.com","identity":"95DC9A274F06B996","website":"https://atompool.biglazycat.com","security_contact":"","details":"Welcome to Big Lazy Cat's ATOM Validator! High Reliability with Low Commission Fee! Extra benefits can be found on www.biglazycat.com !"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-06-16T22:31:26.533016660Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper16s96n9k9zztdgjy8q4qcxp4hn7ww98qkrka4zk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"CTqPJAIdMz8F360TcADAii9/tEeI4CvTK4JfBD6DwXI="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"466600209552","delegator_shares":"466600209552.000000000000000000","description":{"moniker":"Oni ⛩️ | Stake for BoostDrop™ 🚀","identity":"5A8AB49CF5CAAF3C","website":"","security_contact":"onivalidator@protonmail.com","details":"The Oni Protectorate ⚛️ Validator for the Cosmos. Friend to the Cosmonaut."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"440596523.000000000000000000","liquid_shares":"10845281368.000000000000000000"},{"operator_address":"cosmosvaloper16j5uk7zt8kha0w4637h36kuxrmlarrg0qfwlgz","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"b6AuJZfIG0ZyZHVO+h+kCOpu40B5CwXC2FPEGj90ufw="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1100900","delegator_shares":"1101000.916674305619213493","description":{"moniker":"cosmos-hub.com","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"7649125","unbonding_time":"2021-10-04T12:41:58.088310359Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-06-23T02:21:45.584908623Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.916674305619213493"},{"operator_address":"cosmosvaloper16n2587cgz46nn5d0c5mcqlsnx8pvg566gt2a2p","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+D8aadwXABWctI15LlVUhsguPJeAowtPucoH6WvRUds="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"72789335","delegator_shares":"72789335.000000000000000000","description":{"moniker":"Tedcrypto.io 🧸 | TedLotto","identity":"6D5F63F1DDCF0404","website":"https://www.tedcrypto.io/","security_contact":"support@tedcrypto.io","details":"Bringing fun to staking. Delegate and grab your free lotto tickets here: https://lotto.tedcrypto.io"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-28T09:44:06.992320887Z"},"min_self_delegation":"100000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1657gj6ggfumyuq8dmfggsudxshp0kfhm7e65gy","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Gfq3SfvsI+Y0lfTSZPOv0wQH0T43UcCh8MiAFVxbCDQ="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"50000001","delegator_shares":"50000001.000000000000000000","description":{"moniker":"Titan Network | Delegate for Claimdrop","identity":"EC6F953E9C927FA3","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-04-02T06:20:31.514997383Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1648ynlpdw7fqa2axt0w2yp3fk542junl7rsvq6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Sf/7YqGsf2hZcACHSe0bdX8yhETamBrYCRzIcw0TAOA="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"11209949059","delegator_shares":"11216677245.539598438222358554","description":{"moniker":"Any Labs","identity":"B2D07CA3CCC907CE","website":"https://anylabs.io","security_contact":"","details":"Blockchain staking and consultancy based in Japan."},"unbonding_height":"16242129","unbonding_time":"2023-08-12T10:18:01.707666210Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"100","unbonding_on_hold_ref_count":"0","unbonding_ids":["51296","98465"],"validator_bond_shares":"1000.610788584332117892","liquid_shares":"30015.649655020627307431"},{"operator_address":"cosmosvaloper16k579jk6yt2cwmqx9dz5xvq9fug2tekvlu9qdv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"pTcg/QVBC+LzpR0BuynDpMkNh4tajyeKCOtmWMfkvFU="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"3867641304771","delegator_shares":"3868028102816.057259227791681603","description":{"moniker":"Informal Systems","identity":"6408AA029ADBE364","website":"https://informal.systems","security_contact":"validator@informal.systems","details":"Informal Systems x Cephalopod Equipment - infrastructure for decentralized intelligence"},"unbonding_height":"0","unbonding_time":"2019-12-01T09:34:39.548038382Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.420000000000000000","max_change_rate":"0.011800000000000000"},"update_time":"2024-06-06T12:37:01.047797585Z"},"min_self_delegation":"100000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1145114510.368390812666552610","liquid_shares":"243154910926.121475360632372961"},{"operator_address":"cosmosvaloper16m93gjfqvnjajzrfyszml8qm92a0w67nwxrca7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Sj+idSMfzPh20CuVPqQr3H7NsE5rr7ZAGzV/rEwJn6E="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10088","delegator_shares":"10088.000000000000000000","description":{"moniker":"Deprecated","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-08-06T09:47:54.440004030Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-04-22T05:05:12.928223648Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper16mmmmaxprree97hcyy8d3pezt50xylyddfgcc7","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"PSxTNsfuYJPsPwkw5KoJ5IcUutg9HwYNli7oEiZt3Ok="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"BwareLabs","identity":"E83A08BEEE7A70BD","website":"https://bwarelabs.com","security_contact":"validators@bwarelabs.com","details":"Guaranteed availability and up-time backed by a professional blockchain infrastructure team."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-10-11T15:30:56.660750250Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper16lsdqdqcz7yywd82dtrt4nmf2u3peq4ukc8ap8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"VDCMsSMVKznkXg4ETIdyXSfEceiycvCRoZiMGdOpFt0="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"909915","delegator_shares":"910005.501801899853808314","description":{"moniker":"consensus_networks","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"3625207","unbonding_time":"2020-10-28T14:13:08.344856802Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-04-25T18:48:53.272467629Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.994618199500544647"},{"operator_address":"cosmosvaloper16lhapna7nfm0j3pnwt7tn4lxtx3q7hs4sf66t8","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"MxO6nRLA36N9lfz4XGW+i3Tukznp1FwrEM7xcrVC8m8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"245932096","delegator_shares":"245932096.000000000000000000","description":{"moniker":"Crypto Lion","identity":"F09351016F6A7892","website":"https://cryptolion.finance","security_contact":"cryptolion-node@protonmail.com","details":"Follow Us from Twitter or Telegram via: @CryptoLionVal"},"unbonding_height":"10132444","unbonding_time":"2022-05-06T23:48:05.949751210Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.150000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1mrnrqgl4d5hqsfdcgnjfarjnlk43rs89gyz94x","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"BiVUNbyAXKts0dgmXaCbZNEKHKvT1hQA/BgiSUtlNi4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"45006501","delegator_shares":"45011001.002252350183927438","description":{"moniker":"lino-network","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"18096","unbonding_time":"2020-01-03T03:43:00.444220430Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-21T22:15:27.608621289Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.000078266994808289"},{"operator_address":"cosmosvaloper1my5hjhl3gv47jndnfhj6l726ppjtszza94l320","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"395JCx088iaRHumfIzJCaOhTCBn9eTi9l+xmKfp/Z98="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"197937943783","delegator_shares":"197937943783.000000000000000000","description":{"moniker":"Defi Wallet","identity":"","website":"https://crypto.com/en/defi/wallet/","security_contact":"","details":"Crypto.com DeFi Wallet is the best crypto wallet to store, earn and grow."},"unbonding_height":"17054064","unbonding_time":"2023-10-09T10:07:58.276228003Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.300000000000000000"},"update_time":"2024-04-12T06:06:37.228734184Z"},"min_self_delegation":"1500000","unbonding_on_hold_ref_count":"0","unbonding_ids":["133947","136598"],"validator_bond_shares":"10014610.000000000000000000","liquid_shares":"245347761.000000000000000000"},{"operator_address":"cosmosvaloper1mykn77lkynl8fkwvl9tqg369u0zajzzcdhkptq","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"SvXDJ2mUsZeH1s1u8WInNVpWxO7+xoxivk/HwqgAiRo="},"jailed":false,"status":"BOND_STATUS_UNBONDING","tokens":"23258883964","delegator_shares":"23261210040.102084457018243593","description":{"moniker":"BlockPI","identity":"DE72F17D1D7586D1","website":"https://blockpi.io/","security_contact":"","details":"Distributed multi-chain acceleration layer."},"unbonding_height":"20860497","unbonding_time":"2024-07-05T10:07:12.351075374Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"4","unbonding_ids":["76855","77160","77287","99666","100742","101960","103918","104811","109958","118273","119240","561003","573925","625955","722848","724740","725440","725868","729075","731350","743437"],"validator_bond_shares":"1000.100908169555920701","liquid_shares":"20002.017074160093789182"},{"operator_address":"cosmosvaloper1m902jrk0pn4yc47zfvauqwvtq0e03nen5xgzte","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"F6MftbAjsqGKd8Ap7yWd6P5TUGuW9uamNIjVWBrxyMo="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"374674028690","delegator_shares":"374711499713.640254026623917380","description":{"moniker":"Luganodes","identity":"3CE24C948DE662E6","website":"https://luganodes.com/","security_contact":"","details":"Hassle-free secure staking"},"unbonding_height":"19747475","unbonding_time":"2024-04-18T03:16:21.799075110Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-07-02T06:01:22.975447634Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["211129","573155"],"validator_bond_shares":"405000000.000000000000000000","liquid_shares":"4501482403.080009775424109392"},{"operator_address":"cosmosvaloper1m83cwjucw9nt8xm66u8xavvy6v9m7xfspcszc5","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"8CaaDq8XswlhXFjkNgjILBLdHjdzzvpmx6Nbi7cBWu4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"103243749","delegator_shares":"103243749.000000000000000000","description":{"moniker":"Fenbushi US - Staked","identity":"CC4B238C8F9FB2BE","website":"https://fenbushi.vc","security_contact":"","details":"Fenbushi Capital is the first and most active blockchain-focused venture capital firm in Asia. Staked is the leading provider of validation technology and services. We're bringing our combined skills to Cosmos."},"unbonding_height":"5433062","unbonding_time":"2021-03-30T18:09:21.623558905Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-11-15T18:07:08.897219336Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1mt6mf0ny6cstytjz00kz3h7cyyrh9m5s6tduks","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"qRzITWr/nQ+J31ODy8fZDD/SvUorYZaH5C786x5VQ9k="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"7120000","delegator_shares":"7120000.000000000000000000","description":{"moniker":" Earthstar ","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-25T22:31:26.718263476Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1mvhrxhtsjynl62p7rs8jeumtqwtvww3m0vas2y","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"LNLpqy/J6+tzZ/UmlwzXA08fRjce9L3g2c9ZK6e5dbE="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1517900","delegator_shares":"1517900.000000000000000000","description":{"moniker":"figo","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"1.000000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-05-24T03:38:18.361564346Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1mnjg9xhraxljrccyw9y6u22ws0fa5asa38nd2q","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"DII5EDAA8DgdTcM0Jfycb02DIF9FTLvOcJsruxbLdmc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"142896247000","delegator_shares":"142896247000.000000000000000000","description":{"moniker":" kjnodes.com 🦄","identity":"1C5ACD2EEF363C3A","website":"https://services.kjnodes.com/mainnet/cosmoshub","security_contact":"","details":"Trusted Proof of Stake validator across Cosmos universe. Active ecosystem contributor, IBC relayer and chain service provider since 2021. We deliver top-notch secure and reliable infrastructure for Cosmos projects. 24/7 monitoring with no slashing history in our track record."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-04-25T13:12:46.974765188Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1ma02nlc7lchu7caufyrrqt4r6v2mpsj90y9wzd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Mvh+7UDaXgmj4Fst0ZUdx++MJmoq4B9M6mdgNc8H2pM="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"1447889772298","delegator_shares":"1448034572632.671744107008269703","description":{"moniker":"hashtower","identity":"0BBBAE1FD11AEBAF","website":"http://hashtower.com","security_contact":"","details":"Hashtower Actwo COSMOS Validator"},"unbonding_height":"16282282","unbonding_time":"2023-08-15T06:52:08.883038044Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.200000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["100272"],"validator_bond_shares":"10016235.612666000619860119","liquid_shares":"246693694.570210090902998900"},{"operator_address":"cosmosvaloper1m73mgwn3cm2e8x9a9axa0kw8nqz8a492ms63vn","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"A6LZ/bCDFj6t5yB7tOKso9Vr2uEcCbjq8H1rsY12NJo="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"600550899474","delegator_shares":"600610957352.398797514381808340","description":{"moniker":"#decentralizehk - DHK dao","identity":"436039F82528A43A","website":"https://dhk.org","security_contact":"decentralizehk@protonmail.com","details":"Airdrop $DHK to delegators every month"},"unbonding_height":"6919502","unbonding_time":"2021-08-03T21:08:36.297179232Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-01-09T13:03:43.363508310Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"334033401.832523214708973070","liquid_shares":"8039123008.179188012518095978"},{"operator_address":"cosmosvaloper1up3slj4nr5y23gxkvqn8h5ra9mv0pj2vrh0djk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"arXS35bRk3aOolb9q9UsS07FUGy6DgxXjbPLZ4m+Udk="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1800000","delegator_shares":"1800000.000000000000000000","description":{"moniker":"SpacePotato","identity":"B41FCF161C4B971B","website":"https://spacepotayto.carrd.co/","security_contact":"","details":"We have a secure and reliable validator setup that adheres to best practices. Uptime and rewards generation for you is our top priority!"},"unbonding_height":"8715706","unbonding_time":"2022-01-06T11:56:41.368863769Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1urxrvt5dmkqpe50gwrerjly2z6nvk9exjz2j3h","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ZnQe1qWDBJGVtAswTbBI8pc/bK5qKwt+sdt9rpTA7LE="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"104653602301","delegator_shares":"104737362507.477070329650792002","description":{"moniker":"zoomerlabs","identity":"","website":"https://www.zoomerlabs.com/","security_contact":"","details":""},"unbonding_height":"20750472","unbonding_time":"2024-06-27T16:45:29.470485485Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2021-04-30T05:34:13.296561260Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["6330","183484","190445","201605","202129","223533","233001","558022","694115","730835"],"validator_bond_shares":"5002000.494252739183423630","liquid_shares":"245531155.949240045096779679"},{"operator_address":"cosmosvaloper1urtpxwfuu8k57aqt0h5zhsvmjt4m2mmdr0juzg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"AmPqEmF5YNmlv2vu8lEcDeQ3hyR+lymnqx2VixdMEzA="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1009921","delegator_shares":"1010000.800064005120409633","description":{"moniker":"この素晴らしい世界に祝福を","identity":"","website":"https://konosuba.fandom.com/wiki/Eris","security_contact":"","details":"エリス"},"unbonding_height":"56051","unbonding_time":"2020-01-06T05:14:25.261410586Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.800064005120409632"},{"operator_address":"cosmosvaloper1uyt0yuv7cz7ppwefl9ths336ln7ysvg2jlj76t","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Yklg8rxgFprb58ORIhSOUvhkdGJbPSiAH8ktmmWZl3c="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"52966250","delegator_shares":"52966250.000000000000000000","description":{"moniker":"Sanka Network","identity":"83D5F763152084C9","website":"https://www.sanka.network","security_contact":"","details":"Sanka Network is a leading validator in Asia market, who has been maintaining robust and secure infrastructure for staking blockchain with strong enthusiasm to achieve healthy governance and economy in the ecosystem. Delegate with us for your future earnings."},"unbonding_height":"0","unbonding_time":"2019-11-07T13:06:06.984884700Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.030000000000000000"},"update_time":"2019-10-05T14:45:51.572289075Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1uyccnks6gn6g62fqmahf8eafkedq6xq400rjxr","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"UC18odnZ5+utHc8lD0L/gxqf5xD4sBDTdFuVB8+du5E="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"130313798","delegator_shares":"130326823.311408720604603171","description":{"moniker":"Inactive Validator","identity":"","website":"","security_contact":"","details":"Please undelegate!"},"unbonding_height":"11961836","unbonding_time":"2022-09-28T13:48:50.179368529Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2022-05-02T23:03:33.296295613Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.999998560891010855"},{"operator_address":"cosmosvaloper1uxh465053nq3at4dn0jywgwq3s9sme3la3drx6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"xQim88WOJcW/E9M8u4Ym+wN0Itoa1Nu4ubS/2jl236c="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"289900","delegator_shares":"289900.000000000000000000","description":{"moniker":"Bison Trails","identity":"A296556FF603197C","website":"https://bisontrails.co","security_contact":"","details":"Bison Trails is the easiest way to run infrastructure on multiple blockchains."},"unbonding_height":"3616026","unbonding_time":"2020-10-27T19:38:53.980204001Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1uxlf7mvr8nep3gm7udf2u9remms2jyjqvwdul2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"kV3qRBIfvOsBRS+YygBbRX/oNgxeGRtmAe4BuKjUB6A="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"2315748906669","delegator_shares":"2315748906669.000000000000000000","description":{"moniker":"Kiln","identity":"9B74364A5E526BED","website":"https://kiln.fi","security_contact":"","details":"Enterprise-grade staking made easy"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.080000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-01-23T17:16:08.167059190Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"500000000.000000000000000000","liquid_shares":"11713681386.000000000000000000"},{"operator_address":"cosmosvaloper1uv26ytrnmydyctq0s58ve2k6wn2p653mqs80fm","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2HcS9L0H/gGduyui5z4BeyKmMDcG0GWp6Qu8WpekvcE="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"26012066","delegator_shares":"26012066.000000000000000000","description":{"moniker":"DO NOT STAKE | Bity.com","identity":"E1EA6ED47349E958","website":"https://bity.com/","security_contact":"","details":"WARNING: UNSTAKE BEFORE 2019-10-20. THIS NODE WILL BE DECOMMISSIONED. MORE INFO: https://blog.bity.com/2019/10/07/farewell-cosmos/"},"unbonding_height":"0","unbonding_time":"2019-11-04T04:56:16.501325732Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-09-20T15:04:08.164834523Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1uvtjhqfqawhf4xzsjczw72qq9vsueewdm0jpuv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"YKSINu7tAIBdtJBJ0t0Iq9X8vlC6JCC9pXCTPIcd64E="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"50000","delegator_shares":"50000.000000000000000000","description":{"moniker":"King Hugo","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-11-30T13:35:48.044672929Z"},"min_self_delegation":"40000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1udpsgkgyutgsglauk9vk9rs03a3skc62gup9ny","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"idewuO7ku3PO7LWarS4WNUPvvAZVgOTYMbyPqtcltlg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"210907741201","delegator_shares":"210907741201.000000000000000000","description":{"moniker":"[SHUTTING DOWN] AUDIT.one","identity":"5736C325251A8046","website":"https://audit.one","security_contact":"","details":"Validators of today, Auditors of tomorrow"},"unbonding_height":"20653512","unbonding_time":"2024-06-20T15:45:00.462003733Z","commission":{"commission_rates":{"rate":"0.070000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2020-10-25T21:10:41.263771030Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["539886","718992"],"validator_bond_shares":"41000000.000000000000000000","liquid_shares":"85166089.000000000000000000"},{"operator_address":"cosmosvaloper1udcqs46htn89kzvq9wjnul2k8lw89s37xcavva","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"D7tOilBob82cdFEysiesoF+o/GQH4KEkaxwhteoRLAg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"CLOSED DOWN!","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-07-16T12:06:32.344076332Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1usvshtypjw57edkwxq3tagme665398f0hf4wuc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"4jkFAWNCgmrEevSVOjqGGnVCwqgdXnffb70gW6sUaJc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"180442288448","delegator_shares":"180442288448.000000000000000000","description":{"moniker":"Kintsugi Nodes","identity":"DE50D46AAC2A243C","website":"https://kintsugi.tech","security_contact":"security@kintsugi.tech","details":"Your professional, global PoS validator. Delegate, earn, and join our journey to a golden blockchain."},"unbonding_height":"15725027","unbonding_time":"2023-07-06T02:06:43.260993062Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2023-01-14T12:42:05.626492634Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["1671","4354","71924"],"validator_bond_shares":"500000000.000000000000000000","liquid_shares":"10406113318.000000000000000000"},{"operator_address":"cosmosvaloper1u3czw59ysyu94lgr2cmhm06vc9ttz64wqm2fru","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QXUKCER3TPqzJcoaOACPFPA0VNdo9X3sCZUsqQ1qoCU="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"110000","delegator_shares":"110000.000000000000000000","description":{"moniker":"abcd","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-12-19T04:55:47.805327487Z"},"min_self_delegation":"100000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1unap36cmuaxsmgtshm893hjkneta5vp6udzc0j","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+KU3VYh+oM2DBJv9RvXTcXZjOphT06yJcgJBSMpskH4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"100045000","delegator_shares":"100055005.500550055005500550","description":{"moniker":"HelloPool","identity":"","website":"https://hellopool.io","security_contact":"","details":"Embrace the future"},"unbonding_height":"11089","unbonding_time":"2020-01-02T14:05:30.988294420Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1u5lcptf9kpw6psqg5xyr80t5d9l70lvcyg555w","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"ci41gb2/wMqxX83Io4EAWou08oD4K2RMyseh+y+T+vc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2509802","delegator_shares":"2510000.792063133032393476","description":{"moniker":"codeb2cc","identity":"2D07FA247778B304","website":"","security_contact":"","details":"The duty of nongenius"},"unbonding_height":"58526","unbonding_time":"2020-01-06T10:02:19.233630916Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-28T05:23:42.981433644Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.792062732968705871"},{"operator_address":"cosmosvaloper1ukpah0340rx7k3x2njnavwyjv6pfpvn632df9q","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"f2UyfyYKIZppUi4joaKosboHZbtsIrVsHFPk9/P6Be4="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"562649931302","delegator_shares":"562649931302.000000000000000000","description":{"moniker":"IcyCRO 🧊","identity":"E072BD129BFECFB1","website":"https://icycro.org","security_contact":"allteam@icycro.org","details":"Bare metal validator and IBC relayer. Monthly jackpot raffle for the top100 delegators. Community project from Cronos, brought to you by Jerry's Pool and Finland on the Crypto.org Chain. Telegram: https://t.me/IcyCROchat"},"unbonding_height":"10173844","unbonding_time":"2022-05-10T08:52:17.495405989Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1100000000.000000000000000000","liquid_shares":"140740075740.000000000000000000"},{"operator_address":"cosmosvaloper1uhnsxv6m83jj3328mhrql7yax3nge5svrv6t6c","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"/VS/bgueXBoNDsrzxxaX64RIL//2wHb9VZ0Jd67+AqQ="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"969005486214","delegator_shares":"969393184514.008819923573717900","description":{"moniker":"S16 Research Ventures","identity":"CD80FCB702D70807","website":"https://s16.ventures","security_contact":"","details":"A validator since Cosmos genesis block"},"unbonding_height":"10478993","unbonding_time":"2022-06-03T23:27:53.065817826Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-13T23:00:00Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"3117246710.998552986729549462","liquid_shares":"100464938622.032933777561838135"},{"operator_address":"cosmosvaloper1uepjmgfuk6rnd0djsglu88w7d0t49lmljdpae2","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"FvGYcbxQDu3IQa33ZlyiYycQ1veFobiTTPoLNcxqLYo="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"753520485","delegator_shares":"753520485.000000000000000000","description":{"moniker":"STAKE FRITES 🥩 🍟 - DO NOT DELEGATE","identity":"7817CA2B0981F769","website":"https://stakefrites.co","security_contact":"","details":"PoS Validators and web3 developers."},"unbonding_height":"12039894","unbonding_time":"2022-10-04T14:59:05.824599314Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-13T21:59:25.775745867Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1u6ddcsjueax884l3tfrs66497c7g86skn7pa0u","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"P4WJpPDdcu7iXUg5JOWLOO7pUBYvHLNXKTlwvgNzbbI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"57171603560","delegator_shares":"57183039129.576735210477700695","description":{"moniker":"Sentinel","identity":"D54C8032CF19C407","website":"https://sentinel.co","security_contact":"","details":"We are team Sentinel, developer of infrastructure tools on Cosmos \u0026 other networks.Winner in the Uptime category during GOS.Developed the first working version of the dVPN which runs on Ethereum \u0026 Sentinel's own Tendermint TestNet"},"unbonding_height":"15825701","unbonding_time":"2023-07-13T11:12:31.395808655Z","commission":{"commission_rates":{"rate":"0.150000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2022-06-15T03:50:33.170889864Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["1034","9147","43827","51789","76661"],"validator_bond_shares":"750150.025125347108827813","liquid_shares":"20003.521860211252352652"},{"operator_address":"cosmosvaloper1umh3ne98d2y2mxekzsprfkz34xpcl8wmp2t2rg","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"2rU+R2bhgOkAFXQrH3KgF/rxBFQhrCnrhrCYO+3vts8="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"Cosmos Maximalist","identity":"41941D0F762DDA3C","website":"https://twitter.com/ATOMmaximalist","security_contact":"https://twitter.com/ATOMmaximalist","details":"Cosmos Maximalists will take the hub back, the cosmos has been abused by people without skin in the game for far too long."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1uutuwrwt3z2a5z8z3uasml3rftlpmu25aga5c6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"6Mf3hC1oiYE5mAOTGTmlA61zJJr+GHyGu4WUWO/mREo="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"213488243949","delegator_shares":"213488243949.000000000000000000","description":{"moniker":"DelegaNetworks ∞","identity":"1BED7C08416A619F","website":"https://delega.io","security_contact":"delega@protonmail.com","details":"Validador con énfasis en la comunidad de habla hispana, validando bloques en Cosmos desde el génesis en 2018. Mantenemos nuestra infraestructura segura y fiable el 99% del tiempo."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-05-23T18:11:16.182739499Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"39017127.000000000000000000","liquid_shares":"246330794.000000000000000000"},{"operator_address":"cosmosvaloper1ualhu3fjgg77g485gmyswkq3w0dp7gys6qzwrv","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"6GzDGmdrmJf34j9o/QOnZ7v2vhwtCBmkaFVG0Pk7z5A="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"479277768299","delegator_shares":"479277768299.000000000000000000","description":{"moniker":"stake.systems | autocompound","identity":"7F82E4F0CAA26298","website":"https://stake.systems","security_contact":"","details":"building infrastructure to support awesome projects running in the blockchain landscape | autocompund via https://restake.app | reach us on telegram via https://t.me/stakesystems"},"unbonding_height":"11767036","unbonding_time":"2022-09-13T10:57:54.652326324Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"508485403.000000000000000000","liquid_shares":"16305618675.000000000000000000"},{"operator_address":"cosmosvaloper1u724thtn8z47nw9nvel367m3qh0gqnxe4g555a","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"gpw33HAeq7Yg6acPOnDJ3TSiUK7/AKTCTD1L8jzLsMU="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"228834","delegator_shares":"228834.000000000000000000","description":{"moniker":"MEET.ONE","identity":"E95BCFC169E16509","website":"","security_contact":"","details":""},"unbonding_height":"193762","unbonding_time":"2020-01-17T09:12:19.563223089Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-05-31T02:10:02.112983415Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1ul2me6vukg2vac2p6ltxmqlaa7jywdgt8q76ag","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"fjKz5EcrpVII/MzwTF/d+3FHEIMJtSZfU9WMaH+b/Ok="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"619604013782","delegator_shares":"621155037720.989450425371982723","description":{"moniker":"HyperblocksPro","identity":"B073FA5BAD230585","website":"https://hyperblocks.pro/","security_contact":"","details":"Secure the network and earn rewards with Hyperblocks.pro, one of the first companies in the world fully focused on Proof Of Stake protocols"},"unbonding_height":"20596739","unbonding_time":"2024-06-16T15:38:00.772266296Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.250000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-04-28T15:22:16.472211828Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["43738","51107","76654","98199","116697","119692","235938","573152","594690","599782","609783","613979","620960","624913","628106","632570","637252","641988","646549","650005","655624","660697","665347","675194","686595","695587","705095","711470"],"validator_bond_shares":"7025244.305497856349289697","liquid_shares":"245968925.487107963870106512"},{"operator_address":"cosmosvaloper1ul636ump9c6c00vtxxfgtmsslggj24y9x5wu4f","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"M92S1rjsrI69tgrdBQvQnBrQiZ4FTH7P9c7P8RkLlRg="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"20000","delegator_shares":"20000.000000000000000000","description":{"moniker":"pyphagores","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.020000000000000000"},"update_time":"2022-09-11T14:09:28.371973851Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1ulawrs2d3ajw083a9u6nxsyg5j93kdu6pudrag","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"gn05Ah+rnFOlgMLwYJRmvHyMJzswDNoQOepjzThH4vc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"191285497128","delegator_shares":"191285497128.000000000000000000","description":{"moniker":"NEOPIN","identity":"BBAF5D80A455FF90","website":"https://neopin.io","security_contact":"","details":"NEOPIN is a non-custodial CeDeFi protocol for the secure use of crypto with regulatory frameworks while leveraging the benefits of both CeFi and DeFi. Providing decentralized staking protocol alongside Yield Farm, Swap and multi-chain bridge."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1000000.000000000000000000","liquid_shares":"245344862.000000000000000000"},{"operator_address":"cosmosvaloper1armvgtd477axezdsql30s4cah03xzcrlykvc2x","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"RxDn0Df8uLEjIUmh2i9YVFWLwEQRm2JwLDQJqdKefNs="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"2020801","delegator_shares":"2021002.094697368745177212","description":{"moniker":"nakanodo.xyz","identity":"B1CD2E301F524B52","website":"www.nakanodo.xyz","security_contact":"validators@nakanodo.xyz","details":"Stake those lemons."},"unbonding_height":"13463963","unbonding_time":"2023-01-20T14:51:40.270801964Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-26T00:45:46.550063316Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.995123702773034936"},{"operator_address":"cosmosvaloper1atpewucekh08gc8h4e6jv8fa7p9k84mmwlzqje","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"JvOQo/mnYPFGsEB/iE1CMe47wUZkHBKBZ1ML0Xt5Jrc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"189990886630","delegator_shares":"190009887572.019864837994037005","description":{"moniker":"gumi","identity":"E4C8E3D6132657D1","website":"https://gu3.co.jp/","security_contact":"","details":"Crypto Games \u0026 Professional Staking Service for Atom, Avalanche, Sui, Oasys, Agoric, Theta"},"unbonding_height":"19980525","unbonding_time":"2024-05-04T11:48:55.554492598Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-07-03T09:52:52.340906976Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["160119","160755","161347","624912"],"validator_bond_shares":"10011729.000000000000000000","liquid_shares":"245349962.501006785492758628"},{"operator_address":"cosmosvaloper1awqm5sweq0z3uyl49ge7rcxpd5lpeln3ldnapc","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"sWh1zdWCDy5uCoy44c0sRJ83RaPBsZcDcQDA3aMsfAc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10000","delegator_shares":"10000.000000000000000000","description":{"moniker":"endgame","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"2019-05-17T21:38:20.997194615Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-04-23T17:56:27.181355254Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1awguwfrm22sh7yewkywrjujukc75a3r3tpwfyp","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"J/r7ipKQCyygtIS1V/3XKPgMFRM0WmHSaE5jzo3KfSI="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"340904886","delegator_shares":"340904886.000000000000000000","description":{"moniker":"Foundry USA","identity":"","website":"https://foundrystaking.com","security_contact":"stakingeng@foundrydigital.com","details":"Foundry works to empower a decentralized infrastructure. We are protocol-agnostic and seek to support like-minded blockchain entrepreneurs who share our mission to advance the industry."},"unbonding_height":"14272350","unbonding_time":"2023-03-21T19:34:40.859960810Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-02-22T21:46:42.514131334Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1000.000000000000000000","liquid_shares":"30000.000000000000000000"},{"operator_address":"cosmosvaloper1asazdfn60g4nakccc9leh37du0946l5fnnluy6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"0W5lu6d/pzthl14bJ9SSLKCEBQUxcqGCOstPvF1KxvU="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"9989100","delegator_shares":"9990000.000000000000000000","description":{"moniker":"PlatON","identity":"20351EBF3F9CA0F2","website":"https://cosmos.network","security_contact":"","details":"PlatON is a cryptographic-based computing network which features in high scalability and privacy"},"unbonding_height":"28097","unbonding_time":"2020-01-03T23:05:38.548986017Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-06-27T08:36:17.364883822Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1a3yjj7d3qnx4spgvjcwjq9cw9snrrrhu5h6jll","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"NK3/1mb/ToXmxlcyCK8HYyudDn4sttz1sXyyD+42x7I="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"7744473203","delegator_shares":"7744473203.000000000000000000","description":{"moniker":"Coinbase Custody","identity":"Coinbase Custody","website":"https://custody.coinbase.com","security_contact":"","details":"Coinbase Custody Cosmos Validator"},"unbonding_height":"11418675","unbonding_time":"2022-08-16T23:21:10.017630516Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2020-02-05T00:29:51.081896503Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1a37ze3yrr2y9nn98l6frhjskmufvd40cpyd0gq","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"IT//4T/UK3SRf8e/e2gbAogzrQ7EtiV2Mpy+rGR4In0="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"434405852369","delegator_shares":"434405852369.000000000000000000","description":{"moniker":"ECO Stake 🌱","identity":"5992A6D423A406D6","website":"https://ecostake.com","security_contact":"support@ecostake.com","details":"ECO Stake is a climate positive validator 🌱 Carbon neutral and 10% of commission is donated to climate causes 🌍 Check out REStake.app on our website and let us auto-compound your staking rewards for you 🔄"},"unbonding_height":"18037823","unbonding_time":"2023-12-18T18:43:33.466511219Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-28T11:45:32.308838128Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["202119"],"validator_bond_shares":"300000000.000000000000000000","liquid_shares":"10442198315.000000000000000000"},{"operator_address":"cosmosvaloper1aj76wlhlf7rsru38crq9qn7ygyy00f9c7lxz49","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"x5RgSbycF24hWrNWjrb/m/D58c75TTb7ad+k3SJIuZs="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"Sir Francis Node | 100% Carbon Compensated","identity":"A2C575B1C7B2824D","website":"","security_contact":"","details":"Buying Carbon Credits on Regen asap"},"unbonding_height":"10140519","unbonding_time":"2022-05-07T15:40:06.012972390Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.050000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1a4qlael79p76my9pml6thwhnnzsxyy4ajrvd9s","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"hXWKc5cfl9i5pl1/+pnnijnIznAmQcuLtejmuu5kB9A="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"188763492526","delegator_shares":"188782370532.943051830117676987","description":{"moniker":"Multiplex","identity":"4062E136FF6C8968","website":"https://multiplexlabs.xyz","security_contact":"business@multiplexlabs.xyz","details":"Multiplex is on the mission to shape the future of Web3. It is a research-driven lab focusing on building the decentralized infrastructure. ➡️ https://restake.multiplexlabs.xyz/cosmoshub"},"unbonding_height":"14333079","unbonding_time":"2023-03-26T07:01:06.047048582Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.200000000000000000"},"update_time":"2022-10-18T03:43:37.481379941Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"10015923.588765726216404448","liquid_shares":"245359964.816248170798139603"},{"operator_address":"cosmosvaloper1aewyh4gtvayx6v7w592jdfylawk4rsu9tfvfgm","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"bEstw+QioqJum3h001Mvby4kfKTC3g4EONffGy0S0gU="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"362396701553","delegator_shares":"362396701553.000000000000000000","description":{"moniker":"Silk Nodes","identity":"1326A75B9148A214","website":"SilkNodes.io","security_contact":"info@silknodes.io","details":"Silk Nodes pride ourselves on being 100% bare metal validators, running our own infrastructure to validate the chains we are active on, we are also proud to say we run IBC relayer nodes to help support the networks."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-07-27T23:31:13.045199604Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"53433173097.000000000000000000","liquid_shares":"95516257332.000000000000000000"},{"operator_address":"cosmosvaloper1am8wmhwta4swx8f4quvffu7hqw48aujwypp0ew","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"I1pCYhsRQasjvFNFv+RH52T/Hv/sbKH53RBOp4Wp/14="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"229609712566","delegator_shares":"229609712566.000000000000000000","description":{"moniker":"Huginn","identity":"D27EE330254D4F6A","website":"https://huginn.tech","security_contact":"stake@huginn.tech","details":"Professional staking service. 7/24 monitoring and best uptime. Huginn is an organization that aims to teach its community about Cosmos SDK and Blockchain."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-09-30T10:55:03.647274980Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1am80fauk3gnzcr76ylg0yju4f0chen5xke6pwk","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QTDzbwIhyp1+HdncXb3IUPlbUA5ONWkM/gGycrm76Vw="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"3188515","delegator_shares":"3188515.000000000000000000","description":{"moniker":"windpowerstake","identity":"6B633475425442FA","website":"http://windpowerstake.com","security_contact":"","details":"windpowerstake is charging up"},"unbonding_height":"10107137","unbonding_time":"2022-05-04T21:32:48.511941087Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper17q802krsnxmntnt8ufhhq2trx27rf9fndtczk4","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"7DnecENwYf731bInCTtBjF9itupmvz6XeqFEZawY+pM="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"920000","delegator_shares":"920000.000000000000000000","description":{"moniker":"Blockwavelabs","identity":"BA341405E1973689","website":"https://www.blockwavelabs.io/","security_contact":"","details":"This is Blockwave Labs validator. Stake and earn!"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-11-22T08:32:45.205833512Z"},"min_self_delegation":"100","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper17zcpywlhgcpk7ff505vr8mnc4wwpv5fcta6enz","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"m3Wb9Bj6SRugbyA1fdFXWGh8q56z30ZMILC8qMQys9c="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1009905","delegator_shares":"1010005.899387852768949636","description":{"moniker":"btd","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"7644015","unbonding_time":"2021-10-04T02:07:51.387056258Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.500000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.999097814673349964"},{"operator_address":"cosmosvaloper17r0cp9zrtkvzlz7a2r09gmdxwqfyje98l3k9h6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"BsYoKd7a+RqAjeHxDYvSVdJPIZ6xzclm3J+gDgOxPYM="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"960525649327","delegator_shares":"960525649327.000000000000000000","description":{"moniker":"Kahuna","identity":"496198D003A5A717","website":"https://www.kahuna.network/","security_contact":"security@kahuna.network","details":"Secure the Cosmos network and delegate with us. Kahuna is a tech-focused investment firm dedicated to Blockchain Infrastructure, DeFi, and Gaming startups. Follow us on https://x.com/kahunahq"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-02-22T15:35:50.521213748Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper17yn0psnms2djwnw2x8pcy4uqs2ccrtczl2jp88","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"LFaX4uymeXKDoqHFe4QGyTHViMdW+oPYBnUwA8fKN1U="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"100010010","delegator_shares":"100010010.000000000000000000","description":{"moniker":"Nodes.Guru","identity":"28B672FCE6BBD562","website":"https://stake.nodes.guru","security_contact":"security@nodes.guru","details":"Guru of non-custodial staking. Professional node running, low fees, best uptime and 24/7 customer support."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.100000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2023-09-05T19:33:50.025389466Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper179luvthvww4t0cawrcsv3t7a8amr4n7gjxuhpx","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"XT2cd3vPr4lGXjN+Zv8ajeeVu9KbayJv+cAHVtORjg0="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"Crypto Plant","identity":"FA4AED58B939EF70","website":"cryptoplant.notion.site","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-10-31T16:31:37.480741290Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper17w8wc8y2jg2fjnkfxfw8z7a84qtuvyrgd89hm4","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"Umw7tz4oFvJu2N9DsIU4RsVGfqqCOutsepwgzUXHO6M="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"550817343652","delegator_shares":"550817343652.000000000000000000","description":{"moniker":"Dora Factory PGS","identity":"","website":"https://dorafactory.org/","security_contact":"node-operation@dorahacks.com","details":""},"unbonding_height":"14800807","unbonding_time":"2023-04-29T09:32:49.747021197Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"1.000000000000000000"},"update_time":"2023-02-20T18:14:19.260867433Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["19340","19546","20707"],"validator_bond_shares":"500000000.000000000000000000","liquid_shares":"10329865032.000000000000000000"},{"operator_address":"cosmosvaloper174glllafa668rcr2qzf5m0844ve60h0urf3h6u","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"k9UKX2inE/CiihceG/qNksx04KxntjnfCKqHzNuOApM="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"8999103","delegator_shares":"9000003.000120011977195324","description":{"moniker":"ChainPartners","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"21090","unbonding_time":"2020-01-03T09:30:59.515933589Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.300000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper174tvh2dty7vsvwn2cfsmkwq8tplqgr5fh2nlvp","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"S6k6/nN6Ig5EST6ArOkzErQWsG2LHtwe/emZhA34+HE="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"Regenerator | Green Validator 🌱","identity":"8E4FE39FA2D93701","website":"https://regenerator.online/","security_contact":"","details":"Secure and trusted green validator. Find us on the Regen.Network"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.120000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-06-21T11:57:58.760229516Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper17kgrtuunt4zmauf3t2442m800kd8xsk9hcwsls","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"6vMOQjboFPm15ZTLGXFAnHoNHOERpRwMm/d5IS91HZE="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1000000","delegator_shares":"1000000.000000000000000000","description":{"moniker":"Booga Beras","identity":"A3870C87F2634CB5","website":"","security_contact":"sec@vased.fi","details":"Booga Beras validator. Beras grow together"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-04-13T12:18:23.657532381Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper17h2x3j7u44qkrq0sk8ul0r2qr440rwgjkfg0gh","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"wUITCsvuysiVpQP9fUynw3fsIRX+qMBQjFoHwwaXeS8="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"228401029912","delegator_shares":"228401029912.000000000000000000","description":{"moniker":"FreshSTAKING","identity":"63575EE3F0F9FAFC","website":"https://FreshSTAKING.com","security_contact":"security@freshstaking.com","details":"Since 2019, FreshSTAKING runs on bare metal in a SSAE16 SOC2 certified Tier 4 datacenter with geographically distributed private sentry nodes, YubiHSM2 hardware protected keys, with 24/7 monitoring, alerting, and analytics."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"430000000.000000000000000000","liquid_shares":"9056564407.000000000000000000"},{"operator_address":"cosmosvaloper17cy09npjq4sylkt56kwcuqcd74hlxj3fq4hwjd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"rd265YVpcbRVlIAtDG4E0h4J3HC27o7iXDK/Gn+fSg8="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10004","delegator_shares":"8340.506900256620492150","description":{"moniker":"topool","identity":"9A866486C2AADA48","website":"http://topool.io","security_contact":"","details":"The world's top PoS and Staking service providers in the future"},"unbonding_height":"3198813","unbonding_time":"2020-09-22T08:08:54.101682776Z","commission":{"commission_rates":{"rate":"0.200000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.200000000000000000"},"update_time":"2020-07-20T02:12:11.892379717Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"8337.172031444042875000"},{"operator_address":"cosmosvaloper17eqvq9h0jyd8mxtj2xrn6ksfu54qzw4llud7z6","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"yRIEtY4AhncUQhk2uud6u3wM9HJD3wN96FoQO20T4I0="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"379941265","delegator_shares":"379941265.000000000000000000","description":{"moniker":"MyCosmosValidator","identity":"","website":"","security_contact":"","details":"\u0026"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper17mggn4znyeyg25wd7498qxl7r2jhgue8u4qjcq","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"+LbXwDMu37jkBRBLFtXazRfEd2ytSAkIncZ/Ng+6jVI="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"779781871809","delegator_shares":"779781871809.000000000000000000","description":{"moniker":"01node","identity":"7BDD4C2E94392626","website":"https://01node.com","security_contact":"secops@01node.com","details":"01node Professional Staking Services for Cosmos, Iris, Terra, Solana, Agoric, Evmos, Nomic, Osmosis, Near, Celestia, Skale"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-04-16T10:56:46.112778438Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"1000000000.000000000000000000","liquid_shares":"9075089310.000000000000000000"},{"operator_address":"cosmosvaloper1lzhlnpahvznwfv4jmay2tgaha5kmz5qxerarrl","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"5qKdBzdr8XHw2BWR/8yEceFRWEjGpzsqBo6q0OVkf9g="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"2328226583923","delegator_shares":"2328226583923.000000000000000000","description":{"moniker":"Citadel.one","identity":"EBB03EB4BB4CFCA7","website":"https://citadel.one","security_contact":"","details":"Citadel.one is a multi-asset non-custodial staking platform that lets anyone become a part of decentralized infrastructure and earn passive income. Stake with our nodes or any other validator across multiple networks in a few clicks."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-01-08T10:27:33.878006Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"2841500000.000000000000000000","liquid_shares":"142219605272.000000000000000000"},{"operator_address":"cosmosvaloper1lrzxwu4dmy8030waevcpft7rpxjjz26cpzvumd","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"yHsfXtgIr8Drb6+pcEa141QSdlkki6AyNrLmyCwO8CA="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"405892445244","delegator_shares":"405892445244.000000000000000000","description":{"moniker":"node101","identity":"8B06B351C06C1F87","website":"https://node101.io","security_contact":"hello@node101.io","details":"We are a validator on various projects within the Cosmos ecosystem and are passionate about supporting developers in the blockchain space."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-09-30T14:40:08.938629396Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1lyvcvqmyy75dwtrzk7a5eznf0zgpntkhv8p2ta","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"QVbaH2xfeLgICCyVUf8tD3qU7E7GY40NvdfUWpvAw5w="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"5243813","delegator_shares":"5243813.000000000000000000","description":{"moniker":"StakingCabin","identity":"C0522DF992B0C407","website":"https://stakingcabin.com","security_contact":"richard@stakingcabin.com","details":"stakingcabin"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2023-10-12T01:38:47.447437881Z"},"min_self_delegation":"0","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1l9fwl9c77zx850htsr20pq3ltc379xt86ndelm","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"TJEhyrfIV9dq5Z3XaaD3coUAUxrJTCcycpGVPQceNog="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"302728641","delegator_shares":"302758912.480343923014606942","description":{"moniker":"CosmosLink","identity":"3F7807C66CE770B0","website":"","security_contact":"","details":"Based on Cosmos network digital asset security value-added service provider"},"unbonding_height":"3482598","unbonding_time":"2020-10-16T11:26:53.132180931Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20001.999908581092795550"},{"operator_address":"cosmosvaloper1lt7f9u99mlfv5ysxjtvn3ql9k5nxcl97k9rqqf","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"RdEDmSC/fRq3Qv4zsxJL13+MSXslpKIm2Z77XdK6wkc="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1","delegator_shares":"1.000000000000000000","description":{"moniker":"oneUatom2","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-09-20T08:13:34.229134850Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1l034wm5h2hktkdq75fd6p099kwzhljn7q7sqnr","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"maYRAvapUSnuj6jdGDZucCbbel8ypzK90Tujx3nICYc="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"75020000","delegator_shares":"75020000.000000000000000000","description":{"moniker":"Andromaverse Labs","identity":"86A0F841E24F3C34","website":"https://linktr.ee/andromaverse","security_contact":"","details":"Keep Looking Up"},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"20000.000000000000000000"},{"operator_address":"cosmosvaloper1l5rgg6k87m6x5hl50xg5q7t680d672z87gzd7a","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"v9bDqOoRolI50tqaGl5TqMlgJ++rMwgC0QZonsI0rQQ="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"10500087905","delegator_shares":"10501138005.000100008686555849","description":{"moniker":"hoo.com","identity":"","website":"https://hoo.com","security_contact":"","details":""},"unbonding_height":"10001","unbonding_time":"2020-01-02T11:58:18.459331455Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.060000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"0.000000000000000000"},{"operator_address":"cosmosvaloper1lktjhnzkpkz3ehrg8psvmwhafg56kfss3q3t8m","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"z/Dg9WU/rlIB+LaQVMMHW/a7rvalfIcyz3VdOwfvguc="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"400360241647","delegator_shares":"400400281409.617151236443159909","description":{"moniker":"Umbrella ☔","identity":"A530AC4D75991FE2","website":"https://umbrellavalidator.com","security_contact":"","details":"One of the winners of Cosmos Game of Stakes, and HackAtom3."},"unbonding_height":"16478013","unbonding_time":"2023-08-29T04:44:40.843264105Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"1.000000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2020-09-01T18:40:38.071399488Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["110365"],"validator_bond_shares":"666000000.000000000000000000","liquid_shares":"245339439.925460027566265628"},{"operator_address":"cosmosvaloper1lkujuk2004p3w42tgvuvqnsdmsq8u6jqkwf9wj","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"dHJLjV0TkgEE3ye2Jv4ahyY32tQScvmJv5lq80dE2+Y="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"234304566931","delegator_shares":"234374872042.008223447431969504","description":{"moniker":"BitValidator","identity":"89BB5B0D452D7EDF","website":"https://bitvalidator.com","security_contact":"","details":"Engineering a safer world bit by bit"},"unbonding_height":"19980538","unbonding_time":"2024-05-04T11:50:13.561807531Z","commission":{"commission_rates":{"rate":"0.060000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-12T18:44:56.896021535Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":["471453","624916"],"validator_bond_shares":"6000600.056812178416760169","liquid_shares":"255454419.817657318567421831"},{"operator_address":"cosmosvaloper1lcwxu50rvvgf9v6jy6q5mrzyhlszwtjxhtscmp","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"vGSKfbQyKApvBhinpOOA0XQAdjxceihYNwtGskfZGyQ="},"jailed":false,"status":"BOND_STATUS_BONDED","tokens":"566221611892","delegator_shares":"566278238265.926262525975716222","description":{"moniker":"stakezone","identity":"0A888728046018EC","website":"http://stake.zone","security_contact":"","details":"reliable validator operations"},"unbonding_height":"16235008","unbonding_time":"2023-08-11T22:10:02.233956590Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.050000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":["98200"],"validator_bond_shares":"6000600.052980521977383395","liquid_shares":"5803722564.341445337172420792"},{"operator_address":"cosmosvaloper1lc4wdzlvryg7fk9fc39d3yceu56gv4ea4jet3z","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"nfGCtTbDv5D1W9UDCDSmgfuEyDzyHeno5zKByq5Mmb4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"109991","delegator_shares":"110001.000090917356123284","description":{"moniker":"My Basement Validator","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"7649105","unbonding_time":"2021-10-04T12:39:30.353290900Z","commission":{"commission_rates":{"rate":"0.500000000000000000","max_rate":"0.800000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2019-03-22T22:40:05.047958727Z"},"min_self_delegation":"100000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.909173561232839349"},{"operator_address":"cosmosvaloper1l634uf3kmyrtg6pl2dpfar9fdkjgtcmqjscd86","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"6IE9Z2Q2OZdVE4jONZ0XgPeTZzR1HZXG/Otifcg4BGg="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"42647137","delegator_shares":"42647137.000000000000000000","description":{"moniker":"ChainTools","identity":"A3D7C36FA55681A2","website":"https://chaintools.tech/","security_contact":"","details":"STAKE | LEARN | EARN. Delegate to our validators and dive into blockchain technology with us."},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.100000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"},{"operator_address":"cosmosvaloper1l6udzyaz8xaxv4hpagwauacm95jlcec3xlht2u","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"KuozyQN5RwhhHcT7b5uJpQKHuBQSXCccmOu3Chn3Gm4="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"1509859","delegator_shares":"1510007.966211737543057868","description":{"moniker":"StakeHouse","identity":"A1AAB1D6D0E8F976","website":"stakehouse.org","security_contact":"","details":"Low fees. No hassle. Enjoy your meal."},"unbonding_height":"2480548","unbonding_time":"2020-07-24T05:09:12.535497793Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.986623331963733420"},{"operator_address":"cosmosvaloper1lmu2hvm0prpkmacy7lw9uy3wp7fescmsuevrc9","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"R2rIHCEUDVr2yNqVKavVMXpGxyeQSqO9+fJXQ+G8i3Y="},"jailed":true,"status":"BOND_STATUS_UNBONDED","tokens":"3733239","delegator_shares":"3733984.487393446045383973","description":{"moniker":"Masternode24.de","identity":"FD7479E6C05B24BE","website":"https://masternode24.de","security_contact":"","details":"Höchste Ansprüche an uns selbst, für höchste Transparenz und Sicherheit für unsere Kunden"},"unbonding_height":"8714005","unbonding_time":"2022-01-06T08:40:58.294562162Z","commission":{"commission_rates":{"rate":"0.050000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2024-03-20T10:40:35.784132044Z"},"min_self_delegation":"1","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10001.999494189260724348"},{"operator_address":"cosmosvaloper1lapm2cq4qjrl4fm5xcftfhg245m63d307y6u7j","consensus_pubkey":{"@type":"/cosmos.crypto.ed25519.PubKey","key":"1Lt+cRGXjtRDlQSoQ+DPWj/GNYOzl+0U+7BFAvruu5s="},"jailed":false,"status":"BOND_STATUS_UNBONDED","tokens":"1010000","delegator_shares":"1010000.000000000000000000","description":{"moniker":"hy-hydrogen","identity":"","website":"","security_contact":"","details":""},"unbonding_height":"0","unbonding_time":"1970-01-01T00:00:00Z","commission":{"commission_rates":{"rate":"0.100000000000000000","max_rate":"0.200000000000000000","max_change_rate":"0.010000000000000000"},"update_time":"2022-01-12T00:40:05.033296932Z"},"min_self_delegation":"1000000","unbonding_on_hold_ref_count":"0","unbonding_ids":[],"validator_bond_shares":"0.000000000000000000","liquid_shares":"10000.000000000000000000"}],"pagination":{"next_key":null,"total":"542"}} \ No newline at end of file diff --git a/config.example.toml b/config.example.toml index be038b5..7ad9af4 100644 --- a/config.example.toml +++ b/config.example.toml @@ -34,15 +34,11 @@ provider-lcd-endpoint = "" # 1. coingecko-currency # Coingecko currency, specify it if you want to also get the wallet balance # in total in USD. Optional. -# 2. dex-screener-chain-id and dex-screener-pair. -# dexscreener.com's chain ID (usually "osmosis") and pair (usually pool ID). -# Won't be used if coingecko-currency is provided. -# Either coingecko-currency or these two params are required for getting token price. -# 3. denom +# 2. denom # The actual denom value (such as "uatom" for Cosmos Hub or "ibc/xxxxx" for IBC denoms). Required. -# 4. display-denom +# 3. display-denom # The denom that'll be returned in labels. Required. -# 5. denom-coefficient +# 4. denom-coefficient # The coefficient you need to multiply base denom to to get 1 token on Coingecko/DexScreener. # Is exposed by `cosmos_validators_exporter_denom_coefficient` metric. # Optional, defaults to 1_000_000. @@ -62,7 +58,7 @@ provider-lcd-endpoint = "" # which you can use to display a worthwhile of your unclaimed commission and use display-denom # label for legend. denoms = [ - { denom = "uatom", display-denom = "atom", coingecko-currency = "cosmos", denom-coefficient = 1000000, dex-screener-chain-id = "osmosis", dex-screener-pair = "1" }, + { denom = "uatom", display-denom = "atom", coingecko-currency = "cosmos", denom-coefficient = 1000000 }, ] # Bech32 prefix for a wallet address (example: "cosmos" for a Cosmos wallet). If omitted, # the self-delegation metric will not be present. diff --git a/go.mod b/go.mod index 7eb54b1..9c116ef 100644 --- a/go.mod +++ b/go.mod @@ -5,160 +5,53 @@ go 1.21.4 toolchain go1.22.1 require ( - github.com/BurntSushi/toml v1.1.0 - github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce - github.com/cosmos/cosmos-sdk v0.46.0 + cosmossdk.io/math v1.3.0 + github.com/BurntSushi/toml v1.4.0 + github.com/btcsuite/btcutil v1.0.2 github.com/creasty/defaults v1.7.0 github.com/google/uuid v1.6.0 github.com/guregu/null/v5 v5.0.0 - github.com/prometheus/client_golang v1.12.2 - github.com/rs/zerolog v1.27.0 - github.com/spf13/cobra v1.5.0 - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 - go.opentelemetry.io/otel v1.25.0 - go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 - go.opentelemetry.io/otel/sdk v1.25.0 - go.opentelemetry.io/otel/trace v1.25.0 + github.com/jarcoal/httpmock v1.3.1 + github.com/prometheus/client_golang v1.19.1 + github.com/rs/zerolog v1.33.0 + github.com/spf13/cobra v1.8.1 + github.com/stretchr/testify v1.9.0 + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 + go.opentelemetry.io/otel v1.27.0 + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 + go.opentelemetry.io/otel/sdk v1.27.0 + go.opentelemetry.io/otel/trace v1.27.0 ) require ( - cloud.google.com/go v0.112.0 // indirect - cloud.google.com/go/compute v1.24.0 // indirect - cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.6 // indirect - cloud.google.com/go/storage v1.36.0 // indirect - cosmossdk.io/errors v1.0.0-beta.7 // indirect - cosmossdk.io/math v1.3.0 // indirect - filippo.io/edwards25519 v1.0.0-rc.1 // indirect - github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect - github.com/99designs/keyring v1.2.1 // indirect - github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/armon/go-metrics v0.4.0 // indirect - github.com/aws/aws-sdk-go v1.40.45 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect - github.com/bgentry/speakeasy v0.1.0 // indirect - github.com/btcsuite/btcd v0.22.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect - github.com/cockroachdb/apd/v2 v2.0.2 // indirect - github.com/confio/ics23/go v0.7.0 // indirect - github.com/cosmos/btcutil v1.0.4 // indirect - github.com/cosmos/cosmos-proto v1.0.0-alpha7 // indirect - github.com/cosmos/go-bip39 v1.0.0 // indirect - github.com/cosmos/gorocksdb v1.2.0 // indirect - github.com/cosmos/iavl v0.19.0 // indirect - github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect - github.com/cosmos/ledger-go v0.9.2 // indirect - github.com/danieljoos/wincred v1.1.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/dgraph-io/badger/v2 v2.2007.4 // indirect - github.com/dgraph-io/ristretto v0.1.0 // indirect - github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect - github.com/dustin/go-humanize v1.0.0 // indirect - github.com/dvsekhvalnov/jose2go v1.5.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.5.4 // indirect - github.com/go-kit/kit v0.12.0 // indirect - github.com/go-kit/log v0.2.1 // indirect - github.com/go-logfmt/logfmt v0.5.1 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gogo/gateway v1.1.0 // indirect - github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.2.0 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect - github.com/golang/protobuf v1.5.4 // indirect - github.com/golang/snappy v0.0.4 // indirect - github.com/google/btree v1.0.1 // indirect - github.com/google/s2a-go v0.1.7 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect - github.com/googleapis/gax-go/v2 v2.12.0 // indirect - github.com/gorilla/handlers v1.5.1 // indirect - github.com/gorilla/mux v1.8.0 // indirect - github.com/gorilla/websocket v1.5.0 // indirect - github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect - github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 // indirect - github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/gtank/merlin v0.1.1 // indirect - github.com/gtank/ristretto255 v0.1.2 // indirect - github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.6.1 // indirect - github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-safetemp v1.0.0 // indirect - github.com/hashicorp/go-version v1.4.0 // indirect - github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect - github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect - github.com/inconshreveable/mousetrap v1.0.0 // indirect - github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.15.1 // indirect - github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/magiconair/properties v1.8.6 // indirect - github.com/mattn/go-colorable v0.1.12 // indirect - github.com/mattn/go-isatty v0.0.14 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect - github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/go-testing-interface v1.0.0 // indirect - github.com/mitchellh/mapstructure v1.5.0 // indirect - github.com/mtibben/percent v0.2.1 // indirect - github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pelletier/go-toml/v2 v2.0.2 // indirect - github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect - github.com/pkg/errors v0.9.1 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.34.0 // indirect - github.com/prometheus/procfs v0.7.3 // indirect - github.com/rakyll/statik v0.1.7 // indirect - github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect - github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect - github.com/spf13/afero v1.8.2 // indirect - github.com/spf13/cast v1.5.0 // indirect - github.com/spf13/jwalterweatherman v1.1.0 // indirect + github.com/prometheus/client_model v0.5.0 // indirect + github.com/prometheus/common v0.48.0 // indirect + github.com/prometheus/procfs v0.12.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.12.0 // indirect - github.com/stretchr/testify v1.9.0 // indirect - github.com/subosito/gotenv v1.4.0 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 // indirect - github.com/tendermint/btcd v0.1.1 // indirect - github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect - github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tendermint/tendermint v0.34.20 // indirect - github.com/tendermint/tm-db v0.6.7 // indirect - github.com/ulikunitz/xz v0.5.8 // indirect - github.com/zondax/hid v0.9.0 // indirect - go.etcd.io/bbolt v1.3.6 // indirect - go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 // indirect - go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 // indirect - go.opentelemetry.io/otel/metric v1.25.0 // indirect - go.opentelemetry.io/proto/otlp v1.1.0 // indirect - golang.org/x/crypto v0.21.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect + go.opentelemetry.io/otel/metric v1.27.0 // indirect + go.opentelemetry.io/proto/otlp v1.2.0 // indirect golang.org/x/exp v0.0.0-20221205204356-47842c84f3db // indirect - golang.org/x/net v0.23.0 // indirect - golang.org/x/oauth2 v0.17.0 // indirect - golang.org/x/sync v0.6.0 // indirect - golang.org/x/sys v0.18.0 // indirect - golang.org/x/term v0.18.0 // indirect - golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.5.0 // indirect - google.golang.org/api v0.162.0 // indirect - google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda // indirect - google.golang.org/grpc v1.63.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect - gopkg.in/ini.v1 v1.66.6 // indirect - gopkg.in/yaml.v2 v2.4.0 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect + google.golang.org/grpc v1.64.0 // indirect + google.golang.org/protobuf v1.34.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect - sigs.k8s.io/yaml v1.4.0 // indirect ) replace github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 diff --git a/go.sum b/go.sum index 8393cf4..be3f113 100644 --- a/go.sum +++ b/go.sum @@ -1,1961 +1,146 @@ -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= -cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.112.0 h1:tpFCD7hpHFlQ8yPwT3x+QeXqc2T6+n6T+hmABHfDUSM= -cloud.google.com/go v0.112.0/go.mod h1:3jEEVwZ/MHU4djK5t5RHuKOA/GbLddgTdVubX1qnPD4= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.24.0 h1:phWcR2eWzRJaL/kOiJwfFsPs4BaKq1j6vnpZrc1YlVg= -cloud.google.com/go/compute v1.24.0/go.mod h1:kw1/T+h/+tK2LJK0wiPPx1intgdAM3j/g3hFDlscY40= -cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= -cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= -cloud.google.com/go/iam v1.1.6 h1:bEa06k05IO4f4uJonbB5iAgKTPpABy1ayxaIZV/GHVc= -cloud.google.com/go/iam v1.1.6/go.mod h1:O0zxdPeGBoFdWW3HWmBxJsk0pfvNM/p/qa82rWOGTwI= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= -cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.36.0 h1:P0mOkAcaJxhCTvAkMhxMfrTKiNcub4YmmPBtlhAyTr8= -cloud.google.com/go/storage v1.36.0/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= -contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= -cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= -cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/math v1.0.0-beta.2 h1:17hSVc9ne1c31IaLDfjRojtN+y4Rd2N8H/6Fht2sBzw= -cosmossdk.io/math v1.0.0-beta.2/go.mod h1:u/MXvf8wbUbCsAEyQSSYXXMsczAsFX48e2D6JI86T4o= cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= -github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= -github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= -github.com/Antonboom/errname v0.1.6/go.mod h1:7lz79JAnuoMNDAWE9MeeIr1/c/VpSUWatBv2FH9NYpI= -github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= -github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/toml v1.1.0 h1:ksErzDEI1khOiGPgpwuI7x2ebx/uXQNw7xJpn9Eq1+I= -github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= -github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.1.0/go.mod h1:LGOGuvEgCfCQsy3JF2tRmpGDpzA53iZfyGEWSPwQ6/4= -github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= -github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= +github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= -github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-metrics v0.3.9/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc= -github.com/armon/go-metrics v0.4.0 h1:yCQqn7dwca4ITXb+CbubHmedzaQYHhNhrEXLYUeEe8Q= -github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= -github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= -github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.40.45 h1:QN1nsY27ssD/JmW4s83qmSb+uL6DG4GmCDzjmJB4xUI= -github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= -github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= -github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= -github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= -github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= -github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= -github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= -github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= +github.com/btcsuite/btcutil v1.0.2 h1:9iZ1Terx9fMIOtq1VrwdqfsATL9MC2l8ZrUY6YZ2uts= +github.com/btcsuite/btcutil v1.0.2/go.mod h1:j9HUFwoQRsZL3V4n+qG+CUnEGHOarIxfC3Le2Yhbcts= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= -github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/bufbuild/buf v1.4.0/go.mod h1:mwHG7klTHnX+rM/ym8LXGl7vYpVmnwT96xWoRB4H5QI= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= -github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= -github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E= -github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= -github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= -github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= -github.com/clbanning/mxj v1.8.4/go.mod h1:BVjHeAH+rl9rs6f+QIpeRl0tfu10SXn1pUSa5PVGJng= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211130200136-a8f946100490/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa h1:jQCWAUqqlij9Pgj2i/PB79y4KOPYVyFYdROxgaCwdTQ= -github.com/cncf/xds/go v0.0.0-20231128003011-0fa0005c9caa/go.mod h1:x/1Gn8zydmfq8dk6e9PdstVsDgu9RuyIIJqAaF//0IM= -github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= -github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/coinbase/rosetta-sdk-go v0.7.9 h1:lqllBjMnazTjIqYrOGv8h8jxjg9+hJazIGZr9ZvoCcA= -github.com/coinbase/rosetta-sdk-go v0.7.9/go.mod h1:0/knutI7XGVqXmmH4OQD8OckFrbQ8yMsUZTG7FXCR2M= -github.com/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8= -github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= -github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= -github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/cosmos-proto v1.0.0-alpha7 h1:yqYUOHF2jopwZh4dVQp3xgqwftE5/2hkrwIV6vkUbO0= -github.com/cosmos/cosmos-proto v1.0.0-alpha7/go.mod h1:dosO4pSAbJF8zWCzCoTWP7nNsjcvSUBQmniFxDg5daw= -github.com/cosmos/cosmos-sdk v0.46.0 h1:TwifvVmAmqUNB70tN1clrqExryWyBU3RxbI2QZEJUJY= -github.com/cosmos/cosmos-sdk v0.46.0/go.mod h1:u6Ci6+V+srijJhzctEEPYBygUz3O2YXP5ZijPnV6mt0= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= -github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= -github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= -github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.19.0 h1:sgyrjqOkycXiN7Tuupuo4QAldKFg7Sipyfeg/IL7cps= -github.com/cosmos/iavl v0.19.0/go.mod h1:l5h9pAB3m5fihB3pXVgwYqdY8aBsMagqz7T0MUjxZeA= -github.com/cosmos/ledger-cosmos-go v0.11.1 h1:9JIYsGnXP613pb2vPjFeMMjBI5lEDsEaF6oYorTy6J4= -github.com/cosmos/ledger-cosmos-go v0.11.1/go.mod h1:J8//BsAGTo3OC/vDLjMRFLW6q0WAaXvHnVc7ZmE8iUY= -github.com/cosmos/ledger-go v0.9.2 h1:Nnao/dLwaVTk1Q5U9THldpUMMXU94BOTWPddSmVB6pI= -github.com/cosmos/ledger-go v0.9.2/go.mod h1:oZJ2hHAZROdlHiwTg4t7kP+GKIIkBT+o6c9QWFanOyI= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/creasty/defaults v1.7.0 h1:eNdqZvc5B509z18lD8yc212CAqJNvfT1Jq6L8WowdBA= github.com/creasty/defaults v1.7.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM= -github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= -github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= -github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= -github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= -github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= -github.com/dgraph-io/badger/v2 v2.2007.2/go.mod h1:26P/7fbL4kUZVEVKLAKXkBXKOydDmM2p1e+NhhnBCAE= -github.com/dgraph-io/badger/v2 v2.2007.4 h1:TRWBQg8UrlUhaFdco01nO2uXwzKS7zd+HVdwV/GHc4o= -github.com/dgraph-io/badger/v2 v2.2007.4/go.mod h1:vSw/ax2qojzbN6eXHIx6KPKtCSHJN/Uz0X0VPruTIhk= -github.com/dgraph-io/ristretto v0.0.3-0.20200630154024-f66de99634de/go.mod h1:KPxhHT9ZxKefz+PCeOGsrHpl1qZ7i70dGTu2u+Ahh6E= -github.com/dgraph-io/ristretto v0.1.0 h1:Jv3CGQHp9OjuMBSne1485aDpUkTKEcUqF+jm/LuerPI= -github.com/dgraph-io/ristretto v0.1.0/go.mod h1:fux0lOrBhrVCJd3lcTHsIJhq1T2rokOu6v9Vcb3Q9ug= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= -github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= -github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= -github.com/docker/cli v20.10.14+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/cli v20.10.17+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/docker v20.10.7+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= -github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= -github.com/envoyproxy/protoc-gen-validate v1.0.4 h1:gVPz/FMfvh57HdSJQyvBtF00j8JU4zdyUgIUNhlgg0A= -github.com/envoyproxy/protoc-gen-validate v1.0.4/go.mod h1:qys6tmnRsYrQqIhm2bvKZH4Blx/1gTIZ2UKVY1M+Yew= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/firefart/nonamedreturns v1.0.1/go.mod h1:D3dpIBojGGNh5UfElmwPu73SwDCm+VKhHYqwlNOk2uQ= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= -github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= -github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= -github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= -github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= -github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= -github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= -github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= -github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= -github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= -github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang-sql/sqlexp v0.0.0-20170517235910-f1bb20e5a188/go.mod h1:vXjM/+wXQnTPR4KqTKDgJukSZ6amVRtWMPEjE6sQoK8= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= -github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.46.2/go.mod h1:3DkdHnxn9eoTTrpT2gB0TEv8KSziuoqe9FitgQLHvAY= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= -github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= -github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= -github.com/google/gofuzz v1.0.0 h1:A8PeW59pxE9IoFRqBp37U+mSNaQoZ46F1f0f863XSXw= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= -github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= -github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= -github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= -github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= -github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= -github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= -github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= -github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= -github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= -github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= -github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 h1:bkypFPDjIYGfCYD5mRBvpqxfYX1YCS1PXdKYWi8FsN0= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0/go.mod h1:P+Lt/0by1T8bfcF3z737NnSbmxQAppXMRziHUxPOC8k= github.com/guregu/null/v5 v5.0.0 h1:PRxjqyOekS11W+w/7Vfz6jgJE/BCwELWtgvOJzddimw= github.com/guregu/null/v5 v5.0.0/go.mod h1:SjupzNy+sCPtwQTKWhUCqjhVCO69hpsl2QsZrWHjlwU= -github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= -github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= -github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= -github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.6.1 h1:NASsgP4q6tL94WH6nJxKWj8As2H/2kop/bB1d8JMyRY= -github.com/hashicorp/go-getter v1.6.1/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= -github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= -github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-safetemp v1.0.0 h1:2HR189eFNrjHQyENnQMMpCiBAsRxzbTMIgBhEyExpmo= -github.com/hashicorp/go-safetemp v1.0.0/go.mod h1:oaerMy3BhqiTbVye6QuFhFtIceqFoDHxNAB65b+Rj1I= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go-version v1.4.0 h1:aAQzgqIrRKRa7w75CKpbBxYsmUoPjzVm1W59ca1L0J4= -github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d h1:dg1dEPuWpEqDnvIw251EVy4zlP8gWbsGj4BsUKCRpYs= -github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= -github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= -github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= -github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= -github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= -github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= -github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= -github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jarcoal/httpmock v1.3.1 h1:iUx3whfZWVf3jT01hQTO/Eo5sAYtB2/rqaUuOtpInww= +github.com/jarcoal/httpmock v1.3.1/go.mod h1:3yb8rc4BI7TCBhFY8ng0gjuLKJNquuDNiPaZjnENuYg= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= -github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= -github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= -github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= -github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= -github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= -github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= -github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= -github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= -github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= -github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= -github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= -github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= -github.com/lib/pq v0.0.0-20180327071824-d34b9ff171c2/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= -github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= -github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= -github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.12 h1:jF+Du6AlPIjs2BiUiQlKOX0rt3SujHxPnksPKZbaA40= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= -github.com/mattn/go-isatty v0.0.14 h1:yVuAays6BHfxijgZPzw+3Zlu5yQgKGP2/hcQbHb7S9Y= -github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/matttproud/golang_protobuf_extensions v1.0.1 h1:4hp9jkHxhMHkqkrB3Ix0jegS5sx/RkqARlsWZ6pIwiU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= -github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= -github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= -github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= -github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= -github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= -github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= -github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= -github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= -github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= -github.com/nats-io/jwt v1.2.2/go.mod h1:/xX356yQA6LuXI9xWW7mZNpxgF2mBmGecH+Fj34sP5Q= -github.com/nats-io/jwt/v2 v2.0.3/go.mod h1:VRP+deawSXyhNjXmxPCHskrR6Mq50BqpEI5SEcNiGlY= -github.com/nats-io/nats-server/v2 v2.5.0/go.mod h1:Kj86UtrXAL6LwYRA6H4RqzkHhK0Vcv2ZnKD5WbQ1t3g= -github.com/nats-io/nats.go v1.12.1/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w= -github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= -github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= -github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= -github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= +github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/maxatome/go-testdeep v1.12.0 h1:Ql7Go8Tg0C1D/uMMX59LAoYK7LffeJQ6X2T04nTH68g= +github.com/maxatome/go-testdeep v1.12.0/go.mod h1:lPZc/HAcJMP92l7yI6TRz1aZN5URwUBUAfUNvrclaNM= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= -github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= -github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= -github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc= -github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= -github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/ory/dockertest/v3 v3.9.1/go.mod h1:42Ir9hmvaAPm0Mgibk6mBPi7SFvTXxEcnztDYOJ//uM= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= -github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= -github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= -github.com/pelletier/go-toml/v2 v2.0.2 h1:+jQXlF3scKIcSEKkdHzXhCTDLPFi5r1wnK6yPS+49Gw= -github.com/pelletier/go-toml/v2 v2.0.2/go.mod h1:MovirKjgVRESsAvNZlAjtFwV867yGuwRkXbG66OzopI= -github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= -github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/polyfloyd/go-errorlint v1.0.0/go.mod h1:KZy4xxPJyy88/gldCe5OdW6OQRtNO3EZE7hXzmnebgA= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= -github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= -github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= -github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.19/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= -github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= -github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= -github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= -github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= -github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= -github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= -github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= -github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs= -github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= -github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/prometheus/client_golang v1.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +github.com/prometheus/client_model v0.5.0 h1:VQw1hfvPvk3Uv6Qf29VrPF32JB6rtbgI6cYPYQjL0Qw= +github.com/prometheus/client_model v0.5.0/go.mod h1:dTiFglRmd66nLR9Pv9f0mZi7B7fk5Pm3gvsjB5tr+kI= +github.com/prometheus/common v0.48.0 h1:QO8U2CdOzSn1BBsmXJXduaaW+dY/5QLjfB8svtSzKKE= +github.com/prometheus/common v0.48.0/go.mod h1:0/KsvlIEfPQCQ5I2iNSAWKPZziNCvRs5EC6ILDTlAPc= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= +github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= -github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= -github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= -github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= -github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= -github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/tenv v1.5.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= -github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= -github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= -github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= -github.com/spf13/cobra v1.5.0 h1:X+jTBEBqF0bHN+9cSMgmfuvv2VHJ9ezmFNf9Y/XstYU= -github.com/spf13/cobra v1.5.0/go.mod h1:dWXEIy2H428czQCjInthrTRUg7yKbok+2Qi/yBIJoUM= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk= -github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= +github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= +github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= -github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= -github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= -github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= -github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v1.0.0/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= -github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA= -github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= -github.com/subosito/gotenv v1.4.0 h1:yAzM1+SmVcz5R4tXGsNMu1jUl2aOJXoiWUCEwwnGrvs= -github.com/subosito/gotenv v1.4.0/go.mod h1:mZd6rFysKEcUhUHXJk0C/08wAgyDBFuwEYL7vWWGaGo= -github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= -github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= -github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= -github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= -github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RMWx1aInLzndwxKalgi5rTqgfXxOxbEI= -github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= -github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= -github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.20 h1:/pmvJhO3IqOxhbi8iRXudTjA2YKpaMqrLwFNkyxDSzw= -github.com/tendermint/tendermint v0.34.20/go.mod h1:KtOwCLYJcsS1ymtAfnjjAtXfXClbqcqjdqzFt2Em1Ac= -github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= -github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= -github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= -github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= -github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= -github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tomarrell/wrapcheck/v2 v2.6.1/go.mod h1:Eo+Opt6pyMW1b6cNllOcDSSoHO0aTJ+iF6BfCUbHltA= -github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= -github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= -github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= -github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= -github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= -github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= -github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= -github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= -github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= -github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= -github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= -github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= -github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= -go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= -go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= -go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= -go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= -go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= -go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= -go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= -go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= -go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= -go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= -go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0 h1:UNQQKPfTDe1J81ViolILjTKPr9WetKW6uei2hFgJmFs= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.47.0/go.mod h1:r9vWsPS/3AQItv3OSlEJ/E4mbrhUbbw18meOjArPtKQ= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0 h1:cEPbyTSEHlQR89XVlyo78gqluF8Y3oMeBkXGWzQsfXY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.50.0/go.mod h1:DKdbWcT4GH1D0Y3Sqt/PFXt2naRKDWtU+eE6oLdFNA8= -go.opentelemetry.io/otel v1.25.0 h1:gldB5FfhRl7OJQbUHt/8s0a7cE8fbsPAtdpRaApKy4k= -go.opentelemetry.io/otel v1.25.0/go.mod h1:Wa2ds5NOXEMkCmUou1WA7ZBfLTHWIsp034OVD7AO+Vg= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0 h1:dT33yIHtmsqpixFsSQPwNeY5drM9wTcoL8h0FWF4oGM= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.25.0/go.mod h1:h95q0LBGh7hlAC08X2DhSeyIG02YQ0UyioTCVAqRPmc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0 h1:Mbi5PKN7u322woPa85d7ebZ+SOvEoPvoiBu+ryHWgfA= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.25.0/go.mod h1:e7ciERRhZaOZXVjx5MiL8TK5+Xv7G5Gv5PA2ZDEJdL8= -go.opentelemetry.io/otel/metric v1.25.0 h1:LUKbS7ArpFL/I2jJHdJcqMGxkRdxpPHE0VU/D4NuEwA= -go.opentelemetry.io/otel/metric v1.25.0/go.mod h1:rkDLUSd2lC5lq2dFNrX9LGAbINP5B7WBkC78RXCpH5s= -go.opentelemetry.io/otel/sdk v1.25.0 h1:PDryEJPC8YJZQSyLY5eqLeafHtG+X7FWnf3aXMtxbqo= -go.opentelemetry.io/otel/sdk v1.25.0/go.mod h1:oFgzCM2zdsxKzz6zwpTZYLLQsFwc+K0daArPdIhuxkw= -go.opentelemetry.io/otel/trace v1.25.0 h1:tqukZGLwQYRIFtSQM2u2+yfMVTgGVeqRLPUYx1Dq6RM= -go.opentelemetry.io/otel/trace v1.25.0/go.mod h1:hCCs70XM/ljO+BeQkyFnbK28SBIJ/Emuha+ccrCRT7I= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v1.1.0 h1:2Di21piLrCqJ3U3eXGCTPHE9R8Nh+0uglSnOyxikMeI= -go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7ej/RNTae6MdY= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0 h1:9l89oX4ba9kHbBol3Xin3leYJ+252h0zszDtBwyKe2A= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.52.0/go.mod h1:XLZfZboOJWHNKUv7eH0inh0E9VV6eWDFB/9yJyTLPp0= +go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= +go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0 h1:QY7/0NeRPKlzusf40ZE4t1VlMKbqSNT7cJRYzWuja0s= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.27.0/go.mod h1:HVkSiDhTM9BoUJU8qE6j2eSWLLXvi1USXjyd2BXT8PY= +go.opentelemetry.io/otel/metric v1.27.0 h1:hvj3vdEKyeCi4YaYfNjv2NUje8FqKqUY8IlF0FxV/ik= +go.opentelemetry.io/otel/metric v1.27.0/go.mod h1:mVFgmRlhljgBiuk/MP/oKylr4hs85GZAylncepAX/ak= +go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kTWmI= +go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= +go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= +go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= +go.opentelemetry.io/proto/otlp v1.2.0 h1:pVeZGk7nXDC9O2hncA6nHldxEjm6LByfA2aN8IOkz94= +go.opentelemetry.io/proto/otlp v1.2.0/go.mod h1:gGpR8txAl5M03pDhMC79G6SdqNV26naRm/KDsgaHD8A= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= -golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220313003712-b769efc7c000/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.21.0 h1:X31++rzVUdKhX5sWmSOFZxx8UW/ldWx55cbf08iNAMA= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= golang.org/x/exp v0.0.0-20221205204356-47842c84f3db h1:D/cFflL63o2KSLJIwjlcIt8PR064j/xsmdEJL/YvY/o= golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200421231249-e086a090c8fd/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.17.0 h1:6m3ZPmLEFdVxKKWnKq4VqZ60gutO35zm+zrAHVmHyDQ= -golang.org/x/oauth2 v0.17.0/go.mod h1:OzPDGQiuQMguemayvdylqddI7qcD9lnSDb+1FiwQ5HA= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190130150945-aca44879d564/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220405210540-1e041c57c461/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.18.0 h1:FcHjZXDMxI8mM3nwhX9HlKop4C0YQvCVCdwYl2wOtE8= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= -golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= -golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= -google.golang.org/api v0.162.0 h1:Vhs54HkaEpkMBdgGdOT2P6F0csGG/vxDS0hWHJzmmps= -google.golang.org/api v0.162.0/go.mod h1:6SulDkfoBIg4NFmCuZ39XeeAgSHCPecfSUuDyYlAHs0= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= -google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= -google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200324203455-a04cca1dde73/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210917145530-b395a37504d4/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de h1:F6qOa9AZTYJXOUEr4jDysRDLrm4PHePlge4v4TGAlxY= -google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:VUhTRKeHn9wwcdrk73nvdC9gF178Tzhmt/qyaFcPLSo= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de h1:jFNzHPIeuzhdRwVhbZdiym9q0ory/xY3sA+v2wPg8I0= -google.golang.org/genproto/googleapis/api v0.0.0-20240227224415-6ceb2ff114de/go.mod h1:5iCWqnniDlqZHrd3neWVTOwvh/v6s3232omMecelax8= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda h1:LI5DOvAxUPMv/50agcLLoo+AdWc1irS9Rzz4vPuD1V4= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240401170217-c3f982113cda/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= -google.golang.org/grpc v1.8.0/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.19.1/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.24.0/go.mod h1:XDChyiUovWa60DnaeDeZmSW86xtLtjtZbwvSiRnRtcA= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.63.0 h1:WjKe+dnvABXyPJMD7KDNLxtoGk5tgk+YFWN6cBWjZE8= -google.golang.org/grpc v1.63.0/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5 h1:P8OJ/WCl/Xo4E4zoe4/bifHpSmmKwARqyqE4nW6J2GQ= +google.golang.org/genproto/googleapis/api v0.0.0-20240520151616-dc85e6b867a5/go.mod h1:RGnPtTG7r4i8sPlNyDeikXF99hMM+hN6QMm4ooG9g2g= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 h1:AgADTJarZTBqgjiUzRgfaBchgYB3/WFTC80GPwsMcRI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291/go.mod h1:EfXuqaE1J41VCDicxHzUDm+8rk+7ZdXzHV0IhO/I6s0= +google.golang.org/grpc v1.64.0 h1:KH3VH9y/MgNQg1dE7b3XfVK0GsPSIzJwdF617gUSbvY= +google.golang.org/grpc v1.64.0/go.mod h1:oxjF8E3FBnjp+/gVFYdWacaLDx9na1aqy9oovLpxQYg= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/ini.v1 v1.66.6 h1:LATuAqN/shcYAOkv3wl2L4rkaKqkcgTBQjOyYDvcPKI= -gopkg.in/ini.v1 v1.66.6/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.3.1/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= -mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= -nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= -nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= -pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= diff --git a/pkg/app.go b/pkg/app.go index 258e90b..5bac1c8 100644 --- a/pkg/app.go +++ b/pkg/app.go @@ -5,7 +5,6 @@ import ( "main/pkg/fs" generatorsPkg "main/pkg/generators" coingeckoPkg "main/pkg/price_fetchers/coingecko" - dexScreenerPkg "main/pkg/price_fetchers/dex_screener" statePkg "main/pkg/state" "main/pkg/tendermint" "main/pkg/tracing" @@ -73,7 +72,6 @@ func NewApp(configPath string, filesystem fs.FS, version string) *App { } coingecko := coingeckoPkg.NewCoingecko(appConfig, logger, tracer) - dexScreener := dexScreenerPkg.NewDexScreener(logger) rpcs := make(map[string]*tendermint.RPCWithConsumers, len(appConfig.Chains)) @@ -82,21 +80,21 @@ func NewApp(configPath string, filesystem fs.FS, version string) *App { } fetchers := []fetchersPkg.Fetcher{ - fetchersPkg.NewSlashingParamsFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewSoftOptOutThresholdFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewCommissionFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewDelegationsFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewUnbondsFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewSigningInfoFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewRewardsFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewBalanceFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewSelfDelegationFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewValidatorsFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewConsumerValidatorsFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewStakingParamsFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewPriceFetcher(logger, appConfig, tracer, coingecko, dexScreener), - fetchersPkg.NewNodeInfoFetcher(logger, appConfig, rpcs, tracer), - fetchersPkg.NewConsumerInfoFetcher(logger, appConfig, rpcs, tracer), + fetchersPkg.NewSlashingParamsFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewSoftOptOutThresholdFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewCommissionFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewDelegationsFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewUnbondsFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewSigningInfoFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewRewardsFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewBalanceFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewSelfDelegationFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewValidatorsFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewConsumerValidatorsFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewStakingParamsFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewPriceFetcher(logger, appConfig, tracer, coingecko), + fetchersPkg.NewNodeInfoFetcher(logger, appConfig.Chains, rpcs, tracer), + fetchersPkg.NewConsumerInfoFetcher(logger, appConfig.Chains, rpcs, tracer), } generators := []generatorsPkg.Generator{ diff --git a/pkg/fetchers/balance.go b/pkg/fetchers/balance.go index b8eb98d..2e2296a 100644 --- a/pkg/fetchers/balance.go +++ b/pkg/fetchers/balance.go @@ -15,7 +15,7 @@ import ( type BalanceFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer @@ -32,13 +32,13 @@ type BalanceData struct { func NewBalanceFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *BalanceFetcher { return &BalanceFetcher{ Logger: logger.With().Str("component", "balance_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -50,14 +50,14 @@ func (q *BalanceFetcher) Fetch( q.queryInfos = []*types.QueryInfo{} q.allBalances = map[string]map[string][]types.Amount{} - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { q.allBalances[chain.Name] = map[string][]types.Amount{} for _, consumerChain := range chain.ConsumerChains { q.allBalances[consumerChain.Name] = map[string][]types.Amount{} } } - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { rpc, _ := q.RPCs[chain.Name] for _, validator := range chain.Validators { diff --git a/pkg/fetchers/balance_test.go b/pkg/fetchers/balance_test.go new file mode 100644 index 0000000..a5f21d2 --- /dev/null +++ b/pkg/fetchers/balance_test.go @@ -0,0 +1,341 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestBalanceFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewBalanceFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameBalance, fetcher.Name()) +} + +func TestBalanceFetcherNoBechWalletPrefix(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + Validators: []config.Validator{{Address: "validator"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &BalanceFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(BalanceData) + assert.True(t, ok) + + chainData, ok := balanceData.Balances["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +func TestBalanceFetcherInvalidBechWalletPrefix(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "validator"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &BalanceFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(BalanceData) + assert.True(t, ok) + + chainData, ok := balanceData.Balances["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +func TestBalanceFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"balance": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &BalanceFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(BalanceData) + assert.True(t, ok) + + chainData, ok := balanceData.Balances["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestBalanceFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/bank/v1beta1/balances/cosmos1xqz9pemz5e5zycaa89kys5aw6m8rhgsvtp9lt2", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &BalanceFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(BalanceData) + assert.True(t, ok) + + chainData, ok := balanceData.Balances["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestBalanceFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/bank/v1beta1/balances/cosmos1xqz9pemz5e5zycaa89kys5aw6m8rhgsvtp9lt2", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &BalanceFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(BalanceData) + assert.True(t, ok) + + chainData, ok := balanceData.Balances["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestBalanceFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/bank/v1beta1/balances/cosmos1xqz9pemz5e5zycaa89kys5aw6m8rhgsvtp9lt2", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("balances.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &BalanceFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + balanceData, ok := data.(BalanceData) + assert.True(t, ok) + + chainData, ok := balanceData.Balances["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Len(t, validatorData, 1) + assert.InEpsilon(t, float64(596250), validatorData[0].Amount, 0.01) + assert.Equal(t, "uatom", validatorData[0].Denom) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestBalanceFetcherConsumer(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.neutron.quokkastake.io/cosmos/bank/v1beta1/balances/neutron1xqz9pemz5e5zycaa89kys5aw6m8rhgsv07va3d", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("balances.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"balance": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &BalanceFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + balanceData, ok := data.(BalanceData) + assert.True(t, ok) + + chainData, ok := balanceData.Balances["consumer"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Len(t, validatorData, 1) + assert.InEpsilon(t, float64(596250), validatorData[0].Amount, 0.01) + assert.Equal(t, "uatom", validatorData[0].Denom) +} diff --git a/pkg/fetchers/commission.go b/pkg/fetchers/commission.go index 995adb7..efb0bfc 100644 --- a/pkg/fetchers/commission.go +++ b/pkg/fetchers/commission.go @@ -14,7 +14,7 @@ import ( type CommissionFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer } @@ -25,13 +25,13 @@ type CommissionData struct { func NewCommissionFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *CommissionFetcher { return &CommissionFetcher{ Logger: logger.With().Str("component", "commission_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -44,14 +44,14 @@ func (q *CommissionFetcher) Fetch( allCommissions := map[string]map[string][]types.Amount{} - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { allCommissions[chain.Name] = map[string][]types.Amount{} } var wg sync.WaitGroup var mutex sync.Mutex - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { rpc, _ := q.RPCs[chain.Name] for _, validator := range chain.Validators { diff --git a/pkg/fetchers/commission_test.go b/pkg/fetchers/commission_test.go new file mode 100644 index 0000000..db2b0a1 --- /dev/null +++ b/pkg/fetchers/commission_test.go @@ -0,0 +1,218 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestCommissionFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewCommissionFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameCommission, fetcher.Name()) +} + +func TestCommissionFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"commission": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &CommissionFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(CommissionData) + assert.True(t, ok) + + chainData, ok := balanceData.Commissions["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestCommissionFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/distribution/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/commission", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &CommissionFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(CommissionData) + assert.True(t, ok) + + chainData, ok := balanceData.Commissions["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestCommissionFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/distribution/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/commission", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &CommissionFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(CommissionData) + assert.True(t, ok) + + chainData, ok := balanceData.Commissions["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestCommissionFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/distribution/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/commission", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("commission.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &CommissionFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + balanceData, ok := data.(CommissionData) + assert.True(t, ok) + + chainData, ok := balanceData.Commissions["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Len(t, validatorData, 1) + assert.InEpsilon(t, float64(35387184.119122794099577747), validatorData[0].Amount, 0.01) + assert.Equal(t, "uatom", validatorData[0].Denom) +} diff --git a/pkg/fetchers/consumer_info.go b/pkg/fetchers/consumer_info.go index 2e55f74..47de40c 100644 --- a/pkg/fetchers/consumer_info.go +++ b/pkg/fetchers/consumer_info.go @@ -14,7 +14,7 @@ import ( type ConsumerInfoFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer @@ -31,13 +31,13 @@ type ConsumerInfoData struct { func NewConsumerInfoFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *ConsumerInfoFetcher { return &ConsumerInfoFetcher{ Logger: logger.With().Str("component", "validators_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -49,8 +49,8 @@ func (f *ConsumerInfoFetcher) Fetch( f.queryInfos = []*types.QueryInfo{} f.allInfos = map[string]*types.ConsumerInfoResponse{} - f.wg.Add(len(f.Config.Chains)) - for _, chain := range f.Config.Chains { + f.wg.Add(len(f.Chains)) + for _, chain := range f.Chains { rpc, _ := f.RPCs[chain.Name] go f.processChain(ctx, rpc.RPC, chain) } diff --git a/pkg/fetchers/consumer_info_test.go b/pkg/fetchers/consumer_info_test.go new file mode 100644 index 0000000..1d8a3c6 --- /dev/null +++ b/pkg/fetchers/consumer_info_test.go @@ -0,0 +1,244 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/guregu/null/v5" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestConsumerInfoFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewConsumerInfoFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameConsumerInfo, fetcher.Name()) +} + +func TestConsumerInfoFetcherNotProvider(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ConsumerInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + consumerData, ok := data.(ConsumerInfoData) + assert.True(t, ok) + assert.Empty(t, consumerData.Info) +} + +func TestConsumerInfoFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + IsProvider: null.BoolFrom(true), + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"consumer-info": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ConsumerInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + consumerData, ok := data.(ConsumerInfoData) + assert.True(t, ok) + + chainData, ok := consumerData.Info["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestConsumerInfoFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/consumer_chains", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + IsProvider: null.BoolFrom(true), + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ConsumerInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + consumerData, ok := data.(ConsumerInfoData) + assert.True(t, ok) + assert.Empty(t, consumerData.Info) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestConsumerInfoFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/consumer_chains", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + IsProvider: null.BoolFrom(true), + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ConsumerInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + consumerData, ok := data.(ConsumerInfoData) + assert.True(t, ok) + assert.Empty(t, consumerData.Info) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestConsumerInfoFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/consumer_chains", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("consumer-info.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + IsProvider: null.BoolFrom(true), + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ConsumerInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + consumerData, ok := data.(ConsumerInfoData) + assert.True(t, ok) + + chainData, ok := consumerData.Info["chain"] + assert.True(t, ok) + assert.Len(t, chainData.Chains, 1) +} diff --git a/pkg/fetchers/consumer_validators.go b/pkg/fetchers/consumer_validators.go index efc9161..0b05ed8 100644 --- a/pkg/fetchers/consumer_validators.go +++ b/pkg/fetchers/consumer_validators.go @@ -14,7 +14,7 @@ import ( type ConsumerValidatorsFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer @@ -31,13 +31,13 @@ type ConsumerValidatorsData struct { func NewConsumerValidatorsFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *ConsumerValidatorsFetcher { return &ConsumerValidatorsFetcher{ Logger: logger.With().Str("component", "validators_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -49,7 +49,7 @@ func (f *ConsumerValidatorsFetcher) Fetch( f.queryInfos = []*types.QueryInfo{} f.allValidators = map[string]*types.ConsumerValidatorsResponse{} - for _, chain := range f.Config.Chains { + for _, chain := range f.Chains { f.wg.Add(len(chain.ConsumerChains)) rpc, _ := f.RPCs[chain.Name] diff --git a/pkg/fetchers/consumer_validators_test.go b/pkg/fetchers/consumer_validators_test.go new file mode 100644 index 0000000..7f2f53d --- /dev/null +++ b/pkg/fetchers/consumer_validators_test.go @@ -0,0 +1,231 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestConsumerValidatorsFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewConsumerValidatorsFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameConsumerValidators, fetcher.Name()) +} + +func TestConsumerValidatorsFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"consumer-validators": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + ChainID: "consumer", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ConsumerValidatorsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + validatorsData, ok := data.(ConsumerValidatorsData) + assert.True(t, ok) + + chainData, ok := validatorsData.Validators["consumer"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestConsumerValidatorsFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/consumer_validators/consumer", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + ChainID: "consumer", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ConsumerValidatorsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + validatorsData, ok := data.(ConsumerValidatorsData) + assert.True(t, ok) + assert.Empty(t, validatorsData.Validators) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestConsumerValidatorsFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/consumer_validators/consumer", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + ChainID: "consumer", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ConsumerValidatorsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + validatorsData, ok := data.(ConsumerValidatorsData) + assert.True(t, ok) + assert.Empty(t, validatorsData.Validators) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestConsumerValidatorsFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/consumer_validators/consumer", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("consumer-validators.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + ChainID: "consumer", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ConsumerValidatorsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + validatorsData, ok := data.(ConsumerValidatorsData) + assert.True(t, ok) + + chainData, ok := validatorsData.Validators["consumer"] + assert.True(t, ok) + assert.Len(t, chainData.Validators, 139) +} diff --git a/pkg/fetchers/delegations.go b/pkg/fetchers/delegations.go index 8943b54..4c99c38 100644 --- a/pkg/fetchers/delegations.go +++ b/pkg/fetchers/delegations.go @@ -14,7 +14,7 @@ import ( type DelegationsFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer } @@ -25,13 +25,13 @@ type DelegationsData struct { func NewDelegationsFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *DelegationsFetcher { return &DelegationsFetcher{ Logger: logger.With().Str("component", "delegations_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -47,14 +47,11 @@ func (q *DelegationsFetcher) Fetch( var wg sync.WaitGroup var mutex sync.Mutex - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { allDelegations[chain.Name] = map[string]uint64{} - for _, consumerChain := range chain.ConsumerChains { - allDelegations[consumerChain.Name] = map[string]uint64{} - } } - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { rpc, _ := q.RPCs[chain.Name] for _, validator := range chain.Validators { diff --git a/pkg/fetchers/delegations_test.go b/pkg/fetchers/delegations_test.go new file mode 100644 index 0000000..6946e55 --- /dev/null +++ b/pkg/fetchers/delegations_test.go @@ -0,0 +1,216 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestDelegationsFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewDelegationsFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameDelegations, fetcher.Name()) +} + +func TestDelegationsFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"delegations": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &DelegationsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(DelegationsData) + assert.True(t, ok) + + chainData, ok := balanceData.Delegations["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestDelegationsFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/delegations?pagination.count_total=true&pagination.limit=1", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &DelegationsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(DelegationsData) + assert.True(t, ok) + + chainData, ok := balanceData.Delegations["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestDelegationsFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/delegations?pagination.count_total=true&pagination.limit=1", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &DelegationsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(DelegationsData) + assert.True(t, ok) + + chainData, ok := balanceData.Delegations["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestDelegationsFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/delegations?pagination.count_total=true&pagination.limit=1", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("delegations.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &DelegationsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + balanceData, ok := data.(DelegationsData) + assert.True(t, ok) + + chainData, ok := balanceData.Delegations["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Equal(t, uint64(1729), validatorData) +} diff --git a/pkg/fetchers/node_info.go b/pkg/fetchers/node_info.go index 7209e89..21c949d 100644 --- a/pkg/fetchers/node_info.go +++ b/pkg/fetchers/node_info.go @@ -14,7 +14,7 @@ import ( type NodeInfoFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer @@ -31,13 +31,13 @@ type NodeInfoData struct { func NewNodeInfoFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *NodeInfoFetcher { return &NodeInfoFetcher{ - Logger: logger.With().Str("component", "commission_fetcher").Logger(), - Config: config, + Logger: logger.With().Str("component", "node_info_fetcher").Logger(), + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -49,7 +49,7 @@ func (q *NodeInfoFetcher) Fetch( q.queryInfos = []*types.QueryInfo{} q.allNodeInfos = map[string]*types.NodeInfoResponse{} - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { rpc, _ := q.RPCs[chain.Name] q.wg.Add(1 + len(chain.ConsumerChains)) diff --git a/pkg/fetchers/node_info_test.go b/pkg/fetchers/node_info_test.go new file mode 100644 index 0000000..7f8e7ee --- /dev/null +++ b/pkg/fetchers/node_info_test.go @@ -0,0 +1,255 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestNodeInfoFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewNodeInfoFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameNodeInfo, fetcher.Name()) +} + +func TestNodeInfoFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"node-info": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &NodeInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + chainData, ok := data.(NodeInfoData) + assert.True(t, ok) + assert.Empty(t, chainData.NodeInfos) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestNodeInfoFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/base/tendermint/v1beta1/node_info", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &NodeInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + chainData, ok := data.(NodeInfoData) + assert.True(t, ok) + assert.Empty(t, chainData.NodeInfos) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestNodeInfoFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/base/tendermint/v1beta1/node_info", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &NodeInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + chainData, ok := data.(NodeInfoData) + assert.True(t, ok) + assert.Empty(t, chainData.NodeInfos) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestNodeInfoFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/base/tendermint/v1beta1/node_info", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("node-info.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &NodeInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + nodeInfoData, ok := data.(NodeInfoData) + assert.True(t, ok) + + chainData, ok := nodeInfoData.NodeInfos["chain"] + assert.True(t, ok) + assert.Equal(t, "0.37.6", chainData.DefaultNodeInfo.Version) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestNodeInfoFetcherConsumer(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.neutron.quokkastake.io/cosmos/base/tendermint/v1beta1/node_info", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("node-info.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"node-info": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &NodeInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + nodeInfoData, ok := data.(NodeInfoData) + assert.True(t, ok) + + chainData, ok := nodeInfoData.NodeInfos["consumer"] + assert.True(t, ok) + assert.Equal(t, "0.37.6", chainData.DefaultNodeInfo.Version) +} diff --git a/pkg/fetchers/price.go b/pkg/fetchers/price.go index 02951b5..3430856 100644 --- a/pkg/fetchers/price.go +++ b/pkg/fetchers/price.go @@ -5,7 +5,6 @@ import ( "main/pkg/config" "main/pkg/constants" coingeckoPkg "main/pkg/price_fetchers/coingecko" - dexScreenerPkg "main/pkg/price_fetchers/dex_screener" "main/pkg/types" "github.com/rs/zerolog" @@ -13,11 +12,12 @@ import ( ) type PriceFetcher struct { - Logger zerolog.Logger - Config *config.Config - Tracer trace.Tracer - Coingecko *coingeckoPkg.Coingecko - DexScreener *dexScreenerPkg.DexScreener + Logger zerolog.Logger + Config *config.Config + Tracer trace.Tracer + Coingecko *coingeckoPkg.Coingecko + + CurrenciesRatesToChains map[string]map[string]float64 } type PriceData struct { @@ -29,14 +29,12 @@ func NewPriceFetcher( config *config.Config, tracer trace.Tracer, coingecko *coingeckoPkg.Coingecko, - dexScreener *dexScreenerPkg.DexScreener, ) *PriceFetcher { return &PriceFetcher{ - Logger: logger.With().Str("component", "price_fetcher").Logger(), - Config: config, - Tracer: tracer, - Coingecko: coingecko, - DexScreener: dexScreener, + Logger: logger.With().Str("component", "price_fetcher").Logger(), + Config: config, + Tracer: tracer, + Coingecko: coingecko, } } @@ -58,28 +56,29 @@ func (q *PriceFetcher) Fetch( queries = append(queries, currenciesQuery) } - currenciesRatesToChains := map[string]map[string]float64{} + q.CurrenciesRatesToChains = map[string]map[string]float64{} + for _, chain := range q.Config.Chains { - currenciesRatesToChains[chain.Name] = make(map[string]float64) - - for _, denom := range chain.Denoms { - // using coingecko response - if rate, ok := currenciesRates[denom.CoingeckoCurrency]; ok { - currenciesRatesToChains[chain.Name][denom.Denom] = rate - continue - } - - // using dexscreener response - if denom.DexScreenerChainID != "" && denom.DexScreenerPair != "" { - rate, err := q.DexScreener.GetCurrency(denom.DexScreenerChainID, denom.DexScreenerPair) - if err == nil { - currenciesRatesToChains[chain.Name][denom.Denom] = rate - } - } + q.CurrenciesRatesToChains[chain.Name] = make(map[string]float64) + q.ProcessDenoms(chain.Name, chain.Denoms, currenciesRates) + + for _, consumer := range chain.ConsumerChains { + q.CurrenciesRatesToChains[consumer.Name] = make(map[string]float64) + q.ProcessDenoms(consumer.Name, consumer.Denoms, currenciesRates) } } - return PriceData{Prices: currenciesRatesToChains}, queries + return PriceData{Prices: q.CurrenciesRatesToChains}, queries +} + +func (q *PriceFetcher) ProcessDenoms(chainName string, denoms config.DenomInfos, currenciesRates map[string]float64) { + for _, denom := range denoms { + // using coingecko response + if rate, ok := currenciesRates[denom.CoingeckoCurrency]; ok { + q.CurrenciesRatesToChains[chainName][denom.Denom] = rate + continue + } + } } func (q *PriceFetcher) Name() constants.FetcherName { diff --git a/pkg/fetchers/price_test.go b/pkg/fetchers/price_test.go new file mode 100644 index 0000000..5210bea --- /dev/null +++ b/pkg/fetchers/price_test.go @@ -0,0 +1,162 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + configPkg "main/pkg/config" + "main/pkg/constants" + loggerPkg "main/pkg/logger" + coingeckoPkg "main/pkg/price_fetchers/coingecko" + "main/pkg/tracing" + "testing" + + "github.com/jarcoal/httpmock" + "github.com/stretchr/testify/assert" +) + +func TestPriceFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*configPkg.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + config := &configPkg.Config{Chains: chains} + logger := loggerPkg.GetNopLogger() + tracer := tracing.InitNoopTracer() + coingecko := coingeckoPkg.NewCoingecko(config, logger, tracer) + + fetcher := NewPriceFetcher( + logger, + config, + tracer, + coingecko, + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNamePrice, fetcher.Name()) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestPriceFetcherProviderCoingeckoError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.coingecko.com/api/v3/simple/price?ids=cosmos&vs_currencies=usd", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*configPkg.Chain{{ + Name: "chain", + Denoms: configPkg.DenomInfos{{Denom: "denom", CoingeckoCurrency: "cosmos"}}, + }} + config := &configPkg.Config{Chains: chains} + logger := loggerPkg.GetNopLogger() + tracer := tracing.InitNoopTracer() + coingecko := coingeckoPkg.NewCoingecko(config, logger, tracer) + + fetcher := NewPriceFetcher( + logger, + config, + tracer, + coingecko, + ) + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(PriceData) + assert.True(t, ok) + + chainData, ok := balanceData.Prices["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestPriceFetcherProviderCoingeckoSuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.coingecko.com/api/v3/simple/price?ids=cosmos&vs_currencies=usd", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("coingecko.json")), + ) + + chains := []*configPkg.Chain{{ + Name: "chain", + Denoms: configPkg.DenomInfos{{Denom: "denom", CoingeckoCurrency: "cosmos"}}, + }} + config := &configPkg.Config{Chains: chains} + logger := loggerPkg.GetNopLogger() + tracer := tracing.InitNoopTracer() + coingecko := coingeckoPkg.NewCoingecko(config, logger, tracer) + + fetcher := NewPriceFetcher( + logger, + config, + tracer, + coingecko, + ) + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + balanceData, ok := data.(PriceData) + assert.True(t, ok) + + chainData, ok := balanceData.Prices["chain"] + assert.True(t, ok) + + denomData, ok := chainData["denom"] + assert.True(t, ok) + assert.InEpsilon(t, 6.71, denomData, 0.01) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestPriceFetcherConsumerCoingeckoSuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.coingecko.com/api/v3/simple/price?ids=cosmos&vs_currencies=usd", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("coingecko.json")), + ) + + chains := []*configPkg.Chain{{ + Name: "chain", + ConsumerChains: []*configPkg.ConsumerChain{{ + Name: "consumer", + Denoms: configPkg.DenomInfos{{Denom: "denom", CoingeckoCurrency: "cosmos"}}, + }}, + }} + config := &configPkg.Config{Chains: chains} + logger := loggerPkg.GetNopLogger() + tracer := tracing.InitNoopTracer() + coingecko := coingeckoPkg.NewCoingecko(config, logger, tracer) + + fetcher := NewPriceFetcher( + logger, + config, + tracer, + coingecko, + ) + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + balanceData, ok := data.(PriceData) + assert.True(t, ok) + + chainData, ok := balanceData.Prices["consumer"] + assert.True(t, ok) + + denomData, ok := chainData["denom"] + assert.True(t, ok) + assert.InEpsilon(t, 6.71, denomData, 0.01) +} diff --git a/pkg/fetchers/rewards.go b/pkg/fetchers/rewards.go index bd928e6..b322e77 100644 --- a/pkg/fetchers/rewards.go +++ b/pkg/fetchers/rewards.go @@ -15,7 +15,7 @@ import ( type RewardsFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer } @@ -26,13 +26,13 @@ type RewardsData struct { func NewRewardsFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *RewardsFetcher { return &RewardsFetcher{ Logger: logger.With().Str("component", "rewards_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -44,14 +44,14 @@ func (q *RewardsFetcher) Fetch( var queryInfos []*types.QueryInfo allRewards := map[string]map[string][]types.Amount{} - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { allRewards[chain.Name] = map[string][]types.Amount{} } var wg sync.WaitGroup var mutex sync.Mutex - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { rpc, _ := q.RPCs[chain.Name] for _, validator := range chain.Validators { diff --git a/pkg/fetchers/rewards_test.go b/pkg/fetchers/rewards_test.go new file mode 100644 index 0000000..1331fa1 --- /dev/null +++ b/pkg/fetchers/rewards_test.go @@ -0,0 +1,285 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestRewardsFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewRewardsFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameRewards, fetcher.Name()) +} + +func TestRewardsFetcherNoBechWalletPrefix(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + Validators: []config.Validator{{Address: "validator"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &RewardsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(RewardsData) + assert.True(t, ok) + + chainData, ok := balanceData.Rewards["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +func TestRewardsFetcherInvalidBechWalletPrefix(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "validator"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &RewardsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(RewardsData) + assert.True(t, ok) + + chainData, ok := balanceData.Rewards["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +func TestRewardsFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"rewards": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &RewardsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(RewardsData) + assert.True(t, ok) + + chainData, ok := balanceData.Rewards["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestRewardsFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/distribution/v1beta1/delegators/cosmos1xqz9pemz5e5zycaa89kys5aw6m8rhgsvtp9lt2/rewards/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &RewardsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(RewardsData) + assert.True(t, ok) + + chainData, ok := balanceData.Rewards["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestRewardsFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/distribution/v1beta1/delegators/cosmos1xqz9pemz5e5zycaa89kys5aw6m8rhgsvtp9lt2/rewards/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &RewardsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(RewardsData) + assert.True(t, ok) + + chainData, ok := balanceData.Rewards["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestRewardsFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/distribution/v1beta1/delegators/cosmos1xqz9pemz5e5zycaa89kys5aw6m8rhgsvtp9lt2/rewards/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("rewards.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &RewardsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + balanceData, ok := data.(RewardsData) + assert.True(t, ok) + + chainData, ok := balanceData.Rewards["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Len(t, validatorData, 1) + assert.InEpsilon(t, float64(690574.020284639200000000), validatorData[0].Amount, 0.01) + assert.Equal(t, "uatom", validatorData[0].Denom) +} diff --git a/pkg/fetchers/self_delegation.go b/pkg/fetchers/self_delegation.go index c213088..7f068e8 100644 --- a/pkg/fetchers/self_delegation.go +++ b/pkg/fetchers/self_delegation.go @@ -15,7 +15,7 @@ import ( type SelfDelegationFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer } @@ -26,13 +26,13 @@ type SelfDelegationData struct { func NewSelfDelegationFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *SelfDelegationFetcher { return &SelfDelegationFetcher{ Logger: logger.With().Str("component", "self_delegation_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -45,14 +45,14 @@ func (q *SelfDelegationFetcher) Fetch( allSelfDelegations := map[string]map[string]*types.Amount{} - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { allSelfDelegations[chain.Name] = map[string]*types.Amount{} } var wg sync.WaitGroup var mutex sync.Mutex - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { rpc, _ := q.RPCs[chain.Name] for _, validator := range chain.Validators { diff --git a/pkg/fetchers/self_delegation_test.go b/pkg/fetchers/self_delegation_test.go new file mode 100644 index 0000000..6ced825 --- /dev/null +++ b/pkg/fetchers/self_delegation_test.go @@ -0,0 +1,284 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestSelfDelegationFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewSelfDelegationFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameSelfDelegation, fetcher.Name()) +} + +func TestSelfDelegationFetcherNoBechWalletPrefix(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + Validators: []config.Validator{{Address: "validator"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SelfDelegationFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(SelfDelegationData) + assert.True(t, ok) + + chainData, ok := balanceData.Delegations["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +func TestSelfDelegationFetcherInvalidBechWalletPrefix(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "validator"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SelfDelegationFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(SelfDelegationData) + assert.True(t, ok) + + chainData, ok := balanceData.Delegations["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +func TestSelfDelegationFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"self-delegation": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SelfDelegationFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(SelfDelegationData) + assert.True(t, ok) + + chainData, ok := balanceData.Delegations["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSelfDelegationFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/delegations/cosmos1xqz9pemz5e5zycaa89kys5aw6m8rhgsvtp9lt2", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SelfDelegationFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(SelfDelegationData) + assert.True(t, ok) + + chainData, ok := balanceData.Delegations["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSelfDelegationFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/delegations/cosmos1xqz9pemz5e5zycaa89kys5aw6m8rhgsvtp9lt2", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SelfDelegationFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(SelfDelegationData) + assert.True(t, ok) + + chainData, ok := balanceData.Delegations["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSelfDelegationFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/delegations/cosmos1xqz9pemz5e5zycaa89kys5aw6m8rhgsvtp9lt2", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("self-delegation.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SelfDelegationFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + delegationsData, ok := data.(SelfDelegationData) + assert.True(t, ok) + + chainData, ok := delegationsData.Delegations["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.InEpsilon(t, 200000000.000000000000000000, validatorData.Amount, 0.01) + assert.Equal(t, "uatom", validatorData.Denom) +} diff --git a/pkg/fetchers/signing_info.go b/pkg/fetchers/signing_info.go index 77cd817..b7a65a1 100644 --- a/pkg/fetchers/signing_info.go +++ b/pkg/fetchers/signing_info.go @@ -15,7 +15,7 @@ import ( type SigningInfoFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer @@ -32,13 +32,13 @@ type SigningInfoData struct { func NewSigningInfoFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *SigningInfoFetcher { return &SigningInfoFetcher{ Logger: logger.With().Str("component", "signing_infos").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -50,14 +50,14 @@ func (q *SigningInfoFetcher) Fetch( q.queryInfos = []*types.QueryInfo{} q.allSigningInfos = map[string]map[string]*types.SigningInfoResponse{} - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { q.allSigningInfos[chain.Name] = map[string]*types.SigningInfoResponse{} for _, consumerChain := range chain.ConsumerChains { q.allSigningInfos[consumerChain.Name] = map[string]*types.SigningInfoResponse{} } } - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { rpc, _ := q.RPCs[chain.Name] for _, validator := range chain.Validators { @@ -103,7 +103,9 @@ func (q *SigningInfoFetcher) fetchAndSetSigningInfo( q.mutex.Lock() defer q.mutex.Unlock() - q.queryInfos = append(q.queryInfos, signingInfoQuery) + if signingInfoQuery != nil { + q.queryInfos = append(q.queryInfos, signingInfoQuery) + } if err != nil { q.Logger.Error(). @@ -155,7 +157,9 @@ func (q *SigningInfoFetcher) processConsumerChain( ) q.mutex.Lock() - q.queryInfos = append(q.queryInfos, queryInfo) + if queryInfo != nil { + q.queryInfos = append(q.queryInfos, queryInfo) + } q.mutex.Unlock() if err != nil { diff --git a/pkg/fetchers/signing_info_test.go b/pkg/fetchers/signing_info_test.go new file mode 100644 index 0000000..53fca58 --- /dev/null +++ b/pkg/fetchers/signing_info_test.go @@ -0,0 +1,733 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestSigningInfoFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewSigningInfoFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameSigningInfo, fetcher.Name()) +} + +func TestSigningInfoFetcherNoValcons(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + }}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + paramsData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := paramsData.SigningInfos["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +func TestSigningInfoFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + Queries: map[string]bool{"signing-info": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + paramsData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := paramsData.SigningInfos["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Nil(t, validatorData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSigningInfoFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/slashing/v1beta1/signing_infos/cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + paramsData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := paramsData.SigningInfos["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSigningInfoFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/slashing/v1beta1/signing_infos/cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + paramsData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := paramsData.SigningInfos["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSigningInfoFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/slashing/v1beta1/signing_infos/cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("signing-info.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + infosData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := infosData.SigningInfos["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Equal(t, int64(8), validatorData.ValSigningInfo.MissedBlocksCounter.Int64(), 0.01) +} + +func TestSigningInfoFetcherConsumerNoBechConsensusPrefix(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + Queries: map[string]bool{"signing-info": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + paramsData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := paramsData.SigningInfos["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Nil(t, validatorData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSigningInfoFetcherConsumerAssignedKeyQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/validator_consumer_addr?chain_id=consumer&provider_address=cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + Queries: map[string]bool{"signing-info": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + ChainID: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + BechConsensusPrefix: "neutronvalcons", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + infosData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := infosData.SigningInfos["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Nil(t, validatorData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSigningInfoFetcherConsumerAssignedKeyNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/validator_consumer_addr?chain_id=consumer&provider_address=cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + Queries: map[string]bool{"signing-info": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + ChainID: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + BechConsensusPrefix: "neutronvalcons", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + infosData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := infosData.SigningInfos["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Nil(t, validatorData) +} + +func TestSigningInfoFetcherConsumerAssignedKeyInvalidValcons(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "test", + }}, + Queries: map[string]bool{"signing-info": false, "assigned-key": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + BechConsensusPrefix: "neutronvalcons", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + infosData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := infosData.SigningInfos["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Nil(t, validatorData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSigningInfoFetcherConsumerInvalidValoper(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/validator_consumer_addr?chain_id=consumer&provider_address=cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("assigned-key.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "validator", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + Queries: map[string]bool{"signing-info": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + ChainID: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + BechConsensusPrefix: "neutronvalcons", + BechValidatorPrefix: "neutronvaloper", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + infosData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := infosData.SigningInfos["consumer"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSigningInfoFetcherConsumerSuccessWithAssignedKey(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/validator_consumer_addr?chain_id=consumer&provider_address=cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("assigned-key.json")), + ) + + httpmock.RegisterResponder( + "GET", + "https://api.neutron.quokkastake.io/cosmos/slashing/v1beta1/signing_infos/neutronvalcons1w426hkttrwrve9mj77ld67lzgx5u9m8plhmwc6", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("signing-info.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + Queries: map[string]bool{"signing-info": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + ChainID: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + BechConsensusPrefix: "neutronvalcons", + BechValidatorPrefix: "neutronvaloper", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 2) + assert.True(t, queries[0].Success) + assert.True(t, queries[0].Success) + + infosData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := infosData.SigningInfos["consumer"] + assert.True(t, ok) + + validatorData, ok := chainData["neutronvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsv4r4yhf"] + assert.True(t, ok) + assert.Equal(t, int64(8), validatorData.ValSigningInfo.MissedBlocksCounter.Int64(), 0.01) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSigningInfoFetcherConsumerSuccessWithoutAssignedKey(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/interchain_security/ccv/provider/validator_consumer_addr?chain_id=consumer&provider_address=cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("assigned-key-empty.json")), + ) + + httpmock.RegisterResponder( + "GET", + "https://api.neutron.quokkastake.io/cosmos/slashing/v1beta1/signing_infos/neutronvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnc0mxjg", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("signing-info.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + Queries: map[string]bool{"signing-info": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + ChainID: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + BechConsensusPrefix: "neutronvalcons", + BechValidatorPrefix: "neutronvaloper", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 2) + assert.True(t, queries[0].Success) + assert.True(t, queries[0].Success) + + infosData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := infosData.SigningInfos["consumer"] + assert.True(t, ok) + + validatorData, ok := chainData["neutronvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsv4r4yhf"] + assert.True(t, ok) + assert.Equal(t, int64(8), validatorData.ValSigningInfo.MissedBlocksCounter.Int64(), 0.01) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSigningInfoFetcherConsumerSuccessWithAssignedKeyQueryDisabled(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.neutron.quokkastake.io/cosmos/slashing/v1beta1/signing_infos/neutronvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnc0mxjg", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("signing-info.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{ + Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e", + ConsensusAddress: "cosmosvalcons1rt4g447zhv6jcqwdl447y88guwm0eevnrelgzc", + }}, + Queries: map[string]bool{"signing-info": false, "assigned-key": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + ChainID: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + BechConsensusPrefix: "neutronvalcons", + BechValidatorPrefix: "neutronvaloper", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SigningInfoFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + infosData, ok := data.(SigningInfoData) + assert.True(t, ok) + + chainData, ok := infosData.SigningInfos["consumer"] + assert.True(t, ok) + + validatorData, ok := chainData["neutronvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsv4r4yhf"] + assert.True(t, ok) + assert.Equal(t, int64(8), validatorData.ValSigningInfo.MissedBlocksCounter.Int64(), 0.01) +} diff --git a/pkg/fetchers/slashing_params.go b/pkg/fetchers/slashing_params.go index 0507fed..85e743e 100644 --- a/pkg/fetchers/slashing_params.go +++ b/pkg/fetchers/slashing_params.go @@ -14,7 +14,7 @@ import ( type SlashingParamsFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer @@ -31,13 +31,13 @@ type SlashingParamsData struct { func NewSlashingParamsFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *SlashingParamsFetcher { return &SlashingParamsFetcher{ Logger: logger.With().Str("component", "slashing_params_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -49,7 +49,7 @@ func (q *SlashingParamsFetcher) Fetch( q.queryInfos = []*types.QueryInfo{} q.allParams = map[string]*types.SlashingParamsResponse{} - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { rpc, _ := q.RPCs[chain.Name] q.wg.Add(1 + len(chain.ConsumerChains)) diff --git a/pkg/fetchers/slashing_params_test.go b/pkg/fetchers/slashing_params_test.go new file mode 100644 index 0000000..bfd7b5b --- /dev/null +++ b/pkg/fetchers/slashing_params_test.go @@ -0,0 +1,255 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestSlashingParamsFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewSlashingParamsFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameSlashingParams, fetcher.Name()) +} + +func TestSlashingParamsFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"slashing-params": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SlashingParamsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + paramsData, ok := data.(SlashingParamsData) + assert.True(t, ok) + assert.Empty(t, paramsData.Params) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSlashingParamsFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/slashing/v1beta1/params", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SlashingParamsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + paramsData, ok := data.(SlashingParamsData) + assert.True(t, ok) + assert.Empty(t, paramsData.Params) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSlashingParamsFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/slashing/v1beta1/params", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SlashingParamsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + paramsData, ok := data.(SlashingParamsData) + assert.True(t, ok) + assert.Empty(t, paramsData.Params) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSlashingParamsFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/slashing/v1beta1/params", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("slashing-params.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SlashingParamsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + paramsData, ok := data.(SlashingParamsData) + assert.True(t, ok) + + chainData, ok := paramsData.Params["chain"] + assert.True(t, ok) + assert.Equal(t, int64(10000), chainData.SlashingParams.SignedBlocksWindow.Int64()) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSlashingParamsFetcherConsumer(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.neutron.quokkastake.io/cosmos/slashing/v1beta1/params", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("slashing-params.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"slashing-params": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SlashingParamsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + paramsData, ok := data.(SlashingParamsData) + assert.True(t, ok) + + chainData, ok := paramsData.Params["consumer"] + assert.True(t, ok) + assert.Equal(t, int64(10000), chainData.SlashingParams.SignedBlocksWindow.Int64()) +} diff --git a/pkg/fetchers/soft_opt_out_threshold.go b/pkg/fetchers/soft_opt_out_threshold.go index 5760acc..935ce72 100644 --- a/pkg/fetchers/soft_opt_out_threshold.go +++ b/pkg/fetchers/soft_opt_out_threshold.go @@ -14,7 +14,7 @@ import ( type SoftOptOutThresholdFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer } @@ -25,13 +25,13 @@ type SoftOptOutThresholdData struct { func NewSoftOptOutThresholdFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *SoftOptOutThresholdFetcher { return &SoftOptOutThresholdFetcher{ Logger: logger.With().Str("component", "soft_opt_out_threshold_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -47,7 +47,7 @@ func (q *SoftOptOutThresholdFetcher) Fetch( var wg sync.WaitGroup var mutex sync.Mutex - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { rpc, _ := q.RPCs[chain.Name] for consumerIndex, consumerChain := range chain.ConsumerChains { @@ -58,7 +58,7 @@ func (q *SoftOptOutThresholdFetcher) Fetch( go func(chain *config.ConsumerChain, rpc *tendermint.RPC) { defer wg.Done() - threshold, query, err := rpc.GetConsumerSoftOutOutThreshold(ctx) + threshold, queried, query, err := rpc.GetConsumerSoftOutOutThreshold(ctx) mutex.Lock() defer mutex.Unlock() @@ -75,7 +75,9 @@ func (q *SoftOptOutThresholdFetcher) Fetch( return } - allThresholds[chain.Name] = threshold + if queried { + allThresholds[chain.Name] = threshold + } }(consumerChain, consumerRPC) } } diff --git a/pkg/fetchers/soft_opt_out_threshold_test.go b/pkg/fetchers/soft_opt_out_threshold_test.go new file mode 100644 index 0000000..189b3ed --- /dev/null +++ b/pkg/fetchers/soft_opt_out_threshold_test.go @@ -0,0 +1,280 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestSoftOptOutThresholdFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewSoftOptOutThresholdFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameSoftOptOutThreshold, fetcher.Name()) +} + +func TestSoftOptOutThresholdFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + Queries: map[string]bool{"params": false}, + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SoftOptOutThresholdFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + paramsData, ok := data.(SoftOptOutThresholdData) + assert.True(t, ok) + assert.Empty(t, paramsData.Thresholds) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSoftOptOutThresholdFetcherQueryInvalidJson(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.neutron.quokkastake.io/cosmos/params/v1beta1/params?subspace=ccvconsumer&key=SoftOptOutThreshold", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("soft-opt-out-threshold-invalid.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SoftOptOutThresholdFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + paramsData, ok := data.(SoftOptOutThresholdData) + assert.True(t, ok) + assert.Empty(t, paramsData.Thresholds) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSoftOptOutThresholdFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.neutron.quokkastake.io/cosmos/params/v1beta1/params?subspace=ccvconsumer&key=SoftOptOutThreshold", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SoftOptOutThresholdFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + paramsData, ok := data.(SoftOptOutThresholdData) + assert.True(t, ok) + assert.Empty(t, paramsData.Thresholds) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSoftOptOutThresholdFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.neutron.quokkastake.io/cosmos/params/v1beta1/params?subspace=ccvconsumer&key=SoftOptOutThreshold", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SoftOptOutThresholdFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + paramsData, ok := data.(SoftOptOutThresholdData) + assert.True(t, ok) + assert.Empty(t, paramsData.Thresholds) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestSoftOptOutThresholdFetcherSuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.neutron.quokkastake.io/cosmos/params/v1beta1/params?subspace=ccvconsumer&key=SoftOptOutThreshold", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("soft-opt-out-threshold.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"params": false}, + ConsumerChains: []*config.ConsumerChain{ + { + Name: "consumer", + LCDEndpoint: "https://api.neutron.quokkastake.io", + BechWalletPrefix: "neutron", + }, + }, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &SoftOptOutThresholdFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + paramsData, ok := data.(SoftOptOutThresholdData) + assert.True(t, ok) + + chainData, ok := paramsData.Thresholds["consumer"] + assert.True(t, ok) + assert.InEpsilon(t, 0.05, chainData, 0.01) +} diff --git a/pkg/fetchers/staking_params.go b/pkg/fetchers/staking_params.go index 905a5c5..f46d7ad 100644 --- a/pkg/fetchers/staking_params.go +++ b/pkg/fetchers/staking_params.go @@ -14,7 +14,7 @@ import ( type StakingParamsFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer } @@ -25,13 +25,13 @@ type StakingParamsData struct { func NewStakingParamsFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *StakingParamsFetcher { return &StakingParamsFetcher{ Logger: logger.With().Str("component", "staking_params_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -47,7 +47,7 @@ func (q *StakingParamsFetcher) Fetch( var wg sync.WaitGroup var mutex sync.Mutex - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { rpc, _ := q.RPCs[chain.Name] wg.Add(1) diff --git a/pkg/fetchers/staking_params_test.go b/pkg/fetchers/staking_params_test.go new file mode 100644 index 0000000..3af886e --- /dev/null +++ b/pkg/fetchers/staking_params_test.go @@ -0,0 +1,213 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestStakingParamsFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewStakingParamsFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameStakingParams, fetcher.Name()) +} + +func TestStakingParamsFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"staking-params": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetDefaultLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &StakingParamsFetcher{ + Logger: *logger.GetDefaultLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + paramsData, ok := data.(StakingParamsData) + assert.True(t, ok) + assert.Empty(t, paramsData.Params) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestStakingParamsFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/params", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &StakingParamsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + paramsData, ok := data.(StakingParamsData) + assert.True(t, ok) + assert.Empty(t, paramsData.Params) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestStakingParamsFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/params", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &StakingParamsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + paramsData, ok := data.(StakingParamsData) + assert.True(t, ok) + assert.Empty(t, paramsData.Params) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestStakingParamsFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/params", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("staking-params.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + ConsumerChains: []*config.ConsumerChain{{ + Name: "consumer", + }}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &StakingParamsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + paramsData, ok := data.(StakingParamsData) + assert.True(t, ok) + + chainData, ok := paramsData.Params["chain"] + assert.True(t, ok) + assert.NotNil(t, chainData) + assert.Equal(t, 180, chainData.StakingParams.MaxValidators) + + consumerData, ok := paramsData.Params["consumer"] + assert.True(t, ok) + assert.NotNil(t, consumerData) + assert.Equal(t, 180, consumerData.StakingParams.MaxValidators) +} diff --git a/pkg/fetchers/unbonds.go b/pkg/fetchers/unbonds.go index 9de4ae0..cd9aeb7 100644 --- a/pkg/fetchers/unbonds.go +++ b/pkg/fetchers/unbonds.go @@ -14,7 +14,7 @@ import ( type UnbondsFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer } @@ -25,13 +25,13 @@ type UnbondsData struct { func NewUnbondsFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *UnbondsFetcher { return &UnbondsFetcher{ Logger: logger.With().Str("component", "unbonds_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -47,7 +47,7 @@ func (q *UnbondsFetcher) Fetch( var wg sync.WaitGroup var mutex sync.Mutex - for _, chain := range q.Config.Chains { + for _, chain := range q.Chains { mutex.Lock() allUnbonds[chain.Name] = map[string]uint64{} mutex.Unlock() diff --git a/pkg/fetchers/unbonds_test.go b/pkg/fetchers/unbonds_test.go new file mode 100644 index 0000000..ba15672 --- /dev/null +++ b/pkg/fetchers/unbonds_test.go @@ -0,0 +1,216 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestUnbondsFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewUnbondsFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameUnbonds, fetcher.Name()) +} + +func TestUnbondsFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"unbonds": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &UnbondsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + balanceData, ok := data.(UnbondsData) + assert.True(t, ok) + + chainData, ok := balanceData.Unbonds["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestUnbondsFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/unbonding_delegations?pagination.count_total=true&pagination.limit=1", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &UnbondsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(UnbondsData) + assert.True(t, ok) + + chainData, ok := balanceData.Unbonds["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestUnbondsFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/unbonding_delegations?pagination.count_total=true&pagination.limit=1", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &UnbondsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + balanceData, ok := data.(UnbondsData) + assert.True(t, ok) + + chainData, ok := balanceData.Unbonds["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestUnbondsFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators/cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e/unbonding_delegations?pagination.count_total=true&pagination.limit=1", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("unbonds.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &UnbondsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + balanceData, ok := data.(UnbondsData) + assert.True(t, ok) + + chainData, ok := balanceData.Unbonds["chain"] + assert.True(t, ok) + + validatorData, ok := chainData["cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"] + assert.True(t, ok) + assert.Equal(t, uint64(14), validatorData) +} diff --git a/pkg/fetchers/validators.go b/pkg/fetchers/validators.go index 1888f18..ce98dbb 100644 --- a/pkg/fetchers/validators.go +++ b/pkg/fetchers/validators.go @@ -14,7 +14,7 @@ import ( type ValidatorsFetcher struct { Logger zerolog.Logger - Config *config.Config + Chains []*config.Chain RPCs map[string]*tendermint.RPCWithConsumers Tracer trace.Tracer } @@ -25,13 +25,13 @@ type ValidatorsData struct { func NewValidatorsFetcher( logger *zerolog.Logger, - config *config.Config, + chains []*config.Chain, rpcs map[string]*tendermint.RPCWithConsumers, tracer trace.Tracer, ) *ValidatorsFetcher { return &ValidatorsFetcher{ Logger: logger.With().Str("component", "validators_fetcher").Logger(), - Config: config, + Chains: chains, RPCs: rpcs, Tracer: tracer, } @@ -47,7 +47,7 @@ func (f *ValidatorsFetcher) Fetch( var wg sync.WaitGroup var mutex sync.Mutex - for _, chain := range f.Config.Chains { + for _, chain := range f.Chains { rpc, _ := f.RPCs[chain.Name] wg.Add(1) diff --git a/pkg/fetchers/validators_test.go b/pkg/fetchers/validators_test.go new file mode 100644 index 0000000..39a652c --- /dev/null +++ b/pkg/fetchers/validators_test.go @@ -0,0 +1,207 @@ +package fetchers + +import ( + "context" + "errors" + "main/assets" + "main/pkg/config" + "main/pkg/constants" + "main/pkg/logger" + "main/pkg/tendermint" + "main/pkg/tracing" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/jarcoal/httpmock" +) + +func TestValidatorsFetcherBase(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{ + {Name: "chain1", LCDEndpoint: "example1"}, + {Name: "chain2", LCDEndpoint: "example2"}, + } + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain1": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + "chain2": tendermint.RPCWithConsumersFromChain( + chains[1], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := NewValidatorsFetcher( + logger.GetNopLogger(), + chains, + rpcs, + tracing.InitNoopTracer(), + ) + + assert.NotNil(t, fetcher) + assert.Equal(t, constants.FetcherNameValidators, fetcher.Name()) +} + +func TestValidatorsFetcherQueryDisabled(t *testing.T) { + t.Parallel() + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "example", + BechWalletPrefix: "test", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + Queries: map[string]bool{"validators": false}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ValidatorsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Empty(t, queries) + + validatorsData, ok := data.(ValidatorsData) + assert.True(t, ok) + + chainData, ok := validatorsData.Validators["chain"] + assert.True(t, ok) + assert.Empty(t, chainData) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestValidatorsFetcherQueryError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators?pagination.count_total=true&pagination.limit=1000", + httpmock.NewErrorResponder(errors.New("error")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ValidatorsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + validatorsData, ok := data.(ValidatorsData) + assert.True(t, ok) + assert.Empty(t, validatorsData.Validators) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestValidatorsFetcherNodeError(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators?pagination.count_total=true&pagination.limit=1000", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ValidatorsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.False(t, queries[0].Success) + + validatorsData, ok := data.(ValidatorsData) + assert.True(t, ok) + assert.Empty(t, validatorsData.Validators) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestValidatorsFetcherQuerySuccess(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://api.cosmos.quokkastake.io/cosmos/staking/v1beta1/validators?pagination.count_total=true&pagination.limit=1000", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("validators.json")), + ) + + chains := []*config.Chain{{ + Name: "chain", + LCDEndpoint: "https://api.cosmos.quokkastake.io", + BechWalletPrefix: "cosmos", + Validators: []config.Validator{{Address: "cosmosvaloper1xqz9pemz5e5zycaa89kys5aw6m8rhgsvw4328e"}}, + }} + rpcs := map[string]*tendermint.RPCWithConsumers{ + "chain": tendermint.RPCWithConsumersFromChain( + chains[0], + 10, + *logger.GetNopLogger(), + tracing.InitNoopTracer(), + ), + } + fetcher := &ValidatorsFetcher{ + Logger: *logger.GetNopLogger(), + Chains: chains, + RPCs: rpcs, + Tracer: tracing.InitNoopTracer(), + } + data, queries := fetcher.Fetch(context.Background()) + assert.Len(t, queries, 1) + assert.True(t, queries[0].Success) + + validatorsData, ok := data.(ValidatorsData) + assert.True(t, ok) + + chainData, ok := validatorsData.Validators["chain"] + assert.True(t, ok) + assert.Len(t, chainData.Validators, 542) +} diff --git a/pkg/generators/single_validator_info_test.go b/pkg/generators/single_validator_info_test.go index 0f1f5c4..f5dba57 100644 --- a/pkg/generators/single_validator_info_test.go +++ b/pkg/generators/single_validator_info_test.go @@ -20,7 +20,7 @@ func TestSingleValidatorInfoGeneratorNoState(t *testing.T) { t.Parallel() state := statePkg.NewState() - generator := NewSingleValidatorInfoGenerator([]*config.Chain{}, loggerPkg.GetDefaultLogger()) + generator := NewSingleValidatorInfoGenerator([]*config.Chain{}, loggerPkg.GetNopLogger()) results := generator.Generate(state) assert.Empty(t, results) } @@ -31,7 +31,7 @@ func TestSingleValidatorInfoGeneratorNoChainValidators(t *testing.T) { chains := []*config.Chain{{Name: "chain"}} state := statePkg.NewState() state.Set(constants.FetcherNameValidators, fetchers.ValidatorsData{}) - generator := NewSingleValidatorInfoGenerator(chains, loggerPkg.GetDefaultLogger()) + generator := NewSingleValidatorInfoGenerator(chains, loggerPkg.GetNopLogger()) results := generator.Generate(state) assert.NotEmpty(t, results) @@ -59,7 +59,7 @@ func TestSingleValidatorInfoGeneratorNotFound(t *testing.T) { }, }, }) - generator := NewSingleValidatorInfoGenerator(chains, loggerPkg.GetDefaultLogger()) + generator := NewSingleValidatorInfoGenerator(chains, loggerPkg.GetNopLogger()) results := generator.Generate(state) assert.Len(t, results, 7) @@ -115,7 +115,7 @@ func TestSingleValidatorInfoGeneratorActive(t *testing.T) { }, }, }) - generator := NewSingleValidatorInfoGenerator(chains, loggerPkg.GetDefaultLogger()) + generator := NewSingleValidatorInfoGenerator(chains, loggerPkg.GetNopLogger()) results := generator.Generate(state) assert.Len(t, results, 7) diff --git a/pkg/generators/validator_rank_test.go b/pkg/generators/validator_rank_test.go index 9a27ab5..ed24c51 100644 --- a/pkg/generators/validator_rank_test.go +++ b/pkg/generators/validator_rank_test.go @@ -20,7 +20,7 @@ func TestValidatorRankGeneratorNoState(t *testing.T) { t.Parallel() state := statePkg.NewState() - generator := NewValidatorRankGenerator([]*config.Chain{}, loggerPkg.GetDefaultLogger()) + generator := NewValidatorRankGenerator([]*config.Chain{}, loggerPkg.GetNopLogger()) results := generator.Generate(state) assert.Empty(t, results) } @@ -31,7 +31,7 @@ func TestValidatorRankGeneratorNoChainValidators(t *testing.T) { chains := []*config.Chain{{Name: "chain"}} state := statePkg.NewState() state.Set(constants.FetcherNameValidators, fetchers.ValidatorsData{}) - generator := NewValidatorRankGenerator(chains, loggerPkg.GetDefaultLogger()) + generator := NewValidatorRankGenerator(chains, loggerPkg.GetNopLogger()) results := generator.Generate(state) assert.NotEmpty(t, results) @@ -59,7 +59,7 @@ func TestValidatorRankGeneratorNotFound(t *testing.T) { }, }, }) - generator := NewValidatorRankGenerator(chains, loggerPkg.GetDefaultLogger()) + generator := NewValidatorRankGenerator(chains, loggerPkg.GetNopLogger()) results := generator.Generate(state) assert.NotEmpty(t, results) @@ -96,7 +96,7 @@ func TestValidatorRankGeneratorNotActive(t *testing.T) { }, }, }) - generator := NewValidatorRankGenerator(chains, loggerPkg.GetDefaultLogger()) + generator := NewValidatorRankGenerator(chains, loggerPkg.GetNopLogger()) results := generator.Generate(state) assert.NotEmpty(t, results) @@ -136,7 +136,7 @@ func TestValidatorRankGeneratorActive(t *testing.T) { }, }, }) - generator := NewValidatorRankGenerator(chains, loggerPkg.GetDefaultLogger()) + generator := NewValidatorRankGenerator(chains, loggerPkg.GetNopLogger()) results := generator.Generate(state) assert.NotEmpty(t, results) diff --git a/pkg/http/http.go b/pkg/http/http.go index 27239cc..7bde939 100644 --- a/pkg/http/http.go +++ b/pkg/http/http.go @@ -52,7 +52,6 @@ func (c *Client) Get( } req, err := http.NewRequestWithContext(childCtx, http.MethodGet, url, nil) - if err != nil { span.RecordError(err) return queryInfo, nil, err diff --git a/pkg/http/http_test.go b/pkg/http/http_test.go new file mode 100644 index 0000000..ee3ed53 --- /dev/null +++ b/pkg/http/http_test.go @@ -0,0 +1,45 @@ +package http + +import ( + "main/assets" + "main/pkg/constants" + loggerPkg "main/pkg/logger" + "main/pkg/tracing" + "main/pkg/types" + "net/http" + "testing" + + "github.com/jarcoal/httpmock" + "github.com/stretchr/testify/require" +) + +func TestHttpClientErrorCreating(t *testing.T) { + t.Parallel() + + logger := loggerPkg.GetNopLogger() + tracer := tracing.InitNoopTracer() + client := NewClient(logger, "chain", tracer) + queryInfo, _, err := client.Get("://test", nil, types.HTTPPredicateAlwaysPass(), nil) + require.Error(t, err) + require.False(t, queryInfo.Success) +} + +//nolint:paralleltest // disabled due to httpmock usage +func TestHttpClientPredicateFail(t *testing.T) { + httpmock.Activate() + defer httpmock.DeactivateAndReset() + + httpmock.RegisterResponder( + "GET", + "https://example.com", + httpmock.NewBytesResponder(200, assets.GetBytesOrPanic("error.json")).HeaderAdd(http.Header{ + constants.HeaderBlockHeight: []string{"1"}, + }), + ) + logger := loggerPkg.GetNopLogger() + tracer := tracing.InitNoopTracer() + client := NewClient(logger, "chain", tracer) + queryInfo, _, err := client.Get("https://example.com", nil, types.HTTPPredicateCheckHeightAfter(100), nil) + require.Error(t, err) + require.False(t, queryInfo.Success) +} diff --git a/pkg/logger/logger.go b/pkg/logger/logger.go index a349bae..e0ae38e 100644 --- a/pkg/logger/logger.go +++ b/pkg/logger/logger.go @@ -13,6 +13,11 @@ func GetDefaultLogger() *zerolog.Logger { return &log } +func GetNopLogger() *zerolog.Logger { + log := zerolog.Nop() + return &log +} + func GetLogger(appConfig config.LogConfig) *zerolog.Logger { log := zerolog.New(zerolog.ConsoleWriter{Out: os.Stdout}).With().Timestamp().Logger() diff --git a/pkg/logger/logger_test.go b/pkg/logger/logger_test.go index 183f571..02b1ac0 100644 --- a/pkg/logger/logger_test.go +++ b/pkg/logger/logger_test.go @@ -40,3 +40,10 @@ func TestGetLoggerValidJSON(t *testing.T) { logger := loggerPkg.GetLogger(config.LogConfig{LogLevel: "info", JSONOutput: true}) require.NotNil(t, logger) } + +func TestGetLoggerNop(t *testing.T) { + t.Parallel() + + logger := loggerPkg.GetNopLogger() + require.NotNil(t, logger) +} diff --git a/pkg/price_fetchers/dex_screener/dex_screener.go b/pkg/price_fetchers/dex_screener/dex_screener.go deleted file mode 100644 index 808351e..0000000 --- a/pkg/price_fetchers/dex_screener/dex_screener.go +++ /dev/null @@ -1,74 +0,0 @@ -package dex_screener - -import ( - "encoding/json" - "errors" - "fmt" - "net/http" - "time" - - "main/pkg/utils" - - "github.com/rs/zerolog" -) - -type DexScreener struct { - Logger zerolog.Logger -} - -func NewDexScreener(logger *zerolog.Logger) *DexScreener { - return &DexScreener{ - Logger: logger.With().Str("component", "dex_screener").Logger(), - } -} - -type DexScreenerPair struct { - PriceUSD string `json:"priceUsd"` -} - -type DexScreenerResponse struct { - Pairs []DexScreenerPair `json:"pairs"` -} - -func (d *DexScreener) GetCurrency(chainID string, pair string) (float64, error) { - client := &http.Client{ - Timeout: 5 * time.Second, - } - - url := fmt.Sprintf("https://api.dexscreener.com/latest/dex/pairs/%s/%s", chainID, pair) - - req, err := http.NewRequest(http.MethodGet, url, nil) - if err != nil { - d.Logger.Error().Err(err).Msg("Error initializing request") - return 0, err - } - - res, err := client.Do(req) - if err != nil { - d.Logger.Warn().Str("url", url).Err(err).Msg("Query failed") - return 0, err - } - defer res.Body.Close() - - if res.StatusCode >= http.StatusBadRequest { - d.Logger.Warn(). - Str("url", url). - Err(err). - Int("status", res.StatusCode). - Msg("Query returned bad HTTP code") - return 0, fmt.Errorf("bad HTTP code: %d", res.StatusCode) - } - - var response DexScreenerResponse - err = json.NewDecoder(res.Body).Decode(&response) - if len(response.Pairs) == 0 { - d.Logger.Warn(). - Str("url", url). - Err(err). - Int("status", res.StatusCode). - Msg("Got no pairs in response") - return 0, errors.New("malformed response") - } - - return utils.StrToFloat64(response.Pairs[0].PriceUSD), err -} diff --git a/pkg/tendermint/rpc.go b/pkg/tendermint/rpc.go index 9ab2e2a..ff09d49 100644 --- a/pkg/tendermint/rpc.go +++ b/pkg/tendermint/rpc.go @@ -466,9 +466,9 @@ func (rpc *RPC) GetSlashingParams( func (rpc *RPC) GetConsumerSoftOutOutThreshold( ctx context.Context, -) (float64, *types.QueryInfo, error) { +) (float64, bool, *types.QueryInfo, error) { if !rpc.ChainQueries.Enabled("params") { - return 0, nil, nil + return 0, false, nil, nil } childQuerierCtx, span := rpc.Tracer.Start( @@ -484,22 +484,22 @@ func (rpc *RPC) GetConsumerSoftOutOutThreshold( childQuerierCtx, ) if err != nil { - return 0, &info, err + return 0.0, false, &info, err } if response.Code != 0 { info.Success = false - return 0, &info, fmt.Errorf("expected code 0, but got %d", response.Code) + return 0, false, &info, fmt.Errorf("expected code 0, but got %d", response.Code) } valueStripped := strings.ReplaceAll(response.Param.Value, "\"", "") value, err := strconv.ParseFloat(valueStripped, 64) if err != nil { info.Success = false - return 0, &info, err + return 0, false, &info, err } - return value, &info, nil + return value, true, &info, nil } func (rpc *RPC) GetStakingParams( @@ -583,10 +583,7 @@ func (rpc *RPC) Get( return info, err } - height, err := utils.GetBlockHeightFromHeader(header) - if err != nil { - return info, err - } + height, _ := utils.GetBlockHeightFromHeader(header) rpc.Mutex.Lock() rpc.LastHeight[url] = height