From 7f756523ff13eb8c85cb1bbdd8f67f5154f8db5e Mon Sep 17 00:00:00 2001 From: Alexander Peters Date: Thu, 30 May 2024 12:43:54 +0200 Subject: [PATCH 1/6] fix: Bump CometBFT versions (#20481) --- .github/workflows/test.yml | 8 ++++---- client/v2/go.mod | 8 ++++---- client/v2/go.sum | 15 ++++++--------- go.mod | 7 +++---- go.sum | 15 ++++++--------- simapp/go.mod | 7 +++---- simapp/go.sum | 15 ++++++--------- tests/go.mod | 7 +++---- tests/go.sum | 15 ++++++--------- tests/systemtests/upgrade_test.go | 1 - x/accounts/defaults/lockup/go.mod | 6 ++---- x/accounts/defaults/lockup/go.sum | 15 ++++++--------- x/accounts/go.mod | 7 +++---- x/accounts/go.sum | 15 ++++++--------- x/auth/go.mod | 7 +++---- x/auth/go.sum | 15 ++++++--------- x/authz/go.mod | 11 ++++++----- x/authz/go.sum | 15 ++++++--------- x/bank/go.mod | 11 ++++++----- x/bank/go.sum | 15 ++++++--------- x/circuit/go.mod | 7 +++---- x/circuit/go.sum | 15 ++++++--------- x/consensus/go.mod | 7 +++---- x/consensus/go.sum | 15 ++++++--------- x/distribution/go.mod | 11 ++++++----- x/distribution/go.sum | 15 ++++++--------- x/epochs/go.mod | 7 +++---- x/epochs/go.sum | 15 ++++++--------- x/evidence/go.mod | 7 +++---- x/evidence/go.sum | 15 ++++++--------- x/feegrant/go.mod | 7 +++---- x/feegrant/go.sum | 15 ++++++--------- x/gov/go.mod | 8 ++++---- x/gov/go.sum | 15 ++++++--------- x/group/go.mod | 7 +++---- x/group/go.sum | 15 ++++++--------- x/mint/go.mod | 11 ++++++----- x/mint/go.sum | 15 ++++++--------- x/nft/go.mod | 7 +++---- x/nft/go.sum | 15 ++++++--------- x/params/go.mod | 7 +++---- x/params/go.sum | 15 ++++++--------- x/protocolpool/go.mod | 7 +++---- x/protocolpool/go.sum | 15 ++++++--------- x/slashing/go.mod | 7 +++---- x/slashing/go.sum | 15 ++++++--------- x/staking/go.mod | 7 +++---- x/staking/go.sum | 15 ++++++--------- x/upgrade/go.mod | 7 +++---- x/upgrade/go.sum | 15 ++++++--------- 50 files changed, 233 insertions(+), 321 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 18dc0faee101..687c6fe46807 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -184,10 +184,10 @@ jobs: name: "testnet-setup" path: ./systemtests/testnet/ retention-days: 3 - # - name: system tests v2 - # if: env.GIT_DIFF - # run: | - # make test-system + - name: system tests v2 + if: env.GIT_DIFF + run: | + make test-system - uses: actions/upload-artifact@v3 if: failure() with: diff --git a/client/v2/go.mod b/client/v2/go.mod index 2c59a43b2c82..615ac5cf73c5 100644 --- a/client/v2/go.mod +++ b/client/v2/go.mod @@ -48,9 +48,9 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -107,7 +107,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -117,7 +116,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect @@ -172,6 +170,8 @@ require ( pgregory.net/rapid v1.1.0 // indirect ) +require github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + replace github.com/cosmos/cosmos-sdk => ./../../ replace ( diff --git a/client/v2/go.sum b/client/v2/go.sum index 754f7991aabe..0feea0fcca70 100644 --- a/client/v2/go.sum +++ b/client/v2/go.sum @@ -93,12 +93,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -285,6 +285,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -313,8 +315,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -347,8 +347,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -598,7 +596,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/go.mod b/go.mod index 447829e23930..e300dfc85a18 100644 --- a/go.mod +++ b/go.mod @@ -19,8 +19,8 @@ require ( cosmossdk.io/x/tx v0.13.3 github.com/99designs/keyring v1.2.2 github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/btcutil v1.0.5 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-proto v1.0.0-beta.5 @@ -116,13 +116,13 @@ require ( github.com/hashicorp/go-hclog v1.6.3 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/iancoleman/strcase v0.3.0 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -132,7 +132,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-runewidth v0.0.14 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/go.sum b/go.sum index e59b84000744..b3507453609e 100644 --- a/go.sum +++ b/go.sum @@ -82,12 +82,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -273,6 +273,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -300,8 +302,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -338,8 +338,6 @@ github.com/mdp/qrterminal/v3 v3.2.0 h1:qteQMXO3oyTK4IHwj2mWsKYYRBOp1Pj2WRYFYYNTC github.com/mdp/qrterminal/v3 v3.2.0/go.mod h1:XGGuua4Lefrl7TLEsSONiD+UEjQXJZ4mPzF+gWYIJkk= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -583,7 +581,6 @@ golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/simapp/go.mod b/simapp/go.mod index 7a6319920dce..39a3ee140aca 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -31,7 +31,7 @@ require ( cosmossdk.io/x/staking v0.0.0-20240226161501-23359a0b6d91 cosmossdk.io/x/tx v0.13.3 cosmossdk.io/x/upgrade v0.0.0-20230613133644-0a778132a60f - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-db v1.0.2 // this version is not used as it is always replaced by the latest Cosmos SDK version github.com/cosmos/cosmos-sdk v0.51.0 @@ -45,7 +45,7 @@ require ( google.golang.org/protobuf v1.34.1 ) -require github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 +require github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 require cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 @@ -139,6 +139,7 @@ require ( github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -148,7 +149,6 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -162,7 +162,6 @@ require ( github.com/mattn/go-runewidth v0.0.14 // indirect github.com/mdp/qrterminal/v3 v3.2.0 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect diff --git a/simapp/go.sum b/simapp/go.sum index 70d404a3801a..5e99ea54aa45 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -291,12 +291,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -574,6 +574,8 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -610,8 +612,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -653,8 +653,6 @@ github.com/mdp/qrterminal/v3 v3.2.0 h1:qteQMXO3oyTK4IHwj2mWsKYYRBOp1Pj2WRYFYYNTC github.com/mdp/qrterminal/v3 v3.2.0/go.mod h1:XGGuua4Lefrl7TLEsSONiD+UEjQXJZ4mPzF+gWYIJkk= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= 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-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= @@ -1070,7 +1068,6 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc 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-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/tests/go.mod b/tests/go.mod index 0e22d8be4009..c6f59558c69c 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -18,7 +18,7 @@ require ( cosmossdk.io/x/protocolpool v0.0.0-20230925135524-a1bc045b3190 cosmossdk.io/x/tx v0.13.3 cosmossdk.io/x/upgrade v0.0.0-20230613133644-0a778132a60f - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-proto v1.0.0-beta.5 // this version is not used as it is always replaced by the latest Cosmos SDK version @@ -46,7 +46,7 @@ require ( cosmossdk.io/x/mint v0.0.0-00010101000000-000000000000 cosmossdk.io/x/slashing v0.0.0-00010101000000-000000000000 cosmossdk.io/x/staking v0.0.0-20240226161501-23359a0b6d91 - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/google/go-cmp v0.6.0 github.com/google/gofuzz v1.2.0 github.com/jhump/protoreflect v1.16.0 @@ -141,6 +141,7 @@ require ( github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -150,7 +151,6 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -161,7 +161,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect diff --git a/tests/go.sum b/tests/go.sum index 952981598728..6dbeb953f23d 100644 --- a/tests/go.sum +++ b/tests/go.sum @@ -291,12 +291,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -571,6 +571,8 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -607,8 +609,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -644,8 +644,6 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= 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-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= @@ -1060,7 +1058,6 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc 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-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/tests/systemtests/upgrade_test.go b/tests/systemtests/upgrade_test.go index c1b64c3301ba..d1b093175165 100644 --- a/tests/systemtests/upgrade_test.go +++ b/tests/systemtests/upgrade_test.go @@ -17,7 +17,6 @@ import ( ) func TestChainUpgrade(t *testing.T) { - t.Skip("Deactivated until there is a migration path for comet. See https://github.com/cosmos/cosmos-sdk/issues/20318") // Scenario: // start a legacy chain with some state // when a chain upgrade proposal is executed diff --git a/x/accounts/defaults/lockup/go.mod b/x/accounts/defaults/lockup/go.mod index d719e11dfb68..b628983250ec 100644 --- a/x/accounts/defaults/lockup/go.mod +++ b/x/accounts/defaults/lockup/go.mod @@ -18,13 +18,11 @@ require cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect require ( buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.1-20240312114316-c0d3497e35d6.1 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect github.com/dgraph-io/badger/v4 v4.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/flatbuffers v2.0.8+incompatible // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/supranational/blst v0.3.11 // indirect go.opencensus.io v0.24.0 // indirect ) @@ -53,7 +51,7 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect diff --git a/x/accounts/defaults/lockup/go.sum b/x/accounts/defaults/lockup/go.sum index b0c907140ea6..928525bd1989 100644 --- a/x/accounts/defaults/lockup/go.sum +++ b/x/accounts/defaults/lockup/go.sum @@ -77,12 +77,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= @@ -263,6 +263,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -291,8 +293,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -323,8 +323,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -558,7 +556,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/accounts/go.mod b/x/accounts/go.mod index 2f59eab8ab01..abf2291ddd41 100644 --- a/x/accounts/go.mod +++ b/x/accounts/go.mod @@ -21,7 +21,7 @@ require cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect require ( cosmossdk.io/log v1.3.1 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect go.opencensus.io v0.24.0 // indirect ) @@ -50,9 +50,9 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.5 @@ -116,7 +116,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/accounts/go.sum b/x/accounts/go.sum index a197d274a6d0..4490a34e4417 100644 --- a/x/accounts/go.sum +++ b/x/accounts/go.sum @@ -87,12 +87,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -279,6 +279,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -307,8 +309,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -339,8 +339,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -585,7 +583,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/auth/go.mod b/x/auth/go.mod index e885489ad08a..02112c9ce685 100644 --- a/x/auth/go.mod +++ b/x/auth/go.mod @@ -13,7 +13,7 @@ require ( cosmossdk.io/x/accounts v0.0.0-20240226161501-23359a0b6d91 cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 cosmossdk.io/x/tx v0.13.3 - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.51.0 github.com/cosmos/gogoproto v1.4.12 @@ -56,7 +56,7 @@ require ( github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -100,6 +100,7 @@ require ( github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -108,7 +109,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -118,7 +118,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/auth/go.sum b/x/auth/go.sum index 40fc19ed51da..a2a61e6850b4 100644 --- a/x/auth/go.sum +++ b/x/auth/go.sum @@ -87,12 +87,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -279,6 +279,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -307,8 +309,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -339,8 +339,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -588,7 +586,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/authz/go.mod b/x/authz/go.mod index 81fef3b59508..b1bf77da11dc 100644 --- a/x/authz/go.mod +++ b/x/authz/go.mod @@ -16,7 +16,7 @@ require ( cosmossdk.io/x/staking v0.0.0-00010101000000-000000000000 cosmossdk.io/x/tx v0.13.3 github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.51.0 github.com/cosmos/gogoproto v1.4.12 @@ -50,7 +50,7 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -103,7 +103,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -113,7 +112,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect @@ -169,7 +167,10 @@ require ( sigs.k8s.io/yaml v1.4.0 // indirect ) -require cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect +require ( + cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect +) replace github.com/cosmos/cosmos-sdk => ../../. diff --git a/x/authz/go.sum b/x/authz/go.sum index 40fc19ed51da..a2a61e6850b4 100644 --- a/x/authz/go.sum +++ b/x/authz/go.sum @@ -87,12 +87,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -279,6 +279,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -307,8 +309,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -339,8 +339,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -588,7 +586,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/bank/go.mod b/x/bank/go.mod index 039a51d38444..748b2f05f28b 100644 --- a/x/bank/go.mod +++ b/x/bank/go.mod @@ -13,7 +13,7 @@ require ( cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc cosmossdk.io/x/accounts v0.0.0-20240226161501-23359a0b6d91 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.51.0 github.com/cosmos/gogoproto v1.4.12 @@ -50,7 +50,7 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -102,7 +102,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -112,7 +111,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect @@ -168,7 +166,10 @@ require ( sigs.k8s.io/yaml v1.4.0 // indirect ) -require cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect +require ( + cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect +) replace github.com/cosmos/cosmos-sdk => ../../. diff --git a/x/bank/go.sum b/x/bank/go.sum index 40fc19ed51da..a2a61e6850b4 100644 --- a/x/bank/go.sum +++ b/x/bank/go.sum @@ -87,12 +87,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -279,6 +279,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -307,8 +309,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -339,8 +339,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -588,7 +586,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/circuit/go.mod b/x/circuit/go.mod index 91acadd40bde..b8504ae4455f 100644 --- a/x/circuit/go.mod +++ b/x/circuit/go.mod @@ -44,9 +44,9 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect @@ -93,6 +93,7 @@ require ( github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -101,7 +102,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -111,7 +111,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/circuit/go.sum b/x/circuit/go.sum index 8019327ee0a1..885e0fa697e2 100644 --- a/x/circuit/go.sum +++ b/x/circuit/go.sum @@ -89,12 +89,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -281,6 +281,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -309,8 +311,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -341,8 +341,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -590,7 +588,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/consensus/go.mod b/x/consensus/go.mod index a7d785ed0fab..c203529a29ec 100644 --- a/x/consensus/go.mod +++ b/x/consensus/go.mod @@ -9,8 +9,8 @@ require ( cosmossdk.io/depinject v1.0.0-alpha.4 cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc cosmossdk.io/x/auth v0.0.0-00010101000000-000000000000 - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.51.0 github.com/cosmos/gogoproto v1.4.12 @@ -92,6 +92,7 @@ require ( github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -100,7 +101,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -110,7 +110,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/consensus/go.sum b/x/consensus/go.sum index 8019327ee0a1..885e0fa697e2 100644 --- a/x/consensus/go.sum +++ b/x/consensus/go.sum @@ -89,12 +89,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -281,6 +281,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -309,8 +311,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -341,8 +341,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -590,7 +588,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/distribution/go.mod b/x/distribution/go.mod index 04c1800a281b..4f490821df9a 100644 --- a/x/distribution/go.mod +++ b/x/distribution/go.mod @@ -29,7 +29,10 @@ require ( gotest.tools/v3 v3.5.1 ) -require github.com/cockroachdb/errors v1.11.1 // indirect +require ( + github.com/cockroachdb/errors v1.11.1 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect +) require ( buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.1-20240312114316-c0d3497e35d6.1 // indirect @@ -52,9 +55,9 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -106,7 +109,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -116,7 +118,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/distribution/go.sum b/x/distribution/go.sum index c93063005352..c0db7f8dd8c1 100644 --- a/x/distribution/go.sum +++ b/x/distribution/go.sum @@ -89,12 +89,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -281,6 +281,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -309,8 +311,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -341,8 +341,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -590,7 +588,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/epochs/go.mod b/x/epochs/go.mod index 5d2f00be7de9..fbffc6345c18 100644 --- a/x/epochs/go.mod +++ b/x/epochs/go.mod @@ -43,9 +43,9 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -98,7 +98,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -108,7 +107,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect @@ -169,6 +167,7 @@ require ( require ( cosmossdk.io/log v1.3.1 // indirect cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect ) replace github.com/cosmos/cosmos-sdk => ../../. diff --git a/x/epochs/go.sum b/x/epochs/go.sum index 622c656db5d8..f0252f034f8f 100644 --- a/x/epochs/go.sum +++ b/x/epochs/go.sum @@ -87,12 +87,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -279,6 +279,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -307,8 +309,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -339,8 +339,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -585,7 +583,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/evidence/go.mod b/x/evidence/go.mod index f7d9b70679cf..6ef3d7fb2b29 100644 --- a/x/evidence/go.mod +++ b/x/evidence/go.mod @@ -48,9 +48,9 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -95,6 +95,7 @@ require ( github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -103,7 +104,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -113,7 +113,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/evidence/go.sum b/x/evidence/go.sum index 8019327ee0a1..885e0fa697e2 100644 --- a/x/evidence/go.sum +++ b/x/evidence/go.sum @@ -89,12 +89,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -281,6 +281,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -309,8 +311,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -341,8 +341,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -590,7 +588,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/feegrant/go.mod b/x/feegrant/go.mod index 13ed27b8c772..b87bbcc49e20 100644 --- a/x/feegrant/go.mod +++ b/x/feegrant/go.mod @@ -12,7 +12,7 @@ require ( cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc cosmossdk.io/x/bank v0.0.0-20240226161501-23359a0b6d91 cosmossdk.io/x/gov v0.0.0-20230925135524-a1bc045b3190 - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.51.0 github.com/cosmos/gogoproto v1.4.12 @@ -53,7 +53,7 @@ require ( github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -106,7 +106,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -117,7 +116,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect @@ -175,6 +173,7 @@ require ( require ( cosmossdk.io/log v1.3.1 // indirect cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect ) replace github.com/cosmos/cosmos-sdk => ../../. diff --git a/x/feegrant/go.sum b/x/feegrant/go.sum index 6edfa48f05b7..b4323f443c6b 100644 --- a/x/feegrant/go.sum +++ b/x/feegrant/go.sum @@ -95,12 +95,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -287,6 +287,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -315,8 +317,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -349,8 +349,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -600,7 +598,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/gov/go.mod b/x/gov/go.mod index 3ce7db093cf8..6f3bcc3592b6 100644 --- a/x/gov/go.mod +++ b/x/gov/go.mod @@ -18,7 +18,7 @@ require ( cosmossdk.io/x/staking v0.0.0-00010101000000-000000000000 github.com/chzyer/readline v1.5.1 github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.51.0 github.com/cosmos/gogoproto v1.4.12 @@ -57,7 +57,7 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -110,7 +110,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -120,7 +119,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect @@ -173,6 +171,8 @@ require ( sigs.k8s.io/yaml v1.4.0 // indirect ) +require github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + replace github.com/cosmos/cosmos-sdk => ../../. replace ( diff --git a/x/gov/go.sum b/x/gov/go.sum index ea366f85ec3e..4c5becd0714c 100644 --- a/x/gov/go.sum +++ b/x/gov/go.sum @@ -93,12 +93,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -285,6 +285,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -313,8 +315,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -347,8 +347,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -598,7 +596,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/group/go.mod b/x/group/go.mod index 4dc035413835..5db2fed2edb1 100644 --- a/x/group/go.mod +++ b/x/group/go.mod @@ -19,7 +19,7 @@ require ( cosmossdk.io/x/mint v0.0.0-00010101000000-000000000000 cosmossdk.io/x/staking v0.0.0-00010101000000-000000000000 github.com/cockroachdb/apd/v2 v2.0.2 - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.51.0 @@ -60,7 +60,7 @@ require ( github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect github.com/cosmos/go-bip39 v1.0.0 // indirect @@ -104,6 +104,7 @@ require ( github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -112,7 +113,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -122,7 +122,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/group/go.sum b/x/group/go.sum index 384b5480ffbf..546e038be58c 100644 --- a/x/group/go.sum +++ b/x/group/go.sum @@ -95,12 +95,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -287,6 +287,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -315,8 +317,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -349,8 +349,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -600,7 +598,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/mint/go.mod b/x/mint/go.mod index 01c08fd00272..1655f3525390 100644 --- a/x/mint/go.mod +++ b/x/mint/go.mod @@ -45,7 +45,7 @@ require ( github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect @@ -159,19 +159,20 @@ require ( require ( buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.1-20240312114316-c0d3497e35d6.1 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect github.com/dgraph-io/badger/v4 v4.2.0 // indirect github.com/gofrs/uuid v4.4.0+incompatible // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/flatbuffers v2.0.8+incompatible // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/supranational/blst v0.3.11 // indirect go.opencensus.io v0.24.0 // indirect ) -require cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect +require ( + cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect +) replace github.com/cosmos/cosmos-sdk => ../../. diff --git a/x/mint/go.sum b/x/mint/go.sum index 8019327ee0a1..885e0fa697e2 100644 --- a/x/mint/go.sum +++ b/x/mint/go.sum @@ -89,12 +89,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -281,6 +281,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -309,8 +311,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -341,8 +341,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -590,7 +588,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/nft/go.mod b/x/nft/go.mod index 3660bf2d07a2..2eea056245e6 100644 --- a/x/nft/go.mod +++ b/x/nft/go.mod @@ -46,9 +46,9 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -93,6 +93,7 @@ require ( github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -101,7 +102,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -111,7 +111,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/nft/go.sum b/x/nft/go.sum index 8019327ee0a1..885e0fa697e2 100644 --- a/x/nft/go.sum +++ b/x/nft/go.sum @@ -89,12 +89,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -281,6 +281,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -309,8 +311,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -341,8 +341,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -590,7 +588,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/params/go.mod b/x/params/go.mod index 1c3e8c00fbb5..b7c1b2074694 100644 --- a/x/params/go.mod +++ b/x/params/go.mod @@ -11,7 +11,7 @@ require ( cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc cosmossdk.io/x/gov v0.0.0-20230925135524-a1bc045b3190 - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.51.0 @@ -50,7 +50,7 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -95,6 +95,7 @@ require ( github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -103,7 +104,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -113,7 +113,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/params/go.sum b/x/params/go.sum index 8019327ee0a1..885e0fa697e2 100644 --- a/x/params/go.sum +++ b/x/params/go.sum @@ -89,12 +89,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -281,6 +281,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -309,8 +311,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -341,8 +341,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -590,7 +588,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/protocolpool/go.mod b/x/protocolpool/go.mod index 5879bb734446..b26b90a19be6 100644 --- a/x/protocolpool/go.mod +++ b/x/protocolpool/go.mod @@ -48,9 +48,9 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -95,6 +95,7 @@ require ( github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -103,7 +104,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -113,7 +113,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/protocolpool/go.sum b/x/protocolpool/go.sum index 8019327ee0a1..885e0fa697e2 100644 --- a/x/protocolpool/go.sum +++ b/x/protocolpool/go.sum @@ -89,12 +89,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -281,6 +281,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -309,8 +311,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -341,8 +341,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -590,7 +588,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/slashing/go.mod b/x/slashing/go.mod index 2bb8ecb3a636..b5c7116200b0 100644 --- a/x/slashing/go.mod +++ b/x/slashing/go.mod @@ -49,9 +49,9 @@ require ( github.com/cockroachdb/pebble v1.1.0 // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cometbft/cometbft-db v0.12.0 // indirect - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 // indirect + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect @@ -96,6 +96,7 @@ require ( github.com/hashicorp/go-metrics v0.5.3 // indirect github.com/hashicorp/go-plugin v1.6.1 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -104,7 +105,6 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -114,7 +114,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect diff --git a/x/slashing/go.sum b/x/slashing/go.sum index 9564083d74ec..1ff412a0d8b3 100644 --- a/x/slashing/go.sum +++ b/x/slashing/go.sum @@ -91,12 +91,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -283,6 +283,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -311,8 +313,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -343,8 +343,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -592,7 +590,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/staking/go.mod b/x/staking/go.mod index dd1ad4551456..19ff3233acca 100644 --- a/x/staking/go.mod +++ b/x/staking/go.mod @@ -10,8 +10,8 @@ require ( cosmossdk.io/errors v1.0.1 cosmossdk.io/math v1.3.0 cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.51.0 github.com/cosmos/gogoproto v1.4.12 @@ -162,8 +162,6 @@ require ( github.com/gofrs/uuid v4.4.0+incompatible // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/flatbuffers v2.0.8+incompatible // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/supranational/blst v0.3.11 // indirect go.opencensus.io v0.24.0 // indirect ) @@ -174,6 +172,7 @@ require ( cosmossdk.io/log v1.3.1 // indirect cosmossdk.io/x/accounts v0.0.0-20240226161501-23359a0b6d91 // indirect cosmossdk.io/x/accounts/defaults/lockup v0.0.0-20240417181816-5e7aae0db1f5 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect ) replace github.com/cosmos/cosmos-sdk => ../../. diff --git a/x/staking/go.sum b/x/staking/go.sum index 40fc19ed51da..a2a61e6850b4 100644 --- a/x/staking/go.sum +++ b/x/staking/go.sum @@ -87,12 +87,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -279,6 +279,8 @@ github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -307,8 +309,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -339,8 +339,6 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= @@ -588,7 +586,6 @@ golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/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-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= diff --git a/x/upgrade/go.mod b/x/upgrade/go.mod index de8938f6950b..86ea12eb11b5 100644 --- a/x/upgrade/go.mod +++ b/x/upgrade/go.mod @@ -12,8 +12,8 @@ require ( cosmossdk.io/x/auth v0.0.0-00010101000000-000000000000 cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 cosmossdk.io/x/gov v0.0.0-20230925135524-a1bc045b3190 - github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 - github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 github.com/cosmos/cosmos-db v1.0.2 github.com/cosmos/cosmos-proto v1.0.0-beta.5 github.com/cosmos/cosmos-sdk v0.51.0 @@ -117,6 +117,7 @@ require ( github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect github.com/hdevalence/ed25519consensus v0.2.0 // indirect @@ -126,7 +127,6 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.17.8 // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.9 // indirect @@ -137,7 +137,6 @@ require ( github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/minio/highwayhash v1.0.2 // indirect - github.com/minio/sha256-simd v1.0.1 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect diff --git a/x/upgrade/go.sum b/x/upgrade/go.sum index f23425cf1dce..187555ff9262 100644 --- a/x/upgrade/go.sum +++ b/x/upgrade/go.sum @@ -295,12 +295,12 @@ github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwP github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:vNrFdj8MmdHmZPovE1bZcOpY8VNK2fy3O3bjgkvGA8A= -github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:FH1mC3P645pmV3TcHly2xc/2QnKOztRVS7QI77L8Pkk= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65 h1:Bj+DkG59qYZE54uWBKXsNtiug1u6M4x8Tk3l5tAb/3I= -github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240429102542-490e9bc3de65/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= @@ -573,6 +573,8 @@ github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= 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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= @@ -609,8 +611,6 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= 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= @@ -646,8 +646,6 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= 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/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM= -github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8= 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-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= @@ -1062,7 +1060,6 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc 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-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= From 90cbb022d5f6c1e6a025512403167fc7b94828b1 Mon Sep 17 00:00:00 2001 From: Dev Ojha Date: Thu, 30 May 2024 19:44:14 +0900 Subject: [PATCH 2/6] perf(math): Significantly speedup Dec quo truncate and quo Roundup (#20034) Co-authored-by: Marko Co-authored-by: marbar3778 Co-authored-by: Alex Peters --- math/CHANGELOG.md | 2 + math/dec.go | 16 +-- math/dec_test.go | 272 +++++++++++++++++++++++++++++++++++++++++++--- 3 files changed, 269 insertions(+), 21 deletions(-) diff --git a/math/CHANGELOG.md b/math/CHANGELOG.md index d700534ae461..d05484340906 100644 --- a/math/CHANGELOG.md +++ b/math/CHANGELOG.md @@ -36,6 +36,8 @@ Ref: https://github.com/commitizen/conventional-commit-types/blob/v3.0.0/index.j ## [Unreleased] +* [#20034](https://github.com/cosmos/cosmos-sdk/pull/20034) Significantly speedup LegacyDec.QuoTruncate and LegacyDec.QuoRoundUp. + ## [math/v1.3.0](https://github.com/cosmos/cosmos-sdk/releases/tag/math/v1.3.0) - 2024-02-22 ### Features diff --git a/math/dec.go b/math/dec.go index 0ca1cfcb8c22..0bcd40a4a4a6 100644 --- a/math/dec.go +++ b/math/dec.go @@ -397,13 +397,12 @@ func (d LegacyDec) QuoTruncate(d2 LegacyDec) LegacyDec { return d.ImmutOp(LegacyDec.QuoTruncateMut, d2) } -// QuoTruncateMut mutable quotient truncate +// QuoTruncateMut divides the current LegacyDec value by the provided LegacyDec value, truncating the result. func (d LegacyDec) QuoTruncateMut(d2 LegacyDec) LegacyDec { - // multiply precision twice - d.i.Mul(d.i, squaredPrecisionReuse) + // multiply precision once before performing division + d.i.Mul(d.i, precisionReuse) d.i.Quo(d.i, d2.i) - chopPrecisionAndTruncate(d.i) if d.i.BitLen() > maxDecBitLen { panic("Int overflow") } @@ -418,10 +417,13 @@ func (d LegacyDec) QuoRoundUp(d2 LegacyDec) LegacyDec { // QuoRoundupMut mutable quotient, round up func (d LegacyDec) QuoRoundupMut(d2 LegacyDec) LegacyDec { // multiply precision twice - d.i.Mul(d.i, squaredPrecisionReuse) - d.i.Quo(d.i, d2.i) + d.i.Mul(d.i, precisionReuse) + _, rem := d.i.QuoRem(d.i, d2.i, big.NewInt(0)) + if rem.Sign() > 0 && d.IsNegative() == d2.IsNegative() || + rem.Sign() < 0 && d.IsNegative() != d2.IsNegative() { + d.i.Add(d.i, oneInt) + } - chopPrecisionAndRoundUp(d.i) if d.i.BitLen() > maxDecBitLen { panic("Int overflow") } diff --git a/math/dec_test.go b/math/dec_test.go index 96d7231a9413..1e72e173e84f 100644 --- a/math/dec_test.go +++ b/math/dec_test.go @@ -104,7 +104,7 @@ func (s *decimalTestSuite) TestNewDecFromStr() { s.Require().NotNil(err, "error expected, decimalStr %v, tc %v", tc.decimalStr, tcIndex) } else { s.Require().Nil(err, "unexpected error, decimalStr %v, tc %v", tc.decimalStr, tcIndex) - s.Require().True(res.Equal(tc.exp), "equality was incorrect, res %v, exp %v, tc %v", res, tc.exp, tcIndex) + s.Require().True(res.Equal(tc.exp), "equality was incorrect, res %v, expTruncated %v, tc %v", res, tc.exp, tcIndex) } // negative tc @@ -114,7 +114,7 @@ func (s *decimalTestSuite) TestNewDecFromStr() { } else { s.Require().Nil(err, "unexpected error, decimalStr %v, tc %v", tc.decimalStr, tcIndex) exp := tc.exp.Mul(math.LegacyNewDec(-1)) - s.Require().True(res.Equal(exp), "equality was incorrect, res %v, exp %v, tc %v", res, exp, tcIndex) + s.Require().True(res.Equal(exp), "equality was incorrect, res %v, expTruncated %v, tc %v", res, exp, tcIndex) } } } @@ -267,24 +267,24 @@ func (s *decimalTestSuite) TestArithmetic() { resMul := tc.d1.Mul(tc.d2) resMulTruncate := tc.d1.MulTruncate(tc.d2) resMulRoundUp := tc.d1.MulRoundUp(tc.d2) - s.Require().True(tc.expAdd.Equal(resAdd), "exp %v, res %v, tc %d", tc.expAdd, resAdd, tcIndex) - s.Require().True(tc.expSub.Equal(resSub), "exp %v, res %v, tc %d", tc.expSub, resSub, tcIndex) - s.Require().True(tc.expMul.Equal(resMul), "exp %v, res %v, tc %d", tc.expMul, resMul, tcIndex) - s.Require().True(tc.expMulTruncate.Equal(resMulTruncate), "exp %v, res %v, tc %d", tc.expMulTruncate, resMulTruncate, tcIndex) - s.Require().True(tc.expMulRoundUp.Equal(resMulRoundUp), "exp %v, res %v, tc %d", tc.expMulRoundUp, resMulRoundUp, tcIndex) + s.Require().True(tc.expAdd.Equal(resAdd), "expTruncated %v, res %v, tc %d", tc.expAdd, resAdd, tcIndex) + s.Require().True(tc.expSub.Equal(resSub), "expTruncated %v, res %v, tc %d", tc.expSub, resSub, tcIndex) + s.Require().True(tc.expMul.Equal(resMul), "expTruncated %v, res %v, tc %d", tc.expMul, resMul, tcIndex) + s.Require().True(tc.expMulTruncate.Equal(resMulTruncate), "expTruncated %v, res %v, tc %d", tc.expMulTruncate, resMulTruncate, tcIndex) + s.Require().True(tc.expMulRoundUp.Equal(resMulRoundUp), "expTruncated %v, res %v, tc %d", tc.expMulRoundUp, resMulRoundUp, tcIndex) if tc.d2.IsZero() { // panic for divide by zero s.Require().Panics(func() { tc.d1.Quo(tc.d2) }) } else { resQuo := tc.d1.Quo(tc.d2) - s.Require().True(tc.expQuo.Equal(resQuo), "exp %v, res %v, tc %d", tc.expQuo.String(), resQuo.String(), tcIndex) + s.Require().True(tc.expQuo.Equal(resQuo), "expTruncated %v, res %v, tc %d", tc.expQuo.String(), resQuo.String(), tcIndex) resQuoRoundUp := tc.d1.QuoRoundUp(tc.d2) - s.Require().True(tc.expQuoRoundUp.Equal(resQuoRoundUp), "exp %v, res %v, tc %d", + s.Require().True(tc.expQuoRoundUp.Equal(resQuoRoundUp), "expTruncated %v, res %v, tc %d", tc.expQuoRoundUp.String(), resQuoRoundUp.String(), tcIndex) resQuoTruncate := tc.d1.QuoTruncate(tc.d2) - s.Require().True(tc.expQuoTruncate.Equal(resQuoTruncate), "exp %v, res %v, tc %d", + s.Require().True(tc.expQuoTruncate.Equal(resQuoTruncate), "expTruncated %v, res %v, tc %d", tc.expQuoTruncate.String(), resQuoTruncate.String(), tcIndex) } } @@ -299,10 +299,10 @@ func (s *decimalTestSuite) TestMulRoundUp_RoundingAtPrecisionEnd() { ) actualRoundUp := a.MulRoundUp(b) - s.Require().Equal(expectedRoundUp.String(), actualRoundUp.String(), "exp %v, res %v", expectedRoundUp, actualRoundUp) + s.Require().Equal(expectedRoundUp.String(), actualRoundUp.String(), "expTruncated %v, res %v", expectedRoundUp, actualRoundUp) actualTruncate := a.MulTruncate(b) - s.Require().Equal(expectedTruncate.String(), actualTruncate.String(), "exp %v, res %v", expectedRoundUp, actualTruncate) + s.Require().Equal(expectedTruncate.String(), actualTruncate.String(), "expTruncated %v, res %v", expectedRoundUp, actualTruncate) } func (s *decimalTestSuite) TestBankerRoundChop() { @@ -668,11 +668,15 @@ func BenchmarkLegacyQuoMut(b *testing.B) { func BenchmarkLegacyQuoTruncateMut(b *testing.B) { b1 := math.LegacyNewDec(17e2 + 8371) + baseArr := make([]math.LegacyDec, b.N) + for i := 0; i < b.N; i++ { + baseArr[i] = b1.Clone() + } b2 := math.LegacyNewDec(4371) b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - sink = b1.QuoTruncateMut(b2) + sink = baseArr[i].QuoTruncateMut(b2) } if sink == nil { @@ -697,11 +701,15 @@ func BenchmarkLegacySqrtOnMersennePrime(b *testing.B) { func BenchmarkLegacyQuoRoundupMut(b *testing.B) { b1 := math.LegacyNewDec(17e2 + 8371) + baseArr := make([]math.LegacyDec, b.N) + for i := 0; i < b.N; i++ { + baseArr[i] = b1.Clone() + } b2 := math.LegacyNewDec(4371) b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - sink = b1.QuoRoundupMut(b2) + sink = baseArr[i].QuoRoundupMut(b2) } if sink == nil { @@ -782,3 +790,239 @@ func (s *decimalTestSuite) TestConvertToBigIntMutativeForLegacyDec() { s.Require().NotEqual(big.NewInt(50), i.BigIntMut()) s.Require().NotEqual(big.NewInt(50), i.BigInt()) } + +func TestQuoMut(t *testing.T) { + specs := map[string]struct { + dividend, divisor math.LegacyDec + expTruncated, expRoundedUp string + expPanic bool + }{ + "0.0000000000000000001": { + dividend: math.LegacyNewDecWithPrec(1, 18), + divisor: math.LegacyMustNewDecFromStr("10"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "0.0000000000000000002": { + dividend: math.LegacyNewDecWithPrec(1, 18), + divisor: math.LegacyMustNewDecFromStr("5"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "0.0000000000000000003": { + dividend: math.LegacyNewDecWithPrec(1, 18), + divisor: math.LegacyMustNewDecFromStr("3.333333333333333"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "0.0000000000000000004": { + dividend: math.LegacyNewDecWithPrec(1, 18), + divisor: math.LegacyMustNewDecFromStr("2.5"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "0.0000000000000000005": { + dividend: math.LegacyNewDecWithPrec(1, 18), + divisor: math.LegacyMustNewDecFromStr("2"), + expRoundedUp: "0.000000000000000001", + + expTruncated: "0.000000000000000000", + }, + "0.0000000000000000006": { + dividend: math.LegacyNewDecWithPrec(1, 18), + divisor: math.LegacyMustNewDecFromStr("1.666666666666666666"), + expRoundedUp: "0.000000000000000001", + + expTruncated: "0.000000000000000000", + }, + "0.0000000000000000007": { + dividend: math.LegacyNewDecWithPrec(1, 18), + divisor: math.LegacyMustNewDecFromStr("1.428571428571429"), + expRoundedUp: "0.000000000000000001", + + expTruncated: "0.000000000000000000", + }, + "0.0000000000000000008": { + dividend: math.LegacyNewDecWithPrec(1, 18), + divisor: math.LegacyMustNewDecFromStr("1.25"), + expRoundedUp: "0.000000000000000001", + + expTruncated: "0.000000000000000000", + }, + "0.0000000000000000009": { + dividend: math.LegacyNewDecWithPrec(1, 18), + divisor: math.LegacyMustNewDecFromStr("1.111111111111111"), + expRoundedUp: "0.000000000000000001", + + expTruncated: "0.000000000000000000", + }, + "-0.0000000000000000001": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("10"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "-0.0000000000000000002": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("5"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "-0.0000000000000000003": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("3.333333333333333"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "-0.0000000000000000004": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("2.5"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "-0.0000000000000000005": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("2"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "-0.0000000000000000006": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("1.666666666666666666"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "-0.0000000000000000007": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("1.428571428571429"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "-0.0000000000000000008": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("1.25"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "-0.0000000000000000009": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("1.111111111111111"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "--0.0000000000000000001": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("-10"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "--0.0000000000000000002": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("-5"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "--0.0000000000000000003": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("-3.333333333333333"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "--0.0000000000000000004": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("-2.5"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "--0.0000000000000000005": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("-2"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "--0.0000000000000000006": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("-1.666666666666666666"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "--0.0000000000000000007": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("-1.428571428571429"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "--0.0000000000000000008": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("-1.25"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "--0.0000000000000000009": { + dividend: math.LegacyNewDecWithPrec(1, 18).Neg(), + divisor: math.LegacyMustNewDecFromStr("-1.111111111111111"), + expRoundedUp: "0.000000000000000001", + expTruncated: "0.000000000000000000", + }, + "big / small": { + dividend: math.LegacyMustNewDecFromStr("999999999999999999"), + divisor: math.LegacyNewDecWithPrec(1, 18), + expRoundedUp: "999999999999999999000000000000000000.000000000000000000", + expTruncated: "999999999999999999000000000000000000.000000000000000000", + }, + "divide by dividend": { + dividend: math.LegacyNewDecWithPrec(123, 0), + divisor: math.LegacyMustNewDecFromStr("123"), + expRoundedUp: "1.000000000000000000", + expTruncated: "1.000000000000000000", + }, + "zero divided": { + dividend: math.LegacyNewDecWithPrec(0, 0), + divisor: math.LegacyMustNewDecFromStr("1"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "zero divided by negative value": { + dividend: math.LegacyNewDecWithPrec(0, 0), + divisor: math.LegacyMustNewDecFromStr("-1"), + expRoundedUp: "0.000000000000000000", + expTruncated: "0.000000000000000000", + }, + "zero divided by zero": { + dividend: math.LegacyNewDecWithPrec(0, 0), + divisor: math.LegacyMustNewDecFromStr("0"), + expPanic: true, + }, + "divide by zero": { + dividend: math.LegacyNewDecWithPrec(1, 0), + divisor: math.LegacyMustNewDecFromStr("0"), + expPanic: true, + }, + } + for name, spec := range specs { + t.Run(name, func(t *testing.T) { + t.Run("round up", func(t *testing.T) { + t.Parallel() + if !spec.expPanic { + got := spec.dividend.Clone().QuoRoundupMut(spec.divisor.Clone()) + require.Equal(t, spec.expRoundedUp, got.String()) + return + } + require.Panics(t, func() { + _ = spec.dividend.Clone().QuoRoundupMut(spec.divisor.Clone()) + }) + }) + t.Run("truncate", func(t *testing.T) { + t.Parallel() + if !spec.expPanic { + got := spec.dividend.Clone().QuoTruncateMut(spec.divisor.Clone()) + require.Equal(t, spec.expTruncated, got.String()) + return + } + require.Panics(t, func() { + _ = spec.dividend.Clone().QuoTruncateMut(spec.divisor.Clone()) + }) + }) + }) + } +} From 465410c75bce6f09c7d1e441dafade0322d012b8 Mon Sep 17 00:00:00 2001 From: Aryan Tikarya Date: Thu, 30 May 2024 19:45:13 +0530 Subject: [PATCH 3/6] feat(cosmovisor): load cosmovisor configuration from toml file (#19995) --- tools/cosmovisor/CHANGELOG.md | 12 ++ tools/cosmovisor/args.go | 185 +++++++++++++++--- tools/cosmovisor/args_test.go | 164 ++++++++++++---- .../cosmovisor/cmd/cosmovisor/add_upgrade.go | 7 +- tools/cosmovisor/cmd/cosmovisor/config.go | 8 +- tools/cosmovisor/cmd/cosmovisor/init.go | 38 +++- tools/cosmovisor/cmd/cosmovisor/init_test.go | 154 ++++++++++++++- tools/cosmovisor/cmd/cosmovisor/root.go | 5 +- tools/cosmovisor/cmd/cosmovisor/run.go | 42 +++- tools/cosmovisor/cmd/cosmovisor/version.go | 3 +- tools/cosmovisor/flags.go | 1 + tools/cosmovisor/process.go | 8 +- tools/cosmovisor/process_test.go | 4 +- 13 files changed, 537 insertions(+), 94 deletions(-) diff --git a/tools/cosmovisor/CHANGELOG.md b/tools/cosmovisor/CHANGELOG.md index d3255d8d57db..39b549e882ba 100644 --- a/tools/cosmovisor/CHANGELOG.md +++ b/tools/cosmovisor/CHANGELOG.md @@ -38,6 +38,18 @@ Ref: https://keepachangelog.com/en/1.0.0/ * [#20062](https://github.com/cosmos/cosmos-sdk/pull/20062) Fixed cosmovisor add-upgrade permissions +## Features + +* [#19764](https://github.com/cosmos/cosmos-sdk/issues/19764) Use config file for cosmovisor configuration. + +## Improvements + +* [#19995](https://github.com/cosmos/cosmos-sdk/pull/19995): + * `init command` writes the configuration to the config file only at the default path `DAEMON_HOME/cosmovisor/config.toml`. + * Provide `--cosmovisor-config` flag with value as args to provide the path to the configuration file in the `run` command. `run --cosmovisor-config (other cmds with flags) ...`. + * Add `--cosmovisor-config` flag to provide `config.toml` path to the configuration file in root command used by `add-upgrade` and `config` subcommands. + * `config command` now displays the configuration from the config file if it is provided. If the config file is not provided, it will display the configuration from the environment variables. + ## v1.5.0 - 2023-07-17 ## Features diff --git a/tools/cosmovisor/args.go b/tools/cosmovisor/args.go index 4501e8e7d880..e89112749b30 100644 --- a/tools/cosmovisor/args.go +++ b/tools/cosmovisor/args.go @@ -12,6 +12,9 @@ import ( "strings" "time" + "github.com/pelletier/go-toml/v2" + "github.com/spf13/viper" + "cosmossdk.io/log" "cosmossdk.io/x/upgrade/plan" upgradetypes "cosmossdk.io/x/upgrade/types" @@ -42,26 +45,29 @@ const ( genesisDir = "genesis" upgradesDir = "upgrades" currentLink = "current" + + cfgFileName = "config" + cfgExtension = "toml" ) // Config is the information passed in to control the daemon type Config struct { - Home string - Name string - AllowDownloadBinaries bool - DownloadMustHaveChecksum bool - RestartAfterUpgrade bool - RestartDelay time.Duration - ShutdownGrace time.Duration - PollInterval time.Duration - UnsafeSkipBackup bool - DataBackupPath string - PreupgradeMaxRetries int - DisableLogs bool - ColorLogs bool - TimeFormatLogs string - CustomPreupgrade string - DisableRecase bool + Home string `toml:"daemon_home" mapstructure:"daemon_home"` + Name string `toml:"daemon_name" mapstructure:"daemon_name"` + AllowDownloadBinaries bool `toml:"daemon_allow_download_binaries" mapstructure:"daemon_allow_download_binaries" default:"false"` + DownloadMustHaveChecksum bool `toml:"daemon_download_must_have_checksum" mapstructure:"daemon_download_must_have_checksum" default:"false"` + RestartAfterUpgrade bool `toml:"daemon_restart_after_upgrade" mapstructure:"daemon_restart_after_upgrade" default:"true"` + RestartDelay time.Duration `toml:"daemon_restart_delay" mapstructure:"daemon_restart_delay"` + ShutdownGrace time.Duration `toml:"daemon_shutdown_grace" mapstructure:"daemon_shutdown_grace"` + PollInterval time.Duration `toml:"daemon_poll_interval" mapstructure:"daemon_poll_interval" default:"300ms"` + UnsafeSkipBackup bool `toml:"unsafe_skip_backup" mapstructure:"unsafe_skip_backup" default:"false"` + DataBackupPath string `toml:"daemon_data_backup_dir" mapstructure:"daemon_data_backup_dir"` + PreUpgradeMaxRetries int `toml:"daemon_preupgrade_max_retries" mapstructure:"daemon_preupgrade_max_retries" default:"0"` + DisableLogs bool `toml:"cosmovisor_disable_logs" mapstructure:"cosmovisor_disable_logs" default:"false"` + ColorLogs bool `toml:"cosmovisor_color_logs" mapstructure:"cosmovisor_color_logs" default:"true"` + TimeFormatLogs string `toml:"cosmovisor_timeformat_logs" mapstructure:"cosmovisor_timeformat_logs" default:"kitchen"` + CustomPreUpgrade string `toml:"cosmovisor_custom_preupgrade" mapstructure:"cosmovisor_custom_preupgrade" default:""` + DisableRecase bool `toml:"cosmovisor_disable_recase" mapstructure:"cosmovisor_disable_recase" default:"false"` // currently running upgrade currentUpgrade upgradetypes.Plan @@ -72,6 +78,11 @@ func (cfg *Config) Root() string { return filepath.Join(cfg.Home, rootName) } +// DefaultCfgPath returns the default path to the configuration file. +func (cfg *Config) DefaultCfgPath() string { + return filepath.Join(cfg.Root(), cfgFileName+"."+cfgExtension) +} + // GenesisBin is the path to the genesis binary - must be in place to start manager func (cfg *Config) GenesisBin() string { return filepath.Join(cfg.Root(), genesisDir, "bin", cfg.Name) @@ -145,6 +156,51 @@ func (cfg *Config) CurrentBin() (string, error) { return binpath, nil } +// GetConfigFromFile will read the configuration from the file at the given path. +// If the file path is not provided, it will try to read the configuration from the ENV variables. +// If a file path is provided and ENV variables are set, they will override the values in the file. +func GetConfigFromFile(filePath string) (*Config, error) { + if filePath == "" { + return GetConfigFromEnv() + } + + // ensure the file exist + if _, err := os.Stat(filePath); err != nil { + return nil, fmt.Errorf("config not found: at %s : %w", filePath, err) + } + + // read the configuration from the file + viper.SetConfigFile(filePath) + // load the env variables + // if the env variable is set, it will override the value provided by the config + viper.AutomaticEnv() + + if err := viper.ReadInConfig(); err != nil { + return nil, fmt.Errorf("failed to read config file: %w", err) + } + + cfg := &Config{} + if err := viper.Unmarshal(cfg); err != nil { + return nil, fmt.Errorf("failed to unmarshal configuration: %w", err) + } + + var ( + err error + errs []error + ) + + if cfg.TimeFormatLogs, err = getTimeFormatOption(cfg.TimeFormatLogs); err != nil { + errs = append(errs, err) + } + + errs = append(errs, cfg.validate()...) + if len(errs) > 0 { + return nil, errors.Join(errs...) + } + + return cfg, nil +} + // GetConfigFromEnv will read the environmental variables into a config // and then validate it is reasonable func GetConfigFromEnv() (*Config, error) { @@ -153,7 +209,7 @@ func GetConfigFromEnv() (*Config, error) { Home: os.Getenv(EnvHome), Name: os.Getenv(EnvName), DataBackupPath: os.Getenv(EnvDataBackupPath), - CustomPreupgrade: os.Getenv(EnvCustomPreupgrade), + CustomPreUpgrade: os.Getenv(EnvCustomPreupgrade), } if cfg.DataBackupPath == "" { @@ -220,8 +276,8 @@ func GetConfigFromEnv() (*Config, error) { } } - envPreupgradeMaxRetriesVal := os.Getenv(EnvPreupgradeMaxRetries) - if cfg.PreupgradeMaxRetries, err = strconv.Atoi(envPreupgradeMaxRetriesVal); err != nil && envPreupgradeMaxRetriesVal != "" { + envPreUpgradeMaxRetriesVal := os.Getenv(EnvPreupgradeMaxRetries) + if cfg.PreUpgradeMaxRetries, err = strconv.Atoi(envPreUpgradeMaxRetriesVal); err != nil && envPreUpgradeMaxRetriesVal != "" { errs = append(errs, fmt.Errorf("%s could not be parsed to int: %w", EnvPreupgradeMaxRetries, err)) } @@ -355,6 +411,7 @@ func (cfg *Config) SetCurrentUpgrade(u upgradetypes.Plan) (rerr error) { return err } +// UpgradeInfo returns the current upgrade info func (cfg *Config) UpgradeInfo() (upgradetypes.Plan, error) { if cfg.currentUpgrade.Name != "" { return cfg.currentUpgrade, nil @@ -381,7 +438,7 @@ returnError: return cfg.currentUpgrade, fmt.Errorf("failed to read %q: %w", filename, err) } -// checks and validates env option +// BooleanOption checks and validate env option func BooleanOption(name string, defaultVal bool) (bool, error) { p := strings.ToLower(os.Getenv(name)) switch p { @@ -395,12 +452,17 @@ func BooleanOption(name string, defaultVal bool) (bool, error) { return false, fmt.Errorf("env variable %q must have a boolean value (\"true\" or \"false\"), got %q", name, p) } -// checks and validates env option +// TimeFormatOptionFromEnv checks and validates the time format option func TimeFormatOptionFromEnv(env, defaultVal string) (string, error) { val, set := os.LookupEnv(env) if !set { return defaultVal, nil } + + return getTimeFormatOption(val) +} + +func getTimeFormatOption(val string) (string, error) { switch val { case "layout": return time.Layout, nil @@ -432,6 +494,38 @@ func TimeFormatOptionFromEnv(env, defaultVal string) (string, error) { return "", fmt.Errorf("env variable %q must have a timeformat value (\"layout|ansic|unixdate|rubydate|rfc822|rfc822z|rfc850|rfc1123|rfc1123z|rfc3339|rfc3339nano|kitchen\"), got %q", EnvTimeFormatLogs, val) } +// ValueToTimeFormatOption converts the time format option to the env value +func ValueToTimeFormatOption(format string) string { + switch format { + case time.Layout: + return "layout" + case time.ANSIC: + return "ansic" + case time.UnixDate: + return "unixdate" + case time.RubyDate: + return "rubydate" + case time.RFC822: + return "rfc822" + case time.RFC822Z: + return "rfc822z" + case time.RFC850: + return "rfc850" + case time.RFC1123: + return "rfc1123" + case time.RFC1123Z: + return "rfc1123z" + case time.RFC3339: + return "rfc3339" + case time.RFC3339Nano: + return "rfc3339nano" + case time.Kitchen: + return "kitchen" + default: + return "" + } +} + // DetailString returns a multi-line string with details about this config. func (cfg Config) DetailString() string { configEntries := []struct{ name, value string }{ @@ -445,11 +539,11 @@ func (cfg Config) DetailString() string { {EnvInterval, cfg.PollInterval.String()}, {EnvSkipBackup, fmt.Sprintf("%t", cfg.UnsafeSkipBackup)}, {EnvDataBackupPath, cfg.DataBackupPath}, - {EnvPreupgradeMaxRetries, fmt.Sprintf("%d", cfg.PreupgradeMaxRetries)}, + {EnvPreupgradeMaxRetries, fmt.Sprintf("%d", cfg.PreUpgradeMaxRetries)}, {EnvDisableLogs, fmt.Sprintf("%t", cfg.DisableLogs)}, {EnvColorLogs, fmt.Sprintf("%t", cfg.ColorLogs)}, {EnvTimeFormatLogs, cfg.TimeFormatLogs}, - {EnvCustomPreupgrade, cfg.CustomPreupgrade}, + {EnvCustomPreupgrade, cfg.CustomPreUpgrade}, {EnvDisableRecase, fmt.Sprintf("%t", cfg.DisableRecase)}, } @@ -479,3 +573,48 @@ func (cfg Config) DetailString() string { } return sb.String() } + +// Export exports the configuration to a file at the given path. +func (cfg Config) Export() (string, error) { + // always use the default path + path := filepath.Clean(cfg.DefaultCfgPath()) + + // check if config file already exists ask user if they want to overwrite it + if _, err := os.Stat(path); err == nil { + // ask user if they want to overwrite the file + if !askForConfirmation(fmt.Sprintf("file %s already exists, do you want to overwrite it?", path)) { + cfg.Logger(os.Stdout).Info("file already exists, not overriding") + return path, nil + } + } + + // create the file + file, err := os.Create(filepath.Clean(path)) + if err != nil { + return "", fmt.Errorf("failed to create configuration file: %w", err) + } + + // convert the time value to its format option + cfg.TimeFormatLogs = ValueToTimeFormatOption(cfg.TimeFormatLogs) + + defer file.Close() + + // write the configuration to the file + err = toml.NewEncoder(file).Encode(cfg) + if err != nil { + return "", fmt.Errorf("failed to encode configuration: %w", err) + } + + return path, nil +} + +func askForConfirmation(str string) bool { + var response string + fmt.Printf("%s [y/n]: ", str) + _, err := fmt.Scanln(&response) + if err != nil { + return false + } + + return strings.ToLower(response) == "y" +} diff --git a/tools/cosmovisor/args_test.go b/tools/cosmovisor/args_test.go index e161d229e7db..b379720763f0 100644 --- a/tools/cosmovisor/args_test.go +++ b/tools/cosmovisor/args_test.go @@ -7,6 +7,7 @@ import ( "testing" "time" + "github.com/pelletier/go-toml/v2" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -412,7 +413,7 @@ func (s *argsTestSuite) TestDetailString() { PollInterval: pollInterval, UnsafeSkipBackup: unsafeSkipBackup, DataBackupPath: dataBackupPath, - PreupgradeMaxRetries: preupgradeMaxRetries, + PreUpgradeMaxRetries: preupgradeMaxRetries, } expectedPieces := []string{ @@ -444,6 +445,41 @@ func (s *argsTestSuite) TestDetailString() { } } +var newConfig = func( + home, name string, + downloadBin bool, + downloadMustHaveChecksum bool, + restartUpgrade bool, + restartDelay int, + skipBackup bool, + dataBackupPath string, + interval, preupgradeMaxRetries int, + disableLogs, colorLogs bool, + timeFormatLogs string, + customPreUpgrade string, + disableRecase bool, + shutdownGrace int, +) *Config { + return &Config{ + Home: home, + Name: name, + AllowDownloadBinaries: downloadBin, + DownloadMustHaveChecksum: downloadMustHaveChecksum, + RestartAfterUpgrade: restartUpgrade, + RestartDelay: time.Millisecond * time.Duration(restartDelay), + PollInterval: time.Millisecond * time.Duration(interval), + UnsafeSkipBackup: skipBackup, + DataBackupPath: dataBackupPath, + PreUpgradeMaxRetries: preupgradeMaxRetries, + DisableLogs: disableLogs, + ColorLogs: colorLogs, + TimeFormatLogs: timeFormatLogs, + CustomPreUpgrade: customPreUpgrade, + DisableRecase: disableRecase, + ShutdownGrace: time.Duration(shutdownGrace), + } +} + func (s *argsTestSuite) TestGetConfigFromEnv() { initialEnv := s.clearEnv() defer s.setEnv(nil, initialEnv) @@ -452,41 +488,6 @@ func (s *argsTestSuite) TestGetConfigFromEnv() { absPath, perr := filepath.Abs(relPath) s.Require().NoError(perr) - newConfig := func( - home, name string, - downloadBin bool, - downloadMustHaveChecksum bool, - restartUpgrade bool, - restartDelay int, - skipBackup bool, - dataBackupPath string, - interval, preupgradeMaxRetries int, - disableLogs, colorLogs bool, - timeFormatLogs string, - customPreUpgrade string, - disableRecase bool, - shutdownGrace int, - ) *Config { - return &Config{ - Home: home, - Name: name, - AllowDownloadBinaries: downloadBin, - DownloadMustHaveChecksum: downloadMustHaveChecksum, - RestartAfterUpgrade: restartUpgrade, - RestartDelay: time.Millisecond * time.Duration(restartDelay), - PollInterval: time.Millisecond * time.Duration(interval), - UnsafeSkipBackup: skipBackup, - DataBackupPath: dataBackupPath, - PreupgradeMaxRetries: preupgradeMaxRetries, - DisableLogs: disableLogs, - ColorLogs: colorLogs, - TimeFormatLogs: timeFormatLogs, - CustomPreupgrade: customPreUpgrade, - DisableRecase: disableRecase, - ShutdownGrace: time.Duration(shutdownGrace), - } - } - tests := []struct { name string envVals cosmovisorEnv @@ -783,6 +784,95 @@ func (s *argsTestSuite) TestGetConfigFromEnv() { } } +func (s *argsTestSuite) setUpDir() string { + s.T().Helper() + + home := s.T().TempDir() + err := os.MkdirAll(filepath.Join(home, rootName), 0o755) + s.Require().NoError(err) + return home +} + +func (s *argsTestSuite) setupConfig(home string) string { + s.T().Helper() + + cfg := newConfig(home, "test", true, true, true, 406, false, home, 8, 0, false, true, "kitchen", "", true, 10000000000) + path := filepath.Join(home, rootName, "config.toml") + f, err := os.Create(path) + s.Require().NoError(err) + + enc := toml.NewEncoder(f) + s.Require().NoError(enc.Encode(&cfg)) + + err = f.Close() + s.Require().NoError(err) + + return path +} + +func (s *argsTestSuite) TestConfigFromFile() { + home := s.setUpDir() + // create a config file + cfgFilePath := s.setupConfig(home) + + testCases := []struct { + name string + config *Config + expectedCfg func() *Config + filePath string + expectedError string + malleate func() + }{ + { + name: "valid config", + expectedCfg: func() *Config { + return newConfig(home, "test", true, true, true, 406, false, home, 8, 0, false, true, time.Kitchen, "", true, 10000000000) + }, + filePath: cfgFilePath, + expectedError: "", + malleate: func() {}, + }, + { + name: "env variable will override config file fields", + filePath: cfgFilePath, + expectedError: "", + malleate: func() { + // set env variable different from the config file + os.Setenv(EnvName, "env-name") + }, + expectedCfg: func() *Config { + return newConfig(home, "env-name", true, true, true, 406, false, home, 8, 0, false, true, time.Kitchen, "", true, 10000000000) + }, + }, + { + name: "empty config file path will load config from ENV variables", + expectedCfg: func() *Config { + return newConfig(home, "test", true, true, true, 406, false, home, 8, 0, false, true, time.Kitchen, "", true, 10000000000) + }, + filePath: "", + expectedError: "", + malleate: func() { + s.setEnv(s.T(), &cosmovisorEnv{home, "test", "true", "true", "true", "406ms", "false", home, "8ms", "0", "false", "true", "kitchen", "", "true", "10s"}) + }, + }, + } + + for _, tc := range testCases { + s.T().Run(tc.name, func(t *testing.T) { + tc.malleate() + actualCfg, err := GetConfigFromFile(tc.filePath) + if tc.expectedError != "" { + s.Require().NoError(err) + s.Require().Contains(err.Error(), tc.expectedError) + return + } + + s.Require().NoError(err) + s.Require().EqualValues(tc.expectedCfg(), actualCfg) + }) + } +} + var sink interface{} func BenchmarkDetailString(b *testing.B) { @@ -791,7 +881,7 @@ func BenchmarkDetailString(b *testing.B) { AllowDownloadBinaries: true, UnsafeSkipBackup: true, PollInterval: 450 * time.Second, - PreupgradeMaxRetries: 1e7, + PreUpgradeMaxRetries: 1e7, } b.ReportAllocs() diff --git a/tools/cosmovisor/cmd/cosmovisor/add_upgrade.go b/tools/cosmovisor/cmd/cosmovisor/add_upgrade.go index 4e52d85728c5..b188ab05fdc4 100644 --- a/tools/cosmovisor/cmd/cosmovisor/add_upgrade.go +++ b/tools/cosmovisor/cmd/cosmovisor/add_upgrade.go @@ -30,7 +30,12 @@ func NewAddUpgradeCmd() *cobra.Command { // AddUpgrade adds upgrade info to manifest func AddUpgrade(cmd *cobra.Command, args []string) error { - cfg, err := cosmovisor.GetConfigFromEnv() + configPath, err := cmd.Flags().GetString(cosmovisor.FlagCosmovisorConfig) + if err != nil { + return fmt.Errorf("failed to get config flag: %w", err) + } + + cfg, err := cosmovisor.GetConfigFromFile(configPath) if err != nil { return err } diff --git a/tools/cosmovisor/cmd/cosmovisor/config.go b/tools/cosmovisor/cmd/cosmovisor/config.go index 927e005ebf6a..d651e5fb3839 100644 --- a/tools/cosmovisor/cmd/cosmovisor/config.go +++ b/tools/cosmovisor/cmd/cosmovisor/config.go @@ -7,11 +7,13 @@ import ( ) var configCmd = &cobra.Command{ - Use: "config", - Short: "Display cosmovisor config (prints environment variables used by cosmovisor).", + Use: "config", + Short: "Display cosmovisor config.", + Long: `Display cosmovisor config. If a config file is provided, it will display the config from the file, +otherwise it will display the config from the environment variables.`, SilenceUsage: true, RunE: func(cmd *cobra.Command, args []string) error { - cfg, err := cosmovisor.GetConfigFromEnv() + cfg, err := cosmovisor.GetConfigFromFile(cmd.Flag(cosmovisor.FlagCosmovisorConfig).Value.String()) if err != nil { return err } diff --git a/tools/cosmovisor/cmd/cosmovisor/init.go b/tools/cosmovisor/cmd/cosmovisor/init.go index 9b08529e647e..66d99b68032e 100644 --- a/tools/cosmovisor/cmd/cosmovisor/init.go +++ b/tools/cosmovisor/cmd/cosmovisor/init.go @@ -15,14 +15,20 @@ import ( "cosmossdk.io/x/upgrade/plan" ) -var initCmd = &cobra.Command{ - Use: "init ", - Short: "Initialize a cosmovisor daemon home directory.", - Args: cobra.ExactArgs(1), - SilenceUsage: true, - RunE: func(cmd *cobra.Command, args []string) error { - return InitializeCosmovisor(nil, args) - }, +func NewIntCmd() *cobra.Command { + initCmd := &cobra.Command{ + Use: "init ", + Short: "Initialize a cosmovisor daemon home directory.", + Long: `Initialize a cosmovisor daemon home directory with the provided executable. +Configuration file is initialized at the default path (<-home->/cosmovisor/config.toml).`, + Args: cobra.ExactArgs(1), + SilenceUsage: true, + RunE: func(cmd *cobra.Command, args []string) error { + return InitializeCosmovisor(nil, args) + }, + } + + return initCmd } // InitializeCosmovisor initializes the cosmovisor directories, current link, and initial executable. @@ -88,12 +94,20 @@ func InitializeCosmovisor(logger log.Logger, args []string) error { } logger.Info(fmt.Sprintf("the current symlink points to: %q", cur)) + filePath, err := cfg.Export() + if err != nil { + return fmt.Errorf("failed to export configuration: %w", err) + } + + logger.Info(fmt.Sprintf("config file present at: %s", filePath)) + return nil } // getConfigForInitCmd gets just the configuration elements needed to initialize cosmovisor. func getConfigForInitCmd() (*cosmovisor.Config, error) { var errs []error + // Note: Not using GetConfigFromEnv here because that checks that the directories already exist. // We also don't care about the rest of the configuration stuff in here. cfg := &cosmovisor.Config{ @@ -105,19 +119,27 @@ func getConfigForInitCmd() (*cosmovisor.Config, error) { if cfg.ColorLogs, err = cosmovisor.BooleanOption(cosmovisor.EnvColorLogs, true); err != nil { errs = append(errs, err) } + if cfg.TimeFormatLogs, err = cosmovisor.TimeFormatOptionFromEnv(cosmovisor.EnvTimeFormatLogs, time.Kitchen); err != nil { errs = append(errs, err) } + // if backup is not set, use the home directory + if cfg.DataBackupPath == "" { + cfg.DataBackupPath = cfg.Home + } + if len(cfg.Name) == 0 { errs = append(errs, fmt.Errorf("%s is not set", cosmovisor.EnvName)) } + switch { case len(cfg.Home) == 0: errs = append(errs, fmt.Errorf("%s is not set", cosmovisor.EnvHome)) case !filepath.IsAbs(cfg.Home): errs = append(errs, fmt.Errorf("%s must be an absolute path", cosmovisor.EnvHome)) } + if len(errs) > 0 { return cfg, errors.Join(errs...) } diff --git a/tools/cosmovisor/cmd/cosmovisor/init_test.go b/tools/cosmovisor/cmd/cosmovisor/init_test.go index c872675e280d..95d971ab08ed 100644 --- a/tools/cosmovisor/cmd/cosmovisor/init_test.go +++ b/tools/cosmovisor/cmd/cosmovisor/init_test.go @@ -9,6 +9,8 @@ import ( "testing" "time" + "github.com/pelletier/go-toml/v2" + "github.com/spf13/viper" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" @@ -18,7 +20,10 @@ import ( ) const ( - notset = " is not set" + notset = " is not set" + cosmovisorDirName = "cosmovisor" + + cfgFileWithExt = "config.toml" ) type InitTestSuite struct { @@ -79,6 +84,7 @@ func (s *InitTestSuite) clearEnv() *cosmovisorInitEnv { for envVar := range rv.ToMap() { rv.Set(envVar, os.Getenv(envVar)) s.Require().NoError(os.Unsetenv(envVar)) + viper.Reset() } return &rv } @@ -111,6 +117,26 @@ func (s *InitTestSuite) setEnv(t *testing.T, env *cosmovisorInitEnv) { //nolint: } } +// readStdInpFromFile reads the provided data as if it were a standard input. +func (s *InitTestSuite) readStdInpFromFile(data []byte) { + // Create a temporary file and write the test input into it + tmpfile, err := os.CreateTemp("", "test") + if err != nil { + s.T().Fatal(err) + } + + // write the test input into the temporary file + if _, err := tmpfile.Write(data); err != nil { + s.T().Fatal(err) + } + + if _, err := tmpfile.Seek(0, 0); err != nil { + s.T().Fatal(err) + } + + os.Stdin = tmpfile +} + var ( _ io.Reader = BufferedPipe{} _ io.Writer = BufferedPipe{} @@ -247,7 +273,7 @@ func (p *BufferedPipe) panicIfStarted(msg string) { func (s *InitTestSuite) NewCapturingLogger() (*BufferedPipe, log.Logger) { bufferedStdOut, err := StartNewBufferedPipe("stdout", os.Stdout) s.Require().NoError(err, "creating stdout buffered pipe") - logger := log.NewLogger(bufferedStdOut, log.ColorOption(false), log.TimeFormatOption(time.RFC3339Nano)).With(log.ModuleKey, "cosmovisor") + logger := log.NewLogger(bufferedStdOut, log.ColorOption(false), log.TimeFormatOption(time.RFC3339Nano)).With(log.ModuleKey, cosmovisorDirName) return &bufferedStdOut, logger } @@ -360,7 +386,7 @@ func (s *InitTestSuite) TestInitializeCosmovisorInvalidExisting() { Home: filepath.Join(testDir, "home"), Name: "pear", } - genDir := filepath.Join(env.Home, "cosmovisor", "genesis") + genDir := filepath.Join(env.Home, cosmovisorDirName, "genesis") genBin := filepath.Join(genDir, "bin") require.NoError(t, os.MkdirAll(genDir, 0o755), "creating genesis directory") require.NoError(t, copyFile(hwExe, genBin), "copying exe to genesis/bin") @@ -380,7 +406,7 @@ func (s *InitTestSuite) TestInitializeCosmovisorInvalidExisting() { } // Create the genesis bin executable path fully as a directory (instead of a file). // That should get through all the other stuff, but error when EnsureBinary is called. - genBinExe := filepath.Join(env.Home, "cosmovisor", "genesis", "bin", env.Name) + genBinExe := filepath.Join(env.Home, cosmovisorDirName, "genesis", "bin", env.Name) require.NoError(t, os.MkdirAll(genBinExe, 0o755)) expErr := fmt.Sprintf("%s is not a regular file", env.Name) // Check the log messages just to make sure it's erroring where expecting. @@ -416,7 +442,7 @@ func (s *InitTestSuite) TestInitializeCosmovisorInvalidExisting() { Home: filepath.Join(testDir, "home"), Name: "orange", } - rootDir := filepath.Join(env.Home, "cosmovisor") + rootDir := filepath.Join(env.Home, cosmovisorDirName) require.NoError(t, os.MkdirAll(rootDir, 0o755)) curLn := filepath.Join(rootDir, "current") genDir := filepath.Join(rootDir, "genesis") @@ -465,8 +491,8 @@ func (s *InitTestSuite) TestInitializeCosmovisorValid() { Home: filepath.Join(testDir, "home"), Name: "blank", } - curLn := filepath.Join(env.Home, "cosmovisor", "current") - genBinDir := filepath.Join(env.Home, "cosmovisor", "genesis", "bin") + curLn := filepath.Join(env.Home, cosmovisorDirName, "current") + genBinDir := filepath.Join(env.Home, cosmovisorDirName, "genesis", "bin") genBinExe := filepath.Join(genBinDir, env.Name) expInLog := []string{ "checking on the genesis/bin directory", @@ -476,6 +502,7 @@ func (s *InitTestSuite) TestInitializeCosmovisorValid() { fmt.Sprintf("making sure %q is executable", genBinExe), "checking on the current symlink and creating it if needed", fmt.Sprintf("the current symlink points to: %q", genBinExe), + fmt.Sprintf("config file present at: %s", filepath.Join(env.Home, cosmovisorDirName, cfgFileWithExt)), } s.setEnv(s.T(), env) @@ -508,7 +535,7 @@ func (s *InitTestSuite) TestInitializeCosmovisorValid() { Home: filepath.Join(testDir, "home"), Name: "nocur", } - rootDir := filepath.Join(env.Home, "cosmovisor") + rootDir := filepath.Join(env.Home, cosmovisorDirName) genBinDir := filepath.Join(rootDir, "genesis", "bin") genBinDirExe := filepath.Join(genBinDir, env.Name) require.NoError(t, os.MkdirAll(genBinDir, 0o755), "making genesis bin dir") @@ -528,6 +555,7 @@ func (s *InitTestSuite) TestInitializeCosmovisorValid() { fmt.Sprintf("the %q file already exists", genBinDirExe), fmt.Sprintf("making sure %q is executable", genBinDirExe), fmt.Sprintf("the current symlink points to: %q", genBinDirExe), + fmt.Sprintf("config file present at: %s", filepath.Join(env.Home, cosmovisorDirName, cfgFileWithExt)), } s.setEnv(t, env) @@ -548,7 +576,7 @@ func (s *InitTestSuite) TestInitializeCosmovisorValid() { Home: filepath.Join(testDir, "home"), Name: "emptygen", } - rootDir := filepath.Join(env.Home, "cosmovisor") + rootDir := filepath.Join(env.Home, cosmovisorDirName) genBinDir := filepath.Join(rootDir, "genesis", "bin") genBinExe := filepath.Join(genBinDir, env.Name) require.NoError(t, os.MkdirAll(genBinDir, 0o755), "making genesis bin dir") @@ -560,6 +588,7 @@ func (s *InitTestSuite) TestInitializeCosmovisorValid() { fmt.Sprintf("copying executable into place: %q", genBinExe), fmt.Sprintf("making sure %q is executable", genBinExe), fmt.Sprintf("the current symlink points to: %q", genBinExe), + fmt.Sprintf("config file present at: %s", filepath.Join(env.Home, cosmovisorDirName, cfgFileWithExt)), } s.setEnv(t, env) @@ -573,4 +602,111 @@ func (s *InitTestSuite) TestInitializeCosmovisorValid() { assert.Contains(t, bufferStr, exp) } }) + + s.T().Run("ask to override (y/n) the existing config file", func(t *testing.T) { + }) + + s.T().Run("init command exports configs to default path", func(t *testing.T) { + testDir := s.T().TempDir() + env := &cosmovisorInitEnv{ + Home: filepath.Join(testDir, "home"), + Name: "emptygen", + } + + s.setEnv(t, env) + buffer, logger := s.NewCapturingLogger() + logger.Info(fmt.Sprintf("Calling InitializeCosmovisor: %s", t.Name())) + err := InitializeCosmovisor(logger, []string{hwExe}) + require.NoError(t, err, "calling InitializeCosmovisor") + bufferBz := buffer.Collect() + bufferStr := string(bufferBz) + assert.Contains(t, bufferStr, fmt.Sprintf("config file present at: %s", filepath.Join(env.Home, cosmovisorDirName, cfgFileWithExt))) + }) +} + +func (s *InitTestSuite) TestInitializeCosmovisorWithOverrideCfg() { + initEnv := s.clearEnv() + defer s.setEnv(nil, initEnv) + + tmpExe := s.CreateHelloWorld(0o755) + testDir := s.T().TempDir() + homePath := filepath.Join(testDir, "backup") + testCases := []struct { + name string + input string + cfg *cosmovisor.Config + override bool + }{ + { + name: "yes override", + input: "y\n", + cfg: &cosmovisor.Config{ + Home: homePath, + Name: "old_test", + DataBackupPath: homePath, + }, + override: true, + }, + { + name: "no override", + input: "n\n", + cfg: &cosmovisor.Config{ + Home: homePath, + Name: "old_test", + DataBackupPath: homePath, + }, + override: false, + }, + } + + for _, tc := range testCases { + s.T().Run(tc.name, func(t *testing.T) { + // create a root cosmovisor directory + require.NoError(t, os.MkdirAll(tc.cfg.Root(), 0o755), "making root dir") + + // create a config file in the default location + file, err := os.Create(tc.cfg.DefaultCfgPath()) + require.NoError(t, err) + + // write the config to the file + err = toml.NewEncoder(file).Encode(tc.cfg) + require.NoError(t, err) + + err = file.Close() + require.NoError(t, err) + + s.readStdInpFromFile([]byte(tc.input)) + + _, logger := s.NewCapturingLogger() + logger.Info(fmt.Sprintf("Calling InitializeCosmovisor: %s", t.Name())) + + // override the daemon name in environment file + // if override is true (y), then the name should be updated in the config file + // otherwise (n), the name should not be updated in the config file + s.setEnv(t, &cosmovisorInitEnv{ + Home: tc.cfg.Home, + Name: "update_name", + }) + + err = InitializeCosmovisor(logger, []string{tmpExe}) + require.NoError(t, err, "calling InitializeCosmovisor") + + cfg := &cosmovisor.Config{} + // read the config file + cfgFile, err := os.Open(tc.cfg.DefaultCfgPath()) + require.NoError(t, err) + defer cfgFile.Close() + + err = toml.NewDecoder(cfgFile).Decode(cfg) + require.NoError(t, err) + if tc.override { + // check if the name is updated + // basically, override the existing config file + assert.Equal(t, "update_name", cfg.Name) + } else { + // daemon name should not be updated + assert.Equal(t, tc.cfg.Name, cfg.Name) + } + }) + } } diff --git a/tools/cosmovisor/cmd/cosmovisor/root.go b/tools/cosmovisor/cmd/cosmovisor/root.go index 4d87d9867c2d..d9f6094d593c 100644 --- a/tools/cosmovisor/cmd/cosmovisor/root.go +++ b/tools/cosmovisor/cmd/cosmovisor/root.go @@ -2,6 +2,8 @@ package main import ( "github.com/spf13/cobra" + + "cosmossdk.io/tools/cosmovisor" ) func NewRootCmd() *cobra.Command { @@ -12,12 +14,13 @@ func NewRootCmd() *cobra.Command { } rootCmd.AddCommand( - initCmd, + NewIntCmd(), runCmd, configCmd, NewVersionCmd(), NewAddUpgradeCmd(), ) + rootCmd.PersistentFlags().StringP(cosmovisor.FlagCosmovisorConfig, "c", "", "path to cosmovisor config file") return rootCmd } diff --git a/tools/cosmovisor/cmd/cosmovisor/run.go b/tools/cosmovisor/cmd/cosmovisor/run.go index 24aa9b6f8991..6aa938c7d780 100644 --- a/tools/cosmovisor/cmd/cosmovisor/run.go +++ b/tools/cosmovisor/cmd/cosmovisor/run.go @@ -1,24 +1,35 @@ package main import ( + "fmt" + "strings" + "github.com/spf13/cobra" "cosmossdk.io/tools/cosmovisor" ) var runCmd = &cobra.Command{ - Use: "run", - Short: "Run an APP command.", + Use: "run", + Short: "Run an APP command.", + Long: `Run an APP command. This command is intended to be used by the cosmovisor binary. +Provide cosmovisor config file path in command args or set env variables to load configuration. +`, SilenceUsage: true, DisableFlagParsing: true, RunE: func(_ *cobra.Command, args []string) error { - return run(args) + cfgPath, args, err := parseCosmovisorConfig(args) + if err != nil { + return fmt.Errorf("failed to parse cosmovisor config: %w", err) + } + + return run(cfgPath, args) }, } // run runs the configured program with the given args and monitors it for upgrades. -func run(args []string, options ...RunOption) error { - cfg, err := cosmovisor.GetConfigFromEnv() +func run(cfgPath string, args []string, options ...RunOption) error { + cfg, err := cosmovisor.GetConfigFromFile(cfgPath) if err != nil { return err } @@ -47,3 +58,24 @@ func run(args []string, options ...RunOption) error { return err } + +func parseCosmovisorConfig(args []string) (string, []string, error) { + var configFilePath string + for i, arg := range args { + // Check if the argument is the config flag + if strings.EqualFold(arg, fmt.Sprintf("--%s", cosmovisor.FlagCosmovisorConfig)) || + strings.EqualFold(arg, fmt.Sprintf("-%s", cosmovisor.FlagCosmovisorConfig)) { + // Check if there is an argument after the flag which should be the config file path + if i+1 >= len(args) { + return "", nil, fmt.Errorf("--%s requires an argument", cosmovisor.FlagCosmovisorConfig) + } + + configFilePath = args[i+1] + // Remove the flag and its value from the arguments + args = append(args[:i], args[i+2:]...) + break + } + } + + return configFilePath, args, nil +} diff --git a/tools/cosmovisor/cmd/cosmovisor/version.go b/tools/cosmovisor/cmd/cosmovisor/version.go index fa9778ea54d8..a51b376355af 100644 --- a/tools/cosmovisor/cmd/cosmovisor/version.go +++ b/tools/cosmovisor/cmd/cosmovisor/version.go @@ -47,7 +47,7 @@ func printVersion(cmd *cobra.Command, args []string, noAppVersion bool) error { return nil } - if err := run(append([]string{"version"}, args...)); err != nil { + if err := run("", append([]string{"version"}, args...)); err != nil { return fmt.Errorf("failed to run version command: %w", err) } @@ -62,6 +62,7 @@ func printVersionJSON(cmd *cobra.Command, args []string, noAppVersion bool) erro buf := new(strings.Builder) if err := run( + "", []string{"version", "--long", "--output", "json"}, StdOutRunOption(buf), ); err != nil { diff --git a/tools/cosmovisor/flags.go b/tools/cosmovisor/flags.go index 73c17b9247dd..7c0db36bee66 100644 --- a/tools/cosmovisor/flags.go +++ b/tools/cosmovisor/flags.go @@ -6,4 +6,5 @@ const ( FlagCosmovisorOnly = "cosmovisor-only" FlagForce = "force" FlagUpgradeHeight = "upgrade-height" + FlagCosmovisorConfig = "cosmovisor-config" ) diff --git a/tools/cosmovisor/process.go b/tools/cosmovisor/process.go index 47d70e301f93..8eb4eae6a073 100644 --- a/tools/cosmovisor/process.go +++ b/tools/cosmovisor/process.go @@ -201,7 +201,7 @@ func (l Launcher) doBackup() error { // doCustomPreUpgrade executes the custom preupgrade script if provided. func (l Launcher) doCustomPreUpgrade() error { - if l.cfg.CustomPreupgrade == "" { + if l.cfg.CustomPreUpgrade == "" { return nil } @@ -221,7 +221,7 @@ func (l Launcher) doCustomPreUpgrade() error { } // check if preupgradeFile is executable file - preupgradeFile := filepath.Join(l.cfg.Home, "cosmovisor", l.cfg.CustomPreupgrade) + preupgradeFile := filepath.Join(l.cfg.Home, "cosmovisor", l.cfg.CustomPreUpgrade) l.logger.Info("looking for COSMOVISOR_CUSTOM_PREUPGRADE file", "file", preupgradeFile) info, err := os.Stat(preupgradeFile) if err != nil { @@ -264,8 +264,8 @@ func (l Launcher) doCustomPreUpgrade() error { func (l *Launcher) doPreUpgrade() error { counter := 0 for { - if counter > l.cfg.PreupgradeMaxRetries { - return fmt.Errorf("pre-upgrade command failed. reached max attempt of retries - %d", l.cfg.PreupgradeMaxRetries) + if counter > l.cfg.PreUpgradeMaxRetries { + return fmt.Errorf("pre-upgrade command failed. reached max attempt of retries - %d", l.cfg.PreUpgradeMaxRetries) } if err := l.executePreUpgradeCmd(); err != nil { diff --git a/tools/cosmovisor/process_test.go b/tools/cosmovisor/process_test.go index 3169ba3e3082..aa587042668c 100644 --- a/tools/cosmovisor/process_test.go +++ b/tools/cosmovisor/process_test.go @@ -272,7 +272,7 @@ func (s *processTestSuite) TestLaunchProcessWithDownloadsAndMissingPreupgrade() AllowDownloadBinaries: true, PollInterval: 100, UnsafeSkipBackup: true, - CustomPreupgrade: "missing.sh", + CustomPreUpgrade: "missing.sh", } logger := log.NewTestLogger(s.T()).With(log.ModuleKey, "cosmovisor") upgradeFilename := cfg.UpgradeInfoFilePath() @@ -308,7 +308,7 @@ func (s *processTestSuite) TestLaunchProcessWithDownloadsAndPreupgrade() { AllowDownloadBinaries: true, PollInterval: 100, UnsafeSkipBackup: true, - CustomPreupgrade: "preupgrade.sh", + CustomPreUpgrade: "preupgrade.sh", } buf := newBuffer() // inspect output using buf.String() logger := log.NewLogger(buf).With(log.ModuleKey, "cosmovisor") From 4d4b7064c8dc0a5de5a6a4728f6914629c7c8ba9 Mon Sep 17 00:00:00 2001 From: Marko Date: Thu, 30 May 2024 17:19:47 +0200 Subject: [PATCH 4/6] docs: code guidelines changes (#20482) --- CODING_GUIDELINES.md | 28 +++++++++++++++++----------- RELEASES.md | 22 ++++++++++++++++------ RELEASE_PROCESS.md | 11 +++-------- docs/0ver.png | Bin 66742 -> 0 bytes docs/semver.png | Bin 67627 -> 0 bytes 5 files changed, 36 insertions(+), 25 deletions(-) delete mode 100644 docs/0ver.png delete mode 100644 docs/semver.png diff --git a/CODING_GUIDELINES.md b/CODING_GUIDELINES.md index 920804357318..60aeb1192746 100644 --- a/CODING_GUIDELINES.md +++ b/CODING_GUIDELINES.md @@ -7,7 +7,7 @@ This document is an extension to [CONTRIBUTING](./CONTRIBUTING.md) and provides * Code must be well structured: * packages must have a limited responsibility (different concerns can go to different packages), * types must be easy to compose, - * think about maintainbility and testability. + * think about maintainability and testability. * "Depend upon abstractions, [not] concretions". * Try to limit the number of methods you are exposing. It's easier to expose something later than to hide it. * Take advantage of `internal` package concept. @@ -18,11 +18,11 @@ This document is an extension to [CONTRIBUTING](./CONTRIBUTING.md) and provides * Minimize code duplication. * Limit third-party dependencies. -Performance: +### Performance * Avoid unnecessary operations or memory allocations. -Security: +### Security * Pay proper attention to exploits involving: * gas usage @@ -31,6 +31,12 @@ Security: * code must be always deterministic * Thread safety. If some functionality is not thread-safe, or uses something that is not thread-safe, then clearly indicate the risk on each level. +### Documentation + +When writing code that is complex or relies on another piece of the code, it is advised to create a diagram or a flowchart to explain the logic. This will help other developers to understand the code and will also help you to understand the logic better. + +The Cosmos SDK uses [Mermaid.js](https://mermaid.js.org/), you can find the documentation on how to use it [here](https://mermaid.js.org/intro/). + ## Acceptance tests Start the design by defining Acceptance Tests. The purpose of Acceptance Testing is to @@ -108,14 +114,14 @@ The idea is you should be able to see the error message and figure out exactly what failed. Here is an example check: -```go - -for tcIndex, tc := range cases { - - resp, err := doSomething() - require.NoError(err) - require.Equal(t, tc.expected, resp, "should correctly perform X") -``` + ```go + + for tcIndex, tc := range cases { + + resp, err := doSomething() + require.NoError(err) + require.Equal(t, tc.expected, resp, "should correctly perform X") + ``` ## Quality Assurance diff --git a/RELEASES.md b/RELEASES.md index fd0fc3c26742..ed4a74fa30f2 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -6,14 +6,24 @@ The Cosmos-SDK follows both [0ver](https://0ver.org/) and [Semver](https://semve Although we adhere to semantic versioning (semver), we have introduced a few modifications to accommodate the unique characteristics of blockchains. One significant divergence is that the major version (Y.x.x) is incremented solely when a consensus-breaking change occurs. On the other hand, the minor version (x.Y.x) is increased when there is a non-consensus-breaking alteration that also results in an incompatible API change. Patch versions will be bumped for all other changes that dont break the API nor Consensus. -

- Releases Semver decision tree -

+```mermaid +flowchart TD + A[Change] --> B{Consensus Breaking?} + B -->|Yes| C[Increase Major Version] + B -->|No| D{API Breaking?} + D -->|Yes| E[Increase Minor Version] + D -->|No| F[Increase Patch Version] +``` ## 0ver Dependencies In terms of the Cosmos-SDK dependency, we adhere to a simpler versioning approach known as 0ver. This flow differs from the previous Semver flow. Under this system, when a consensus-breaking change or an API-breaking change occurs, the Cosmos-SDK team increments the minor version (x.Y.x). Conversely, when a non-consensus-breaking change and a non-API-breaking change take place, the team bumps the patch version (x.x.Y). -

- Releases 0ver decision tree -

+```mermaid +flowchart TD + A[Change] --> B{Consensus Breaking?} + B -->|Yes| C[Increase Minor Version] + B -->|No| D{API Breaking?} + D -->|Yes| E[Increase Minor Version] + D -->|No| F[Increase Patch Version] +``` diff --git a/RELEASE_PROCESS.md b/RELEASE_PROCESS.md index 5af7b2a22f65..37242e8750ec 100644 --- a/RELEASE_PROCESS.md +++ b/RELEASE_PROCESS.md @@ -46,12 +46,7 @@ v1.0.0-beta1 → v1.0.0-beta2 → ... → v1.0.0-rc1 → v1.0.0-rc2 → ... → * create a new annotated git tag (eg `git -a v1.1.0`) in the release branch. * Create a GitHub release. -Following _semver_ philosophy, point releases after `v1.0`: - -* must not break API -* can break consensus - -Before `v1.0`, point release can break both point API and consensus. +See the [Releases document](./RELEASES.md) for more information on the versioning scheme. ## Patch Release Procedure @@ -82,8 +77,8 @@ Major Release series is maintained in compliance with the **Stable Release Polic Only the following major release series have a stable release status: -* **0.47** is the previous major release and is supported until the release of **0.51.0**. A fairly strict **bugfix-only** rule applies to pull requests that are requested to be included into a not latest stable point-release. -* **0.50** is the last major release and is supported until the release of **0.52.0**. +* **0.47** is the previous major release and is supported until the release of **0.52.0**. A fairly strict **bugfix-only** rule applies to pull requests that are requested to be included into a not latest stable point-release. +* **0.50** is the last major release and is supported until the release of **0.54.0**. The SDK team maintains the last two major releases, any other major release is considered to have reached end of life. The SDK team will not backport any bug fixes to releases that are not supported. diff --git a/docs/0ver.png b/docs/0ver.png deleted file mode 100644 index 35f7a1fe6e2a6b144d0b2898da1f2775d39404b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66742 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
d7a+Ry6(N~y4*wD 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 E0K1D$pa1{> diff --git a/docs/semver.png b/docs/semver.png deleted file mode 100644 index 49be36b926f8bbbb05596ce6b32d6d9b2b1b05d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67627 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 II;Vst0Ha2_v;Y7A From 7dbbc0799e4d05c22be850ce11e61d4f5d682fa7 Mon Sep 17 00:00:00 2001 From: Matt Kocubinski Date: Thu, 30 May 2024 15:16:57 -0400 Subject: [PATCH 5/6] refactor(x/upgrade): migrate to appmodule.VersionMap (#20485) --- simapp/CHANGELOG.md | 1 + simapp/app_test.go | 4 ++-- simapp/upgrades.go | 4 ++-- types/module/module.go | 8 ++++---- x/upgrade/keeper/abci_test.go | 13 ++++++------- x/upgrade/keeper/grpc_query_test.go | 6 +++--- x/upgrade/keeper/keeper.go | 13 ++++++------- x/upgrade/keeper/keeper_test.go | 20 +++++++++++--------- x/upgrade/types/handler.go | 4 ++-- 9 files changed, 37 insertions(+), 36 deletions(-) diff --git a/simapp/CHANGELOG.md b/simapp/CHANGELOG.md index 4d0d22dad753..31fc417533f4 100644 --- a/simapp/CHANGELOG.md +++ b/simapp/CHANGELOG.md @@ -33,6 +33,7 @@ It is an exautive list of changes that completes the SimApp section in the [UPGR Always refer to the [UPGRADING.md](https://github.com/cosmos/cosmos-sdk/blob/main/UPGRADING.md) to understand the changes. * [#20409](https://github.com/cosmos/cosmos-sdk/pull/20409) Add `tx` as `SkipStoreKeys` in `app_config.go`. +* [#20485](https://github.com/cosmos/cosmos-sdk/pull/20485) The signature of `x/upgrade/types.UpgradeHandler` has changed to accept `appmodule.VersionMap` from `module.VersionMap`. These types are interchangeable, but usages of `UpradeKeeper.SetUpgradeHandler` may need to adjust their usages to match the new signature. diff --git a/simapp/app_test.go b/simapp/app_test.go index 20de441ef08b..62312557efaf 100644 --- a/simapp/app_test.go +++ b/simapp/app_test.go @@ -196,7 +196,7 @@ func TestRunMigrations(t *testing.T) { // their latest ConsensusVersion. _, err = app.ModuleManager.RunMigrations( app.NewContextLegacy(true, cmtproto.Header{Height: app.LastBlockHeight()}), configurator, - module.VersionMap{ + appmodule.VersionMap{ "accounts": accounts.AppModule{}.ConsensusVersion(), "bank": 1, "auth": auth.AppModule{}.ConsensusVersion(), @@ -247,7 +247,7 @@ func TestInitGenesisOnMigration(t *testing.T) { // Run migrations only for "mock" module. We exclude it from // the VersionMap to simulate upgrading with a new module. _, err := app.ModuleManager.RunMigrations(ctx, app.Configurator(), - module.VersionMap{ + appmodule.VersionMap{ "bank": bank.AppModule{}.ConsensusVersion(), "auth": auth.AppModule{}.ConsensusVersion(), "authz": authzmodule.AppModule{}.ConsensusVersion(), diff --git a/simapp/upgrades.go b/simapp/upgrades.go index ed6d35c0b490..01fe745d6e88 100644 --- a/simapp/upgrades.go +++ b/simapp/upgrades.go @@ -3,13 +3,13 @@ package simapp import ( "context" + "cosmossdk.io/core/appmodule" storetypes "cosmossdk.io/store/types" "cosmossdk.io/x/accounts" epochstypes "cosmossdk.io/x/epochs/types" protocolpooltypes "cosmossdk.io/x/protocolpool/types" upgradetypes "cosmossdk.io/x/upgrade/types" - "github.com/cosmos/cosmos-sdk/types/module" crisistypes "github.com/cosmos/cosmos-sdk/x/crisis/types" ) @@ -24,7 +24,7 @@ const UpgradeName = "v050-to-v051" func (app SimApp) RegisterUpgradeHandlers() { app.UpgradeKeeper.SetUpgradeHandler( UpgradeName, - func(ctx context.Context, _ upgradetypes.Plan, fromVM module.VersionMap) (module.VersionMap, error) { + func(ctx context.Context, _ upgradetypes.Plan, fromVM appmodule.VersionMap) (appmodule.VersionMap, error) { return app.ModuleManager.RunMigrations(ctx, app.Configurator(), fromVM) }, ) diff --git a/types/module/module.go b/types/module/module.go index 306db89d4fbf..4248143dc7df 100644 --- a/types/module/module.go +++ b/types/module/module.go @@ -657,7 +657,7 @@ func (m *Manager) assertNoForgottenModules(setOrderFnName string, moduleNames [] // }) // // Please also refer to https://docs.cosmos.network/main/core/upgrade for more information. -func (m Manager) RunMigrations(ctx context.Context, cfg Configurator, fromVM VersionMap) (VersionMap, error) { +func (m Manager) RunMigrations(ctx context.Context, cfg Configurator, fromVM appmodule.VersionMap) (appmodule.VersionMap, error) { c, ok := cfg.(*configurator) if !ok { return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidType, "expected %T, got %T", &configurator{}, cfg) @@ -668,7 +668,7 @@ func (m Manager) RunMigrations(ctx context.Context, cfg Configurator, fromVM Ver } sdkCtx := sdk.UnwrapSDKContext(ctx) - updatedVM := VersionMap{} + updatedVM := appmodule.VersionMap{} for _, moduleName := range modules { module := m.Modules[moduleName] fromVersion, exists := fromVM[moduleName] @@ -824,8 +824,8 @@ func (m *Manager) PrepareCheckState(ctx sdk.Context) error { } // GetVersionMap gets consensus version from all modules -func (m *Manager) GetVersionMap() VersionMap { - vermap := make(VersionMap) +func (m *Manager) GetVersionMap() appmodule.VersionMap { + vermap := make(appmodule.VersionMap) for name, v := range m.Modules { version := uint64(0) if v, ok := v.(appmodule.HasConsensusVersion); ok { diff --git a/x/upgrade/keeper/abci_test.go b/x/upgrade/keeper/abci_test.go index 1cf0793aba3f..f0de252394d2 100644 --- a/x/upgrade/keeper/abci_test.go +++ b/x/upgrade/keeper/abci_test.go @@ -26,7 +26,6 @@ import ( "github.com/cosmos/cosmos-sdk/testutil" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" - "github.com/cosmos/cosmos-sdk/types/module" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" ) @@ -52,7 +51,7 @@ func (s *TestSuite) VerifyDoUpgrade(t *testing.T) { require.ErrorContains(t, err, "UPGRADE \"test\" NEEDED at height: 11: ") t.Log("Verify that the upgrade can be successfully applied with a handler") - s.keeper.SetUpgradeHandler("test", func(ctx context.Context, plan types.Plan, vm module.VersionMap) (module.VersionMap, error) { + s.keeper.SetUpgradeHandler("test", func(ctx context.Context, plan types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) @@ -70,7 +69,7 @@ func (s *TestSuite) VerifyDoUpgradeWithCtx(t *testing.T, newCtx sdk.Context, pro require.ErrorContains(t, err, "UPGRADE \""+proposalName+"\" NEEDED at height: ") t.Log("Verify that the upgrade can be successfully applied with a handler") - s.keeper.SetUpgradeHandler(proposalName, func(ctx context.Context, plan types.Plan, vm module.VersionMap) (module.VersionMap, error) { + s.keeper.SetUpgradeHandler(proposalName, func(ctx context.Context, plan types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) @@ -175,7 +174,7 @@ func TestHaltIfTooNew(t *testing.T) { s := setupTest(t, 10, map[int64]bool{}) t.Log("Verify that we don't panic with registered plan not in database at all") var called int - s.keeper.SetUpgradeHandler("future", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + s.keeper.SetUpgradeHandler("future", func(_ context.Context, _ types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { called++ return vm, nil }) @@ -421,7 +420,7 @@ func TestBinaryVersion(t *testing.T) { { "test not panic: upgrade handler is present for last applied upgrade", func() sdk.Context { - s.keeper.SetUpgradeHandler("test0", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + s.keeper.SetUpgradeHandler("test0", func(_ context.Context, _ types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) @@ -472,7 +471,7 @@ func TestDowngradeVerification(t *testing.T) { s.ctx = s.ctx.WithHeaderInfo(header.Info{Height: s.ctx.HeaderInfo().Height + 1}) // set the handler. - s.keeper.SetUpgradeHandler(planName, func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + s.keeper.SetUpgradeHandler(planName, func(_ context.Context, _ types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) @@ -487,7 +486,7 @@ func TestDowngradeVerification(t *testing.T) { }{ "valid binary": { preRun: func(k *keeper.Keeper, ctx sdk.Context, name string) { - k.SetUpgradeHandler(planName, func(ctx context.Context, plan types.Plan, vm module.VersionMap) (module.VersionMap, error) { + k.SetUpgradeHandler(planName, func(ctx context.Context, plan types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) }, diff --git a/x/upgrade/keeper/grpc_query_test.go b/x/upgrade/keeper/grpc_query_test.go index dedfeff9b4e6..8e28c2ac136a 100644 --- a/x/upgrade/keeper/grpc_query_test.go +++ b/x/upgrade/keeper/grpc_query_test.go @@ -7,6 +7,7 @@ import ( "github.com/stretchr/testify/suite" + "cosmossdk.io/core/appmodule" "cosmossdk.io/core/header" "cosmossdk.io/core/log" storetypes "cosmossdk.io/store/types" @@ -21,7 +22,6 @@ import ( "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/testutil" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" ) @@ -48,7 +48,7 @@ func (suite *UpgradeTestSuite) SetupTest() { suite.Require().NoError(err) suite.encodedAuthority = authority suite.upgradeKeeper = keeper.NewKeeper(env, skipUpgradeHeights, suite.encCfg.Codec, suite.T().TempDir(), nil, authority) - err = suite.upgradeKeeper.SetModuleVersionMap(suite.ctx, module.VersionMap{ + err = suite.upgradeKeeper.SetModuleVersionMap(suite.ctx, appmodule.VersionMap{ "bank": 0, }) suite.Require().NoError(err) @@ -136,7 +136,7 @@ func (suite *UpgradeTestSuite) TestAppliedCurrentPlan() { err := suite.upgradeKeeper.ScheduleUpgrade(suite.ctx, plan) suite.Require().NoError(err) suite.ctx = suite.ctx.WithHeaderInfo(header.Info{Height: expHeight}) - suite.upgradeKeeper.SetUpgradeHandler(planName, func(ctx context.Context, plan types.Plan, vm module.VersionMap) (module.VersionMap, error) { + suite.upgradeKeeper.SetUpgradeHandler(planName, func(ctx context.Context, plan types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) err = suite.upgradeKeeper.ApplyUpgrade(suite.ctx, plan) diff --git a/x/upgrade/keeper/keeper.go b/x/upgrade/keeper/keeper.go index e11904e1b4bd..89aa35c98d1c 100644 --- a/x/upgrade/keeper/keeper.go +++ b/x/upgrade/keeper/keeper.go @@ -26,7 +26,6 @@ import ( "github.com/cosmos/cosmos-sdk/telemetry" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/kv" - "github.com/cosmos/cosmos-sdk/types/module" ) type Keeper struct { @@ -39,7 +38,7 @@ type Keeper struct { versionModifier app.VersionModifier // implements setting the protocol version field on BaseApp downgradeVerified bool // tells if we've already sanity checked that this binary version isn't being used against an old state. authority string // the address capable of executing and canceling an upgrade. Usually the gov module account - initVersionMap module.VersionMap // the module version map at init genesis + initVersionMap appmodule.VersionMap // the module version map at init genesis } // NewKeeper constructs an upgrade Keeper which requires the following arguments: @@ -75,13 +74,13 @@ func NewKeeper( // SetInitVersionMap sets the initial version map. // This is only used in app wiring and should not be used in any other context. -func (k *Keeper) SetInitVersionMap(vm module.VersionMap) { +func (k *Keeper) SetInitVersionMap(vm appmodule.VersionMap) { k.initVersionMap = vm } // GetInitVersionMap gets the initial version map // This is only used in upgrade InitGenesis and should not be used in any other context. -func (k *Keeper) GetInitVersionMap() module.VersionMap { +func (k *Keeper) GetInitVersionMap() appmodule.VersionMap { return k.initVersionMap } @@ -93,7 +92,7 @@ func (k Keeper) SetUpgradeHandler(name string, upgradeHandler types.UpgradeHandl } // SetModuleVersionMap saves a given version map to state -func (k Keeper) SetModuleVersionMap(ctx context.Context, vm module.VersionMap) error { +func (k Keeper) SetModuleVersionMap(ctx context.Context, vm appmodule.VersionMap) error { if len(vm) > 0 { store := runtime.KVStoreAdapter(k.KVStoreService.OpenKVStore(ctx)) versionStore := prefix.NewStore(store, []byte{types.VersionMapByte}) @@ -121,7 +120,7 @@ func (k Keeper) SetModuleVersionMap(ctx context.Context, vm module.VersionMap) e // GetModuleVersionMap returns a map of key module name and value module consensus version // as defined in ADR-041. -func (k Keeper) GetModuleVersionMap(ctx context.Context) (module.VersionMap, error) { +func (k Keeper) GetModuleVersionMap(ctx context.Context) (appmodule.VersionMap, error) { store := k.KVStoreService.OpenKVStore(ctx) prefix := []byte{types.VersionMapByte} it, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) @@ -130,7 +129,7 @@ func (k Keeper) GetModuleVersionMap(ctx context.Context) (module.VersionMap, err } defer it.Close() - vm := make(module.VersionMap) + vm := make(appmodule.VersionMap) for ; it.Valid(); it.Next() { moduleBytes := it.Key() // first byte is prefix key, so we remove it here diff --git a/x/upgrade/keeper/keeper_test.go b/x/upgrade/keeper/keeper_test.go index a1a572c7a437..0135c034fbd2 100644 --- a/x/upgrade/keeper/keeper_test.go +++ b/x/upgrade/keeper/keeper_test.go @@ -9,6 +9,7 @@ import ( cmttypes "github.com/cometbft/cometbft/types" "github.com/stretchr/testify/suite" + "cosmossdk.io/core/appmodule" "cosmossdk.io/core/header" "cosmossdk.io/core/log" storetypes "cosmossdk.io/store/types" @@ -24,7 +25,6 @@ import ( "github.com/cosmos/cosmos-sdk/testutil" simtestutil "github.com/cosmos/cosmos-sdk/testutil/sims" sdk "github.com/cosmos/cosmos-sdk/types" - "github.com/cosmos/cosmos-sdk/types/module" moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil" ) @@ -167,7 +167,7 @@ func (s *KeeperTestSuite) TestScheduleUpgrade() { Height: 123450000, }, setup: func() { - s.upgradeKeeper.SetUpgradeHandler("all-good", func(ctx context.Context, plan types.Plan, vm module.VersionMap) (module.VersionMap, error) { + s.upgradeKeeper.SetUpgradeHandler("all-good", func(ctx context.Context, plan types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) err := s.upgradeKeeper.ApplyUpgrade(s.ctx, types.Plan{ @@ -289,7 +289,9 @@ func (s *KeeperTestSuite) TestIncrementProtocolVersion() { err = s.upgradeKeeper.ApplyUpgrade(s.ctx, dummyPlan) s.Require().EqualError(err, "ApplyUpgrade should never be called without first checking HasHandler") - s.upgradeKeeper.SetUpgradeHandler("dummy", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { return vm, nil }) + s.upgradeKeeper.SetUpgradeHandler("dummy", func(_ context.Context, _ types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { + return vm, nil + }) err = s.upgradeKeeper.ApplyUpgrade(s.ctx, dummyPlan) s.Require().NoError(err) upgradedProtocolVersion, err := s.baseApp.AppVersion(s.ctx) @@ -301,13 +303,13 @@ func (s *KeeperTestSuite) TestIncrementProtocolVersion() { // Tests that the underlying state of x/upgrade is set correctly after // an upgrade. func (s *KeeperTestSuite) TestMigrations() { - initialVM := module.VersionMap{"bank": uint64(1)} + initialVM := appmodule.VersionMap{"bank": uint64(1)} err := s.upgradeKeeper.SetModuleVersionMap(s.ctx, initialVM) s.Require().NoError(err) vmBefore, err := s.upgradeKeeper.GetModuleVersionMap(s.ctx) s.Require().NoError(err) - s.upgradeKeeper.SetUpgradeHandler("dummy", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + s.upgradeKeeper.SetUpgradeHandler("dummy", func(_ context.Context, _ types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { // simulate upgrading the bank module vm["bank"]++ return vm, nil @@ -334,7 +336,7 @@ func (s *KeeperTestSuite) TestLastCompletedUpgrade() { require.Equal(int64(0), height) require.NoError(err) - keeper.SetUpgradeHandler("test0", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + keeper.SetUpgradeHandler("test0", func(_ context.Context, _ types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) @@ -351,7 +353,7 @@ func (s *KeeperTestSuite) TestLastCompletedUpgrade() { require.Equal(int64(10), height) require.NoError(err) - keeper.SetUpgradeHandler("test1", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + keeper.SetUpgradeHandler("test1", func(_ context.Context, _ types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) @@ -376,7 +378,7 @@ func (s *KeeperTestSuite) TestLastCompletedUpgradeOrdering() { require := s.Require() // apply first upgrade - keeper.SetUpgradeHandler("test-v0.9", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + keeper.SetUpgradeHandler("test-v0.9", func(_ context.Context, _ types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) @@ -392,7 +394,7 @@ func (s *KeeperTestSuite) TestLastCompletedUpgradeOrdering() { require.NoError(err) // apply second upgrade - keeper.SetUpgradeHandler("test-v0.10", func(_ context.Context, _ types.Plan, vm module.VersionMap) (module.VersionMap, error) { + keeper.SetUpgradeHandler("test-v0.10", func(_ context.Context, _ types.Plan, vm appmodule.VersionMap) (appmodule.VersionMap, error) { return vm, nil }) diff --git a/x/upgrade/types/handler.go b/x/upgrade/types/handler.go index 3af3043053a8..4c130046139c 100644 --- a/x/upgrade/types/handler.go +++ b/x/upgrade/types/handler.go @@ -3,7 +3,7 @@ package types import ( "context" - "github.com/cosmos/cosmos-sdk/types/module" + "cosmossdk.io/core/appmodule" ) // UpgradeHandler specifies the type of function that is called when an upgrade @@ -24,4 +24,4 @@ import ( // function. // // Please also refer to docs/core/upgrade.md for more information. -type UpgradeHandler func(ctx context.Context, plan Plan, fromVM module.VersionMap) (module.VersionMap, error) +type UpgradeHandler func(ctx context.Context, plan Plan, fromVM appmodule.VersionMap) (appmodule.VersionMap, error) From 46d6406ab37365b9264a01c121888fb078db1ede Mon Sep 17 00:00:00 2001 From: Matt Kocubinski Date: Thu, 30 May 2024 20:30:15 -0400 Subject: [PATCH 6/6] feat(server/v2): introduce cometbft v2 (#20483) --- core/app/app.go | 3 + runtime/v2/go.mod | 2 +- runtime/v2/go.sum | 4 +- server/v2/cometbft/abci.go | 596 ++ .../client/grpc/cmtservice/autocli.go | 71 + .../client/grpc/cmtservice/query.pb.go | 5452 +++++++++++++++++ .../client/grpc/cmtservice/query.pb.gw.go | 669 ++ .../client/grpc/cmtservice/service.go | 312 + .../cometbft/client/grpc/cmtservice/types.go | 47 + .../client/grpc/cmtservice/types.pb.go | 1371 +++++ .../cometbft/client/grpc/cmtservice/util.go | 39 + server/v2/cometbft/client/rpc/block.go | 103 + server/v2/cometbft/client/rpc/client.go | 36 + server/v2/cometbft/client/rpc/utils.go | 75 + server/v2/cometbft/commands.go | 414 ++ server/v2/cometbft/config.go | 37 + server/v2/cometbft/flags/flags.go | 79 + server/v2/cometbft/go.mod | 190 + server/v2/cometbft/go.sum | 694 +++ server/v2/cometbft/handlers/defaults.go | 186 + server/v2/cometbft/handlers/handlers.go | 31 + server/v2/cometbft/handlers/tx_selector.go | 76 + server/v2/cometbft/log/logger.go | 23 + server/v2/cometbft/mempool/config.go | 11 + server/v2/cometbft/mempool/doc.go | 6 + server/v2/cometbft/mempool/mempool.go | 41 + server/v2/cometbft/mempool/noop.go | 22 + server/v2/cometbft/query.go | 130 + server/v2/cometbft/server.go | 225 + server/v2/cometbft/service.go | 70 + server/v2/cometbft/snapshots.go | 192 + server/v2/cometbft/streaming.go | 77 + server/v2/cometbft/types/errors/errors.go | 17 + server/v2/cometbft/types/peer.go | 6 + server/v2/cometbft/types/store.go | 32 + server/v2/cometbft/types/vote.go | 13 + server/v2/cometbft/utils.go | 414 ++ tools/cosmovisor/go.mod | 4 +- 38 files changed, 11765 insertions(+), 5 deletions(-) create mode 100644 server/v2/cometbft/abci.go create mode 100644 server/v2/cometbft/client/grpc/cmtservice/autocli.go create mode 100644 server/v2/cometbft/client/grpc/cmtservice/query.pb.go create mode 100644 server/v2/cometbft/client/grpc/cmtservice/query.pb.gw.go create mode 100644 server/v2/cometbft/client/grpc/cmtservice/service.go create mode 100644 server/v2/cometbft/client/grpc/cmtservice/types.go create mode 100644 server/v2/cometbft/client/grpc/cmtservice/types.pb.go create mode 100644 server/v2/cometbft/client/grpc/cmtservice/util.go create mode 100644 server/v2/cometbft/client/rpc/block.go create mode 100644 server/v2/cometbft/client/rpc/client.go create mode 100644 server/v2/cometbft/client/rpc/utils.go create mode 100644 server/v2/cometbft/commands.go create mode 100644 server/v2/cometbft/config.go create mode 100644 server/v2/cometbft/flags/flags.go create mode 100644 server/v2/cometbft/go.mod create mode 100644 server/v2/cometbft/go.sum create mode 100644 server/v2/cometbft/handlers/defaults.go create mode 100644 server/v2/cometbft/handlers/handlers.go create mode 100644 server/v2/cometbft/handlers/tx_selector.go create mode 100644 server/v2/cometbft/log/logger.go create mode 100644 server/v2/cometbft/mempool/config.go create mode 100644 server/v2/cometbft/mempool/doc.go create mode 100644 server/v2/cometbft/mempool/mempool.go create mode 100644 server/v2/cometbft/mempool/noop.go create mode 100644 server/v2/cometbft/query.go create mode 100644 server/v2/cometbft/server.go create mode 100644 server/v2/cometbft/service.go create mode 100644 server/v2/cometbft/snapshots.go create mode 100644 server/v2/cometbft/streaming.go create mode 100644 server/v2/cometbft/types/errors/errors.go create mode 100644 server/v2/cometbft/types/peer.go create mode 100644 server/v2/cometbft/types/store.go create mode 100644 server/v2/cometbft/types/vote.go create mode 100644 server/v2/cometbft/utils.go diff --git a/core/app/app.go b/core/app/app.go index 5bc62bdf1cde..99263953e255 100644 --- a/core/app/app.go +++ b/core/app/app.go @@ -28,6 +28,9 @@ type BlockRequest[T any] struct { AppHash []byte Txs []T ConsensusMessages []transaction.Msg + + // IsGenesis indicates if this block is the first block of the chain. + IsGenesis bool } type BlockResponse struct { diff --git a/runtime/v2/go.mod b/runtime/v2/go.mod index e58b4f577a74..9840ca88316a 100644 --- a/runtime/v2/go.mod +++ b/runtime/v2/go.mod @@ -50,7 +50,7 @@ require ( github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect github.com/cosmos/cosmos-db v1.0.2 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.5 // indirect - github.com/cosmos/iavl v1.1.4 // indirect + github.com/cosmos/iavl v1.2.0 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/dot v1.6.2 // indirect diff --git a/runtime/v2/go.sum b/runtime/v2/go.sum index cf33e39ac964..a3a26f890ba6 100644 --- a/runtime/v2/go.sum +++ b/runtime/v2/go.sum @@ -42,8 +42,8 @@ github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+R github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= github.com/cosmos/gogoproto v1.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= -github.com/cosmos/iavl v1.1.4 h1:Z0cVVjeQqOUp78/nWt/uhQy83vYluWlAMGQ4zbH9G34= -github.com/cosmos/iavl v1.1.4/go.mod h1:vCYmRQUJU1wwj0oRD3wMEtOM9sJNDP+GFMaXmIxZ/rU= +github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM= +github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= diff --git a/server/v2/cometbft/abci.go b/server/v2/cometbft/abci.go new file mode 100644 index 000000000000..ad68aaa9f183 --- /dev/null +++ b/server/v2/cometbft/abci.go @@ -0,0 +1,596 @@ +package cometbft + +import ( + "context" + "errors" + "fmt" + "sync/atomic" + + abci "github.com/cometbft/cometbft/abci/types" + + coreappmgr "cosmossdk.io/core/app" + "cosmossdk.io/core/comet" + "cosmossdk.io/core/event" + "cosmossdk.io/core/log" + "cosmossdk.io/core/store" + "cosmossdk.io/core/transaction" + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/server/v2/appmanager" + "cosmossdk.io/server/v2/cometbft/handlers" + "cosmossdk.io/server/v2/cometbft/mempool" + "cosmossdk.io/server/v2/cometbft/types" + cometerrors "cosmossdk.io/server/v2/cometbft/types/errors" + "cosmossdk.io/server/v2/streaming" + "cosmossdk.io/store/v2/snapshots" + consensustypes "cosmossdk.io/x/consensus/types" +) + +const ( + QueryPathApp = "app" + QueryPathP2P = "p2p" + QueryPathStore = "store" +) + +var _ abci.Application = (*Consensus[transaction.Tx])(nil) + +type Consensus[T transaction.Tx] struct { + app *appmanager.AppManager[T] + cfg Config + store types.Store + logger log.Logger + txCodec transaction.Codec[T] + streaming streaming.Manager + snapshotManager *snapshots.Manager + mempool mempool.Mempool[T] + + // this is only available after this node has committed a block (in FinalizeBlock), + // otherwise it will be empty and we will need to query the app for the last + // committed block. TODO(tip): check if concurrency is really needed + lastCommittedBlock atomic.Pointer[BlockData] + + prepareProposalHandler handlers.PrepareHandler[T] + processProposalHandler handlers.ProcessHandler[T] + verifyVoteExt handlers.VerifyVoteExtensionhandler + extendVote handlers.ExtendVoteHandler + + chainID string +} + +func NewConsensus[T transaction.Tx]( + app *appmanager.AppManager[T], + mp mempool.Mempool[T], + store types.Store, + cfg Config, + txCodec transaction.Codec[T], + logger log.Logger, +) *Consensus[T] { + return &Consensus[T]{ + mempool: mp, + store: store, + app: app, + cfg: cfg, + txCodec: txCodec, + logger: logger, + } +} + +func (c *Consensus[T]) SetMempool(mp mempool.Mempool[T]) { + c.mempool = mp +} + +func (c *Consensus[T]) SetStreamingManager(sm streaming.Manager) { + c.streaming = sm +} + +// SetSnapshotManager sets the snapshot manager for the Consensus. +// The snapshot manager is responsible for managing snapshots of the Consensus state. +// It allows for creating, storing, and restoring snapshots of the Consensus state. +// The provided snapshot manager will be used by the Consensus to handle snapshots. +func (c *Consensus[T]) SetSnapshotManager(sm *snapshots.Manager) { + c.snapshotManager = sm +} + +// RegisterExtensions registers the given extensions with the consensus module's snapshot manager. +// It allows additional snapshotter implementations to be used for creating and restoring snapshots. +func (c *Consensus[T]) RegisterExtensions(extensions ...snapshots.ExtensionSnapshotter) { + if err := c.snapshotManager.RegisterExtensions(extensions...); err != nil { + panic(fmt.Errorf("failed to register snapshot extensions: %w", err)) + } +} + +func (c *Consensus[T]) SetPrepareProposalHandler(handler handlers.PrepareHandler[T]) { + c.prepareProposalHandler = handler +} + +func (c *Consensus[T]) SetProcessProposalHandler(handler handlers.ProcessHandler[T]) { + c.processProposalHandler = handler +} + +func (c *Consensus[T]) SetExtendVoteExtension(handler handlers.ExtendVoteHandler) { + c.extendVote = handler +} + +func (c *Consensus[T]) SetVerifyVoteExtension(handler handlers.VerifyVoteExtensionhandler) { + c.verifyVoteExt = handler +} + +// BlockData is used to keep some data about the last committed block. Currently +// we only use the height, the rest is not needed right now and might get removed +// in the future. +type BlockData struct { + Height int64 + Hash []byte + StateChanges []store.StateChanges +} + +// CheckTx implements types.Application. +// It is called by cometbft to verify transaction validity +func (c *Consensus[T]) CheckTx(ctx context.Context, req *abci.CheckTxRequest) (*abci.CheckTxResponse, error) { + decodedTx, err := c.txCodec.Decode(req.Tx) + if err != nil { + return nil, err + } + + resp, err := c.app.ValidateTx(ctx, decodedTx) + if err != nil { + return nil, err + } + + cometResp := &abci.CheckTxResponse{ + Code: resp.Code, + GasWanted: uint64ToInt64(resp.GasWanted), + GasUsed: uint64ToInt64(resp.GasUsed), + Events: intoABCIEvents(resp.Events, c.cfg.IndexEvents), + Info: resp.Info, + Data: resp.Data, + Log: resp.Log, + Codespace: resp.Codespace, + } + if resp.Error != nil { + cometResp.Code = 1 + cometResp.Log = resp.Error.Error() + } + return cometResp, nil +} + +// Info implements types.Application. +func (c *Consensus[T]) Info(ctx context.Context, _ *abci.InfoRequest) (*abci.InfoResponse, error) { + version, _, err := c.store.StateLatest() + if err != nil { + return nil, err + } + + // cp, err := c.GetConsensusParams(ctx) + // if err != nil { + // return nil, err + // } + + cid, err := c.store.LastCommitID() + if err != nil { + return nil, err + } + + return &abci.InfoResponse{ + Data: c.cfg.Name, + Version: c.cfg.Version, + // AppVersion: cp.GetVersion().App, + AppVersion: 0, // TODO fetch from store? + LastBlockHeight: int64(version), + LastBlockAppHash: cid.Hash, + }, nil +} + +// Query implements types.Application. +// It is called by cometbft to query application state. +func (c *Consensus[T]) Query(ctx context.Context, req *abci.QueryRequest) (*abci.QueryResponse, error) { + // follow the query path from here + decodedMsg, err := c.txCodec.Decode(req.Data) + protoMsg, ok := any(decodedMsg).(transaction.Msg) + if !ok { + return nil, fmt.Errorf("decoded type T %T must implement core/transaction.Msg", decodedMsg) + } + + // if no error is returned then we can handle the query with the appmanager + // otherwise it is a KV store query + if err == nil { + res, err := c.app.Query(ctx, uint64(req.Height), protoMsg) + if err != nil { + return nil, err + } + + return queryResponse(res) + } + + // this error most probably means that we can't handle it with a proto message, so + // it must be an app/p2p/store query + path := splitABCIQueryPath(req.Path) + if len(path) == 0 { + return QueryResult(errorsmod.Wrap(cometerrors.ErrUnknownRequest, "no query path provided"), c.cfg.Trace), nil + } + + var resp *abci.QueryResponse + + switch path[0] { + case QueryPathApp: + resp, err = c.handlerQueryApp(ctx, path, req) + + case QueryPathStore: + resp, err = c.handleQueryStore(path, c.store, req) + + case QueryPathP2P: + resp, err = c.handleQueryP2P(path) + + default: + resp = QueryResult(errorsmod.Wrap(cometerrors.ErrUnknownRequest, "unknown query path"), c.cfg.Trace) + } + + if err != nil { + return QueryResult(err, c.cfg.Trace), nil + } + + return resp, nil +} + +// InitChain implements types.Application. +func (c *Consensus[T]) InitChain(ctx context.Context, req *abci.InitChainRequest) (*abci.InitChainResponse, error) { + c.logger.Info("InitChain", "initialHeight", req.InitialHeight, "chainID", req.ChainId) + + // store chainID to be used later on in execution + c.chainID = req.ChainId + + // On a new chain, we consider the init chain block height as 0, even though + // req.InitialHeight is 1 by default. + // TODO + + var consMessages []transaction.Msg + if req.ConsensusParams != nil { + consMessages = append(consMessages, &consensustypes.MsgUpdateParams{ + Authority: c.cfg.ConsensusAuthority, + Block: req.ConsensusParams.Block, + Evidence: req.ConsensusParams.Evidence, + Validator: req.ConsensusParams.Validator, + Abci: req.ConsensusParams.Abci, + }) + } + + br := &coreappmgr.BlockRequest[T]{ + Height: uint64(req.InitialHeight - 1), + Time: req.Time, + Hash: nil, + AppHash: nil, + ChainId: req.ChainId, + ConsensusMessages: consMessages, + IsGenesis: true, + } + + blockresponse, genesisState, err := c.app.InitGenesis( + ctx, + br, + req.AppStateBytes, + c.txCodec) + if err != nil { + return nil, fmt.Errorf("genesis state init failure: %w", err) + } + + // TODO necessary? where should this WARN live if it all. helpful for testing + for _, txRes := range blockresponse.TxResults { + if txRes.Error != nil { + c.logger.Warn("genesis tx failed", "code", txRes.Code, "log", txRes.Log, "error", txRes.Error) + } + } + + validatorUpdates := intoABCIValidatorUpdates(blockresponse.ValidatorUpdates) + + stateChanges, err := genesisState.GetStateChanges() + if err != nil { + return nil, err + } + cs := &store.Changeset{ + Changes: stateChanges, + } + stateRoot, err := c.store.Commit(cs) + if err != nil { + return nil, fmt.Errorf("unable to commit the changeset: %w", err) + } + + return &abci.InitChainResponse{ + ConsensusParams: req.ConsensusParams, + Validators: validatorUpdates, + AppHash: stateRoot, + }, nil +} + +// PrepareProposal implements types.Application. +// It is called by cometbft to prepare a proposal block. +func (c *Consensus[T]) PrepareProposal( + ctx context.Context, + req *abci.PrepareProposalRequest, +) (resp *abci.PrepareProposalResponse, err error) { + if req.Height < 1 { + return nil, errors.New("PrepareProposal called with invalid height") + } + + decodedTxs := make([]T, len(req.Txs)) + for _, tx := range req.Txs { + decTx, err := c.txCodec.Decode(tx) + if err != nil { + // TODO: vote extension meta data as a custom type to avoid possibly accepting invalid txs + // continue even if tx decoding fails + c.logger.Error("failed to decode tx", "err", err) + } + decodedTxs = append(decodedTxs, decTx) + } + + ciCtx := contextWithCometInfo(ctx, comet.Info{ + Evidence: toCoreEvidence(req.Misbehavior), + ValidatorsHash: req.NextValidatorsHash, + ProposerAddress: req.ProposerAddress, + LastCommit: toCoreExtendedCommitInfo(req.LocalLastCommit), + }) + + txs, err := c.prepareProposalHandler(ciCtx, c.app, decodedTxs, req) + if err != nil { + return nil, err + } + + encodedTxs := make([][]byte, len(txs)) + for i, tx := range txs { + encodedTxs[i] = tx.Bytes() + } + + return &abci.PrepareProposalResponse{ + Txs: encodedTxs, + }, nil +} + +// ProcessProposal implements types.Application. +// It is called by cometbft to process/verify a proposal block. +func (c *Consensus[T]) ProcessProposal( + ctx context.Context, + req *abci.ProcessProposalRequest, +) (*abci.ProcessProposalResponse, error) { + decodedTxs := make([]T, len(req.Txs)) + for _, tx := range req.Txs { + decTx, err := c.txCodec.Decode(tx) + if err != nil { + // TODO: vote extension meta data as a custom type to avoid possibly accepting invalid txs + // continue even if tx decoding fails + c.logger.Error("failed to decode tx", "err", err) + } + decodedTxs = append(decodedTxs, decTx) + } + + ciCtx := contextWithCometInfo(ctx, comet.Info{ + Evidence: toCoreEvidence(req.Misbehavior), + ValidatorsHash: req.NextValidatorsHash, + ProposerAddress: req.ProposerAddress, + LastCommit: toCoreCommitInfo(req.ProposedLastCommit), + }) + + err := c.processProposalHandler(ciCtx, c.app, decodedTxs, req) + if err != nil { + c.logger.Error("failed to process proposal", "height", req.Height, "time", req.Time, "hash", fmt.Sprintf("%X", req.Hash), "err", err) + return &abci.ProcessProposalResponse{ + Status: abci.PROCESS_PROPOSAL_STATUS_REJECT, + }, nil + } + + return &abci.ProcessProposalResponse{ + Status: abci.PROCESS_PROPOSAL_STATUS_ACCEPT, + }, nil +} + +// FinalizeBlock implements types.Application. +// It is called by cometbft to finalize a block. +func (c *Consensus[T]) FinalizeBlock( + ctx context.Context, + req *abci.FinalizeBlockRequest, +) (*abci.FinalizeBlockResponse, error) { + if err := c.validateFinalizeBlockHeight(req); err != nil { + return nil, err + } + + if err := c.checkHalt(req.Height, req.Time); err != nil { + return nil, err + } + + // TODO evaluate this approach vs. service using context. + // cometInfo := &consensustypes.MsgUpdateCometInfo{ + // Authority: c.cfg.ConsensusAuthority, + // CometInfo: &consensustypes.CometInfo{ + // Evidence: req.Misbehavior, + // ValidatorsHash: req.NextValidatorsHash, + // ProposerAddress: req.ProposerAddress, + // LastCommit: req.DecidedLastCommit, + // }, + //} + // + // ctx = context.WithValue(ctx, corecontext.CometInfoKey, &comet.Info{ + // Evidence: sdktypes.ToSDKEvidence(req.Misbehavior), + // ValidatorsHash: req.NextValidatorsHash, + // ProposerAddress: req.ProposerAddress, + // LastCommit: sdktypes.ToSDKCommitInfo(req.DecidedLastCommit), + // }) + + // TODO(tip): can we expect some txs to not decode? if so, what we do in this case? this does not seem to be the case, + // considering that prepare and process always decode txs, assuming they're the ones providing txs we should never + // have a tx that fails decoding. + decodedTxs, err := decodeTxs(req.Txs, c.txCodec) + if err != nil { + return nil, err + } + + cid, err := c.store.LastCommitID() + if err != nil { + return nil, err + } + + blockReq := &coreappmgr.BlockRequest[T]{ + Height: uint64(req.Height), + Time: req.Time, + Hash: req.Hash, + AppHash: cid.Hash, + ChainId: c.chainID, + Txs: decodedTxs, + // ConsensusMessages: []transaction.Msg{cometInfo}, + } + + ciCtx := contextWithCometInfo(ctx, comet.Info{ + Evidence: toCoreEvidence(req.Misbehavior), + ValidatorsHash: req.NextValidatorsHash, + ProposerAddress: req.ProposerAddress, + LastCommit: toCoreCommitInfo(req.DecidedLastCommit), + }) + + resp, newState, err := c.app.DeliverBlock(ciCtx, blockReq) + if err != nil { + return nil, err + } + + // after we get the changeset we can produce the commit hash, + // from the store. + stateChanges, err := newState.GetStateChanges() + if err != nil { + return nil, err + } + appHash, err := c.store.Commit(&store.Changeset{Changes: stateChanges}) + if err != nil { + return nil, fmt.Errorf("unable to commit the changeset: %w", err) + } + + var events []event.Event + events = append(events, resp.PreBlockEvents...) + events = append(events, resp.BeginBlockEvents...) + for _, tx := range resp.TxResults { + events = append(events, tx.Events...) + } + events = append(events, resp.EndBlockEvents...) + + // listen to state streaming changes in accordance with the block + err = c.streamDeliverBlockChanges(ctx, req.Height, req.Txs, resp.TxResults, events, stateChanges) + if err != nil { + return nil, err + } + + // remove txs from the mempool + err = c.mempool.Remove(decodedTxs) + if err != nil { + return nil, fmt.Errorf("unable to remove txs: %w", err) + } + + c.lastCommittedBlock.Store(&BlockData{ + Height: req.Height, + Hash: appHash, + StateChanges: stateChanges, + }) + + cp, err := c.GetConsensusParams(ctx) // we get the consensus params from the latest state because we committed state above + if err != nil { + return nil, err + } + + return finalizeBlockResponse(resp, cp, appHash, c.cfg.IndexEvents) +} + +// Commit implements types.Application. +// It is called by cometbft to notify the application that a block was committed. +func (c *Consensus[T]) Commit(ctx context.Context, _ *abci.CommitRequest) (*abci.CommitResponse, error) { + lastCommittedBlock := c.lastCommittedBlock.Load() + + c.snapshotManager.SnapshotIfApplicable(lastCommittedBlock.Height) + + cp, err := c.GetConsensusParams(ctx) + if err != nil { + return nil, err + } + + return &abci.CommitResponse{ + RetainHeight: c.GetBlockRetentionHeight(cp, lastCommittedBlock.Height), + }, nil +} + +// Vote extensions +// VerifyVoteExtension implements types.Application. +func (c *Consensus[T]) VerifyVoteExtension( + ctx context.Context, + req *abci.VerifyVoteExtensionRequest, +) (*abci.VerifyVoteExtensionResponse, error) { + // If vote extensions are not enabled, as a safety precaution, we return an + // error. + cp, err := c.GetConsensusParams(ctx) + if err != nil { + return nil, err + } + + // Note: we verify votes extensions on VoteExtensionsEnableHeight+1. Check + // comment in ExtendVote and ValidateVoteExtensions for more details. + extsEnabled := cp.Abci != nil && req.Height >= cp.Abci.VoteExtensionsEnableHeight && cp.Abci.VoteExtensionsEnableHeight != 0 + if !extsEnabled { + return nil, fmt.Errorf("vote extensions are not enabled; unexpected call to VerifyVoteExtension at height %d", req.Height) + } + + if c.verifyVoteExt == nil { + return nil, fmt.Errorf("vote extensions are enabled but no verify function was set") + } + + _, latestStore, err := c.store.StateLatest() + if err != nil { + return nil, err + } + + resp, err := c.verifyVoteExt(ctx, latestStore, req) + if err != nil { + c.logger.Error("failed to verify vote extension", "height", req.Height, "err", err) + return &abci.VerifyVoteExtensionResponse{Status: abci.VERIFY_VOTE_EXTENSION_STATUS_REJECT}, nil + } + + return resp, err +} + +// ExtendVote implements types.Application. +func (c *Consensus[T]) ExtendVote(ctx context.Context, req *abci.ExtendVoteRequest) (*abci.ExtendVoteResponse, error) { + // If vote extensions are not enabled, as a safety precaution, we return an + // error. + cp, err := c.GetConsensusParams(ctx) + if err != nil { + return nil, err + } + + // Note: In this case, we do want to extend vote if the height is equal or + // greater than VoteExtensionsEnableHeight. This defers from the check done + // in ValidateVoteExtensions and PrepareProposal in which we'll check for + // vote extensions on VoteExtensionsEnableHeight+1. + extsEnabled := cp.Abci != nil && req.Height >= cp.Abci.VoteExtensionsEnableHeight && cp.Abci.VoteExtensionsEnableHeight != 0 + if !extsEnabled { + return nil, fmt.Errorf("vote extensions are not enabled; unexpected call to ExtendVote at height %d", req.Height) + } + + if c.verifyVoteExt == nil { + return nil, fmt.Errorf("vote extensions are enabled but no verify function was set") + } + + _, latestStore, err := c.store.StateLatest() + if err != nil { + return nil, err + } + + resp, err := c.extendVote(ctx, latestStore, req) + if err != nil { + c.logger.Error("failed to verify vote extension", "height", req.Height, "err", err) + return &abci.ExtendVoteResponse{}, nil + } + + return resp, err +} + +func decodeTxs[T transaction.Tx](rawTxs [][]byte, codec transaction.Codec[T]) ([]T, error) { + txs := make([]T, len(rawTxs)) + for i, rawTx := range rawTxs { + tx, err := codec.Decode(rawTx) + if err != nil { + return nil, fmt.Errorf("unable to decode tx: %d: %w", i, err) + } + txs[i] = tx + } + return txs, nil +} diff --git a/server/v2/cometbft/client/grpc/cmtservice/autocli.go b/server/v2/cometbft/client/grpc/cmtservice/autocli.go new file mode 100644 index 000000000000..ea314c6f8c08 --- /dev/null +++ b/server/v2/cometbft/client/grpc/cmtservice/autocli.go @@ -0,0 +1,71 @@ +package cmtservice + +import ( + autocliv1 "cosmossdk.io/api/cosmos/autocli/v1" + cmtv1beta1 "cosmossdk.io/api/cosmos/base/tendermint/v1beta1" +) + +var CometBFTAutoCLIDescriptor = &autocliv1.ServiceCommandDescriptor{ + Service: cmtv1beta1.Service_ServiceDesc.ServiceName, + RpcCommandOptions: []*autocliv1.RpcCommandOptions{ + { + RpcMethod: "GetNodeInfo", + Use: "node-info", + Short: "Query the current node info", + }, + { + RpcMethod: "GetSyncing", + Use: "syncing", + Short: "Query node syncing status", + }, + { + RpcMethod: "GetLatestBlock", + Use: "block-latest", + Short: "Query for the latest committed block", + }, + { + RpcMethod: "GetBlockByHeight", + Use: "block-by-height [height]", + Short: "Query for a committed block by height", + Long: "Query for a specific committed block using the CometBFT RPC `block_by_height` method", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "height"}}, + }, + { + RpcMethod: "GetLatestValidatorSet", + Use: "validator-set", + Alias: []string{"validator-set-latest", "comet-validator-set", "cometbft-validator-set", "tendermint-validator-set"}, + Short: "Query for the latest validator set", + }, + { + RpcMethod: "GetValidatorSetByHeight", + Use: "validator-set-by-height [height]", + Short: "Query for a validator set by height", + PositionalArgs: []*autocliv1.PositionalArgDescriptor{{ProtoField: "height"}}, + }, + { + RpcMethod: "ABCIQuery", + Skip: true, + }, + }, +} + +// NewCometBFTCommands is a fake `appmodule.Module` to be considered as a module +// and be added in AutoCLI. +func NewCometBFTCommands() *cometModule { + return &cometModule{} +} + +type cometModule struct{} + +func (m cometModule) IsOnePerModuleType() {} +func (m cometModule) IsAppModule() {} + +func (m cometModule) Name() string { + return "comet" +} + +func (m cometModule) AutoCLIOptions() *autocliv1.ModuleOptions { + return &autocliv1.ModuleOptions{ + Query: CometBFTAutoCLIDescriptor, + } +} diff --git a/server/v2/cometbft/client/grpc/cmtservice/query.pb.go b/server/v2/cometbft/client/grpc/cmtservice/query.pb.go new file mode 100644 index 000000000000..3d8a4e74d234 --- /dev/null +++ b/server/v2/cometbft/client/grpc/cmtservice/query.pb.go @@ -0,0 +1,5452 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/base/tendermint/v1beta1/query.proto + +package cmtservice + +import ( + context "context" + fmt "fmt" + v11 "github.com/cometbft/cometbft/api/cometbft/p2p/v1" + v1 "github.com/cometbft/cometbft/api/cometbft/types/v1" + _ "github.com/cosmos/cosmos-proto" + query "github.com/cosmos/cosmos-sdk/types/query" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + grpc1 "github.com/cosmos/gogoproto/grpc" + proto "github.com/cosmos/gogoproto/proto" + any "github.com/cosmos/gogoproto/types/any" + _ "google.golang.org/genproto/googleapis/api/annotations" + grpc "google.golang.org/grpc" + codes "google.golang.org/grpc/codes" + status "google.golang.org/grpc/status" + io "io" + math "math" + math_bits "math/bits" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// GetValidatorSetByHeightRequest is the request type for the Query/GetValidatorSetByHeight RPC method. +type GetValidatorSetByHeightRequest struct { + Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` + // pagination defines an pagination for the request. + Pagination *query.PageRequest `protobuf:"bytes,2,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *GetValidatorSetByHeightRequest) Reset() { *m = GetValidatorSetByHeightRequest{} } +func (m *GetValidatorSetByHeightRequest) String() string { return proto.CompactTextString(m) } +func (*GetValidatorSetByHeightRequest) ProtoMessage() {} +func (*GetValidatorSetByHeightRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{0} +} +func (m *GetValidatorSetByHeightRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetValidatorSetByHeightRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetValidatorSetByHeightRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetValidatorSetByHeightRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetValidatorSetByHeightRequest.Merge(m, src) +} +func (m *GetValidatorSetByHeightRequest) XXX_Size() int { + return m.Size() +} +func (m *GetValidatorSetByHeightRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetValidatorSetByHeightRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetValidatorSetByHeightRequest proto.InternalMessageInfo + +func (m *GetValidatorSetByHeightRequest) GetHeight() int64 { + if m != nil { + return m.Height + } + return 0 +} + +func (m *GetValidatorSetByHeightRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +// GetValidatorSetByHeightResponse is the response type for the Query/GetValidatorSetByHeight RPC method. +type GetValidatorSetByHeightResponse struct { + BlockHeight int64 `protobuf:"varint,1,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` + Validators []*Validator `protobuf:"bytes,2,rep,name=validators,proto3" json:"validators,omitempty"` + // pagination defines an pagination for the response. + Pagination *query.PageResponse `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *GetValidatorSetByHeightResponse) Reset() { *m = GetValidatorSetByHeightResponse{} } +func (m *GetValidatorSetByHeightResponse) String() string { return proto.CompactTextString(m) } +func (*GetValidatorSetByHeightResponse) ProtoMessage() {} +func (*GetValidatorSetByHeightResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{1} +} +func (m *GetValidatorSetByHeightResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetValidatorSetByHeightResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetValidatorSetByHeightResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetValidatorSetByHeightResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetValidatorSetByHeightResponse.Merge(m, src) +} +func (m *GetValidatorSetByHeightResponse) XXX_Size() int { + return m.Size() +} +func (m *GetValidatorSetByHeightResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetValidatorSetByHeightResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetValidatorSetByHeightResponse proto.InternalMessageInfo + +func (m *GetValidatorSetByHeightResponse) GetBlockHeight() int64 { + if m != nil { + return m.BlockHeight + } + return 0 +} + +func (m *GetValidatorSetByHeightResponse) GetValidators() []*Validator { + if m != nil { + return m.Validators + } + return nil +} + +func (m *GetValidatorSetByHeightResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +// GetLatestValidatorSetRequest is the request type for the Query/GetValidatorSetByHeight RPC method. +type GetLatestValidatorSetRequest struct { + // pagination defines an pagination for the request. + Pagination *query.PageRequest `protobuf:"bytes,1,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *GetLatestValidatorSetRequest) Reset() { *m = GetLatestValidatorSetRequest{} } +func (m *GetLatestValidatorSetRequest) String() string { return proto.CompactTextString(m) } +func (*GetLatestValidatorSetRequest) ProtoMessage() {} +func (*GetLatestValidatorSetRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{2} +} +func (m *GetLatestValidatorSetRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetLatestValidatorSetRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetLatestValidatorSetRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetLatestValidatorSetRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetLatestValidatorSetRequest.Merge(m, src) +} +func (m *GetLatestValidatorSetRequest) XXX_Size() int { + return m.Size() +} +func (m *GetLatestValidatorSetRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetLatestValidatorSetRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetLatestValidatorSetRequest proto.InternalMessageInfo + +func (m *GetLatestValidatorSetRequest) GetPagination() *query.PageRequest { + if m != nil { + return m.Pagination + } + return nil +} + +// GetLatestValidatorSetResponse is the response type for the Query/GetValidatorSetByHeight RPC method. +type GetLatestValidatorSetResponse struct { + BlockHeight int64 `protobuf:"varint,1,opt,name=block_height,json=blockHeight,proto3" json:"block_height,omitempty"` + Validators []*Validator `protobuf:"bytes,2,rep,name=validators,proto3" json:"validators,omitempty"` + // pagination defines an pagination for the response. + Pagination *query.PageResponse `protobuf:"bytes,3,opt,name=pagination,proto3" json:"pagination,omitempty"` +} + +func (m *GetLatestValidatorSetResponse) Reset() { *m = GetLatestValidatorSetResponse{} } +func (m *GetLatestValidatorSetResponse) String() string { return proto.CompactTextString(m) } +func (*GetLatestValidatorSetResponse) ProtoMessage() {} +func (*GetLatestValidatorSetResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{3} +} +func (m *GetLatestValidatorSetResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetLatestValidatorSetResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetLatestValidatorSetResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetLatestValidatorSetResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetLatestValidatorSetResponse.Merge(m, src) +} +func (m *GetLatestValidatorSetResponse) XXX_Size() int { + return m.Size() +} +func (m *GetLatestValidatorSetResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetLatestValidatorSetResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetLatestValidatorSetResponse proto.InternalMessageInfo + +func (m *GetLatestValidatorSetResponse) GetBlockHeight() int64 { + if m != nil { + return m.BlockHeight + } + return 0 +} + +func (m *GetLatestValidatorSetResponse) GetValidators() []*Validator { + if m != nil { + return m.Validators + } + return nil +} + +func (m *GetLatestValidatorSetResponse) GetPagination() *query.PageResponse { + if m != nil { + return m.Pagination + } + return nil +} + +// Validator is the type for the validator-set. +type Validator struct { + Address string `protobuf:"bytes,1,opt,name=address,proto3" json:"address,omitempty"` + PubKey *any.Any `protobuf:"bytes,2,opt,name=pub_key,json=pubKey,proto3" json:"pub_key,omitempty"` + VotingPower int64 `protobuf:"varint,3,opt,name=voting_power,json=votingPower,proto3" json:"voting_power,omitempty"` + ProposerPriority int64 `protobuf:"varint,4,opt,name=proposer_priority,json=proposerPriority,proto3" json:"proposer_priority,omitempty"` +} + +func (m *Validator) Reset() { *m = Validator{} } +func (m *Validator) String() string { return proto.CompactTextString(m) } +func (*Validator) ProtoMessage() {} +func (*Validator) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{4} +} +func (m *Validator) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Validator) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Validator.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Validator) XXX_Merge(src proto.Message) { + xxx_messageInfo_Validator.Merge(m, src) +} +func (m *Validator) XXX_Size() int { + return m.Size() +} +func (m *Validator) XXX_DiscardUnknown() { + xxx_messageInfo_Validator.DiscardUnknown(m) +} + +var xxx_messageInfo_Validator proto.InternalMessageInfo + +func (m *Validator) GetAddress() string { + if m != nil { + return m.Address + } + return "" +} + +func (m *Validator) GetPubKey() *any.Any { + if m != nil { + return m.PubKey + } + return nil +} + +func (m *Validator) GetVotingPower() int64 { + if m != nil { + return m.VotingPower + } + return 0 +} + +func (m *Validator) GetProposerPriority() int64 { + if m != nil { + return m.ProposerPriority + } + return 0 +} + +// GetBlockByHeightRequest is the request type for the Query/GetBlockByHeight RPC method. +type GetBlockByHeightRequest struct { + Height int64 `protobuf:"varint,1,opt,name=height,proto3" json:"height,omitempty"` +} + +func (m *GetBlockByHeightRequest) Reset() { *m = GetBlockByHeightRequest{} } +func (m *GetBlockByHeightRequest) String() string { return proto.CompactTextString(m) } +func (*GetBlockByHeightRequest) ProtoMessage() {} +func (*GetBlockByHeightRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{5} +} +func (m *GetBlockByHeightRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetBlockByHeightRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetBlockByHeightRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetBlockByHeightRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetBlockByHeightRequest.Merge(m, src) +} +func (m *GetBlockByHeightRequest) XXX_Size() int { + return m.Size() +} +func (m *GetBlockByHeightRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetBlockByHeightRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetBlockByHeightRequest proto.InternalMessageInfo + +func (m *GetBlockByHeightRequest) GetHeight() int64 { + if m != nil { + return m.Height + } + return 0 +} + +// GetBlockByHeightResponse is the response type for the Query/GetBlockByHeight RPC method. +type GetBlockByHeightResponse struct { + BlockId *v1.BlockID `protobuf:"bytes,1,opt,name=block_id,json=blockId,proto3" json:"block_id,omitempty"` + // Deprecated: please use `sdk_block` instead + Block *v1.Block `protobuf:"bytes,2,opt,name=block,proto3" json:"block,omitempty"` + SdkBlock *Block `protobuf:"bytes,3,opt,name=sdk_block,json=sdkBlock,proto3" json:"sdk_block,omitempty"` +} + +func (m *GetBlockByHeightResponse) Reset() { *m = GetBlockByHeightResponse{} } +func (m *GetBlockByHeightResponse) String() string { return proto.CompactTextString(m) } +func (*GetBlockByHeightResponse) ProtoMessage() {} +func (*GetBlockByHeightResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{6} +} +func (m *GetBlockByHeightResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetBlockByHeightResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetBlockByHeightResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetBlockByHeightResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetBlockByHeightResponse.Merge(m, src) +} +func (m *GetBlockByHeightResponse) XXX_Size() int { + return m.Size() +} +func (m *GetBlockByHeightResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetBlockByHeightResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetBlockByHeightResponse proto.InternalMessageInfo + +func (m *GetBlockByHeightResponse) GetBlockId() *v1.BlockID { + if m != nil { + return m.BlockId + } + return nil +} + +func (m *GetBlockByHeightResponse) GetBlock() *v1.Block { + if m != nil { + return m.Block + } + return nil +} + +func (m *GetBlockByHeightResponse) GetSdkBlock() *Block { + if m != nil { + return m.SdkBlock + } + return nil +} + +// GetLatestBlockRequest is the request type for the Query/GetLatestBlock RPC method. +type GetLatestBlockRequest struct { +} + +func (m *GetLatestBlockRequest) Reset() { *m = GetLatestBlockRequest{} } +func (m *GetLatestBlockRequest) String() string { return proto.CompactTextString(m) } +func (*GetLatestBlockRequest) ProtoMessage() {} +func (*GetLatestBlockRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{7} +} +func (m *GetLatestBlockRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetLatestBlockRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetLatestBlockRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetLatestBlockRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetLatestBlockRequest.Merge(m, src) +} +func (m *GetLatestBlockRequest) XXX_Size() int { + return m.Size() +} +func (m *GetLatestBlockRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetLatestBlockRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetLatestBlockRequest proto.InternalMessageInfo + +// GetLatestBlockResponse is the response type for the Query/GetLatestBlock RPC method. +type GetLatestBlockResponse struct { + BlockId *v1.BlockID `protobuf:"bytes,1,opt,name=block_id,json=blockId,proto3" json:"block_id,omitempty"` + // Deprecated: please use `sdk_block` instead + Block *v1.Block `protobuf:"bytes,2,opt,name=block,proto3" json:"block,omitempty"` + SdkBlock *Block `protobuf:"bytes,3,opt,name=sdk_block,json=sdkBlock,proto3" json:"sdk_block,omitempty"` +} + +func (m *GetLatestBlockResponse) Reset() { *m = GetLatestBlockResponse{} } +func (m *GetLatestBlockResponse) String() string { return proto.CompactTextString(m) } +func (*GetLatestBlockResponse) ProtoMessage() {} +func (*GetLatestBlockResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{8} +} +func (m *GetLatestBlockResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetLatestBlockResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetLatestBlockResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetLatestBlockResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetLatestBlockResponse.Merge(m, src) +} +func (m *GetLatestBlockResponse) XXX_Size() int { + return m.Size() +} +func (m *GetLatestBlockResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetLatestBlockResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetLatestBlockResponse proto.InternalMessageInfo + +func (m *GetLatestBlockResponse) GetBlockId() *v1.BlockID { + if m != nil { + return m.BlockId + } + return nil +} + +func (m *GetLatestBlockResponse) GetBlock() *v1.Block { + if m != nil { + return m.Block + } + return nil +} + +func (m *GetLatestBlockResponse) GetSdkBlock() *Block { + if m != nil { + return m.SdkBlock + } + return nil +} + +// GetSyncingRequest is the request type for the Query/GetSyncing RPC method. +type GetSyncingRequest struct { +} + +func (m *GetSyncingRequest) Reset() { *m = GetSyncingRequest{} } +func (m *GetSyncingRequest) String() string { return proto.CompactTextString(m) } +func (*GetSyncingRequest) ProtoMessage() {} +func (*GetSyncingRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{9} +} +func (m *GetSyncingRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetSyncingRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetSyncingRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetSyncingRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetSyncingRequest.Merge(m, src) +} +func (m *GetSyncingRequest) XXX_Size() int { + return m.Size() +} +func (m *GetSyncingRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetSyncingRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetSyncingRequest proto.InternalMessageInfo + +// GetSyncingResponse is the response type for the Query/GetSyncing RPC method. +type GetSyncingResponse struct { + Syncing bool `protobuf:"varint,1,opt,name=syncing,proto3" json:"syncing,omitempty"` +} + +func (m *GetSyncingResponse) Reset() { *m = GetSyncingResponse{} } +func (m *GetSyncingResponse) String() string { return proto.CompactTextString(m) } +func (*GetSyncingResponse) ProtoMessage() {} +func (*GetSyncingResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{10} +} +func (m *GetSyncingResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetSyncingResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetSyncingResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetSyncingResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetSyncingResponse.Merge(m, src) +} +func (m *GetSyncingResponse) XXX_Size() int { + return m.Size() +} +func (m *GetSyncingResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetSyncingResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetSyncingResponse proto.InternalMessageInfo + +func (m *GetSyncingResponse) GetSyncing() bool { + if m != nil { + return m.Syncing + } + return false +} + +// GetNodeInfoRequest is the request type for the Query/GetNodeInfo RPC method. +type GetNodeInfoRequest struct { +} + +func (m *GetNodeInfoRequest) Reset() { *m = GetNodeInfoRequest{} } +func (m *GetNodeInfoRequest) String() string { return proto.CompactTextString(m) } +func (*GetNodeInfoRequest) ProtoMessage() {} +func (*GetNodeInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{11} +} +func (m *GetNodeInfoRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetNodeInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetNodeInfoRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetNodeInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetNodeInfoRequest.Merge(m, src) +} +func (m *GetNodeInfoRequest) XXX_Size() int { + return m.Size() +} +func (m *GetNodeInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_GetNodeInfoRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_GetNodeInfoRequest proto.InternalMessageInfo + +// GetNodeInfoResponse is the response type for the Query/GetNodeInfo RPC method. +type GetNodeInfoResponse struct { + DefaultNodeInfo *v11.DefaultNodeInfo `protobuf:"bytes,1,opt,name=default_node_info,json=defaultNodeInfo,proto3" json:"default_node_info,omitempty"` + ApplicationVersion *VersionInfo `protobuf:"bytes,2,opt,name=application_version,json=applicationVersion,proto3" json:"application_version,omitempty"` +} + +func (m *GetNodeInfoResponse) Reset() { *m = GetNodeInfoResponse{} } +func (m *GetNodeInfoResponse) String() string { return proto.CompactTextString(m) } +func (*GetNodeInfoResponse) ProtoMessage() {} +func (*GetNodeInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{12} +} +func (m *GetNodeInfoResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *GetNodeInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_GetNodeInfoResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *GetNodeInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_GetNodeInfoResponse.Merge(m, src) +} +func (m *GetNodeInfoResponse) XXX_Size() int { + return m.Size() +} +func (m *GetNodeInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_GetNodeInfoResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_GetNodeInfoResponse proto.InternalMessageInfo + +func (m *GetNodeInfoResponse) GetDefaultNodeInfo() *v11.DefaultNodeInfo { + if m != nil { + return m.DefaultNodeInfo + } + return nil +} + +func (m *GetNodeInfoResponse) GetApplicationVersion() *VersionInfo { + if m != nil { + return m.ApplicationVersion + } + return nil +} + +// VersionInfo is the type for the GetNodeInfoResponse message. +type VersionInfo struct { + Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"` + AppName string `protobuf:"bytes,2,opt,name=app_name,json=appName,proto3" json:"app_name,omitempty"` + Version string `protobuf:"bytes,3,opt,name=version,proto3" json:"version,omitempty"` + GitCommit string `protobuf:"bytes,4,opt,name=git_commit,json=gitCommit,proto3" json:"git_commit,omitempty"` + BuildTags string `protobuf:"bytes,5,opt,name=build_tags,json=buildTags,proto3" json:"build_tags,omitempty"` + GoVersion string `protobuf:"bytes,6,opt,name=go_version,json=goVersion,proto3" json:"go_version,omitempty"` + BuildDeps []*Module `protobuf:"bytes,7,rep,name=build_deps,json=buildDeps,proto3" json:"build_deps,omitempty"` + CosmosSdkVersion string `protobuf:"bytes,8,opt,name=cosmos_sdk_version,json=cosmosSdkVersion,proto3" json:"cosmos_sdk_version,omitempty"` +} + +func (m *VersionInfo) Reset() { *m = VersionInfo{} } +func (m *VersionInfo) String() string { return proto.CompactTextString(m) } +func (*VersionInfo) ProtoMessage() {} +func (*VersionInfo) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{13} +} +func (m *VersionInfo) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *VersionInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_VersionInfo.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *VersionInfo) XXX_Merge(src proto.Message) { + xxx_messageInfo_VersionInfo.Merge(m, src) +} +func (m *VersionInfo) XXX_Size() int { + return m.Size() +} +func (m *VersionInfo) XXX_DiscardUnknown() { + xxx_messageInfo_VersionInfo.DiscardUnknown(m) +} + +var xxx_messageInfo_VersionInfo proto.InternalMessageInfo + +func (m *VersionInfo) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *VersionInfo) GetAppName() string { + if m != nil { + return m.AppName + } + return "" +} + +func (m *VersionInfo) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func (m *VersionInfo) GetGitCommit() string { + if m != nil { + return m.GitCommit + } + return "" +} + +func (m *VersionInfo) GetBuildTags() string { + if m != nil { + return m.BuildTags + } + return "" +} + +func (m *VersionInfo) GetGoVersion() string { + if m != nil { + return m.GoVersion + } + return "" +} + +func (m *VersionInfo) GetBuildDeps() []*Module { + if m != nil { + return m.BuildDeps + } + return nil +} + +func (m *VersionInfo) GetCosmosSdkVersion() string { + if m != nil { + return m.CosmosSdkVersion + } + return "" +} + +// Module is the type for VersionInfo +type Module struct { + // module path + Path string `protobuf:"bytes,1,opt,name=path,proto3" json:"path,omitempty"` + // module version + Version string `protobuf:"bytes,2,opt,name=version,proto3" json:"version,omitempty"` + // checksum + Sum string `protobuf:"bytes,3,opt,name=sum,proto3" json:"sum,omitempty"` +} + +func (m *Module) Reset() { *m = Module{} } +func (m *Module) String() string { return proto.CompactTextString(m) } +func (*Module) ProtoMessage() {} +func (*Module) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{14} +} +func (m *Module) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Module) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Module.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Module) XXX_Merge(src proto.Message) { + xxx_messageInfo_Module.Merge(m, src) +} +func (m *Module) XXX_Size() int { + return m.Size() +} +func (m *Module) XXX_DiscardUnknown() { + xxx_messageInfo_Module.DiscardUnknown(m) +} + +var xxx_messageInfo_Module proto.InternalMessageInfo + +func (m *Module) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *Module) GetVersion() string { + if m != nil { + return m.Version + } + return "" +} + +func (m *Module) GetSum() string { + if m != nil { + return m.Sum + } + return "" +} + +// ABCIQueryRequest defines the request structure for the ABCIQuery gRPC query. +type ABCIQueryRequest struct { + Data []byte `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path,proto3" json:"path,omitempty"` + Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` + Prove bool `protobuf:"varint,4,opt,name=prove,proto3" json:"prove,omitempty"` +} + +func (m *ABCIQueryRequest) Reset() { *m = ABCIQueryRequest{} } +func (m *ABCIQueryRequest) String() string { return proto.CompactTextString(m) } +func (*ABCIQueryRequest) ProtoMessage() {} +func (*ABCIQueryRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{15} +} +func (m *ABCIQueryRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ABCIQueryRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ABCIQueryRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ABCIQueryRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_ABCIQueryRequest.Merge(m, src) +} +func (m *ABCIQueryRequest) XXX_Size() int { + return m.Size() +} +func (m *ABCIQueryRequest) XXX_DiscardUnknown() { + xxx_messageInfo_ABCIQueryRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_ABCIQueryRequest proto.InternalMessageInfo + +func (m *ABCIQueryRequest) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +func (m *ABCIQueryRequest) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *ABCIQueryRequest) GetHeight() int64 { + if m != nil { + return m.Height + } + return 0 +} + +func (m *ABCIQueryRequest) GetProve() bool { + if m != nil { + return m.Prove + } + return false +} + +// ABCIQueryResponse defines the response structure for the ABCIQuery gRPC query. +// +// Note: This type is a duplicate of the ResponseQuery proto type defined in +// Tendermint. +type ABCIQueryResponse struct { + Code uint32 `protobuf:"varint,1,opt,name=code,proto3" json:"code,omitempty"` + Log string `protobuf:"bytes,3,opt,name=log,proto3" json:"log,omitempty"` + Info string `protobuf:"bytes,4,opt,name=info,proto3" json:"info,omitempty"` + Index int64 `protobuf:"varint,5,opt,name=index,proto3" json:"index,omitempty"` + Key []byte `protobuf:"bytes,6,opt,name=key,proto3" json:"key,omitempty"` + Value []byte `protobuf:"bytes,7,opt,name=value,proto3" json:"value,omitempty"` + ProofOps *ProofOps `protobuf:"bytes,8,opt,name=proof_ops,json=proofOps,proto3" json:"proof_ops,omitempty"` + Height int64 `protobuf:"varint,9,opt,name=height,proto3" json:"height,omitempty"` + Codespace string `protobuf:"bytes,10,opt,name=codespace,proto3" json:"codespace,omitempty"` +} + +func (m *ABCIQueryResponse) Reset() { *m = ABCIQueryResponse{} } +func (m *ABCIQueryResponse) String() string { return proto.CompactTextString(m) } +func (*ABCIQueryResponse) ProtoMessage() {} +func (*ABCIQueryResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{16} +} +func (m *ABCIQueryResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ABCIQueryResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ABCIQueryResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ABCIQueryResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_ABCIQueryResponse.Merge(m, src) +} +func (m *ABCIQueryResponse) XXX_Size() int { + return m.Size() +} +func (m *ABCIQueryResponse) XXX_DiscardUnknown() { + xxx_messageInfo_ABCIQueryResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_ABCIQueryResponse proto.InternalMessageInfo + +func (m *ABCIQueryResponse) GetCode() uint32 { + if m != nil { + return m.Code + } + return 0 +} + +func (m *ABCIQueryResponse) GetLog() string { + if m != nil { + return m.Log + } + return "" +} + +func (m *ABCIQueryResponse) GetInfo() string { + if m != nil { + return m.Info + } + return "" +} + +func (m *ABCIQueryResponse) GetIndex() int64 { + if m != nil { + return m.Index + } + return 0 +} + +func (m *ABCIQueryResponse) GetKey() []byte { + if m != nil { + return m.Key + } + return nil +} + +func (m *ABCIQueryResponse) GetValue() []byte { + if m != nil { + return m.Value + } + return nil +} + +func (m *ABCIQueryResponse) GetProofOps() *ProofOps { + if m != nil { + return m.ProofOps + } + return nil +} + +func (m *ABCIQueryResponse) GetHeight() int64 { + if m != nil { + return m.Height + } + return 0 +} + +func (m *ABCIQueryResponse) GetCodespace() string { + if m != nil { + return m.Codespace + } + return "" +} + +// ProofOp defines an operation used for calculating Merkle root. The data could +// be arbitrary format, providing necessary data for example neighbouring node +// hash. +// +// Note: This type is a duplicate of the ProofOp proto type defined in Tendermint. +type ProofOp struct { + Type string `protobuf:"bytes,1,opt,name=type,proto3" json:"type,omitempty"` + Key []byte `protobuf:"bytes,2,opt,name=key,proto3" json:"key,omitempty"` + Data []byte `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"` +} + +func (m *ProofOp) Reset() { *m = ProofOp{} } +func (m *ProofOp) String() string { return proto.CompactTextString(m) } +func (*ProofOp) ProtoMessage() {} +func (*ProofOp) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{17} +} +func (m *ProofOp) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ProofOp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ProofOp.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ProofOp) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProofOp.Merge(m, src) +} +func (m *ProofOp) XXX_Size() int { + return m.Size() +} +func (m *ProofOp) XXX_DiscardUnknown() { + xxx_messageInfo_ProofOp.DiscardUnknown(m) +} + +var xxx_messageInfo_ProofOp proto.InternalMessageInfo + +func (m *ProofOp) GetType() string { + if m != nil { + return m.Type + } + return "" +} + +func (m *ProofOp) GetKey() []byte { + if m != nil { + return m.Key + } + return nil +} + +func (m *ProofOp) GetData() []byte { + if m != nil { + return m.Data + } + return nil +} + +// ProofOps is Merkle proof defined by the list of ProofOps. +// +// Note: This type is a duplicate of the ProofOps proto type defined in Tendermint. +type ProofOps struct { + Ops []ProofOp `protobuf:"bytes,1,rep,name=ops,proto3" json:"ops"` +} + +func (m *ProofOps) Reset() { *m = ProofOps{} } +func (m *ProofOps) String() string { return proto.CompactTextString(m) } +func (*ProofOps) ProtoMessage() {} +func (*ProofOps) Descriptor() ([]byte, []int) { + return fileDescriptor_40c93fb3ef485c5d, []int{18} +} +func (m *ProofOps) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *ProofOps) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_ProofOps.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *ProofOps) XXX_Merge(src proto.Message) { + xxx_messageInfo_ProofOps.Merge(m, src) +} +func (m *ProofOps) XXX_Size() int { + return m.Size() +} +func (m *ProofOps) XXX_DiscardUnknown() { + xxx_messageInfo_ProofOps.DiscardUnknown(m) +} + +var xxx_messageInfo_ProofOps proto.InternalMessageInfo + +func (m *ProofOps) GetOps() []ProofOp { + if m != nil { + return m.Ops + } + return nil +} + +func init() { + proto.RegisterType((*GetValidatorSetByHeightRequest)(nil), "cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightRequest") + proto.RegisterType((*GetValidatorSetByHeightResponse)(nil), "cosmos.base.tendermint.v1beta1.GetValidatorSetByHeightResponse") + proto.RegisterType((*GetLatestValidatorSetRequest)(nil), "cosmos.base.tendermint.v1beta1.GetLatestValidatorSetRequest") + proto.RegisterType((*GetLatestValidatorSetResponse)(nil), "cosmos.base.tendermint.v1beta1.GetLatestValidatorSetResponse") + proto.RegisterType((*Validator)(nil), "cosmos.base.tendermint.v1beta1.Validator") + proto.RegisterType((*GetBlockByHeightRequest)(nil), "cosmos.base.tendermint.v1beta1.GetBlockByHeightRequest") + proto.RegisterType((*GetBlockByHeightResponse)(nil), "cosmos.base.tendermint.v1beta1.GetBlockByHeightResponse") + proto.RegisterType((*GetLatestBlockRequest)(nil), "cosmos.base.tendermint.v1beta1.GetLatestBlockRequest") + proto.RegisterType((*GetLatestBlockResponse)(nil), "cosmos.base.tendermint.v1beta1.GetLatestBlockResponse") + proto.RegisterType((*GetSyncingRequest)(nil), "cosmos.base.tendermint.v1beta1.GetSyncingRequest") + proto.RegisterType((*GetSyncingResponse)(nil), "cosmos.base.tendermint.v1beta1.GetSyncingResponse") + proto.RegisterType((*GetNodeInfoRequest)(nil), "cosmos.base.tendermint.v1beta1.GetNodeInfoRequest") + proto.RegisterType((*GetNodeInfoResponse)(nil), "cosmos.base.tendermint.v1beta1.GetNodeInfoResponse") + proto.RegisterType((*VersionInfo)(nil), "cosmos.base.tendermint.v1beta1.VersionInfo") + proto.RegisterType((*Module)(nil), "cosmos.base.tendermint.v1beta1.Module") + proto.RegisterType((*ABCIQueryRequest)(nil), "cosmos.base.tendermint.v1beta1.ABCIQueryRequest") + proto.RegisterType((*ABCIQueryResponse)(nil), "cosmos.base.tendermint.v1beta1.ABCIQueryResponse") + proto.RegisterType((*ProofOp)(nil), "cosmos.base.tendermint.v1beta1.ProofOp") + proto.RegisterType((*ProofOps)(nil), "cosmos.base.tendermint.v1beta1.ProofOps") +} + +func init() { + proto.RegisterFile("cosmos/base/tendermint/v1beta1/query.proto", fileDescriptor_40c93fb3ef485c5d) +} + +var fileDescriptor_40c93fb3ef485c5d = []byte{ + // 1437 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x57, 0x4d, 0x6f, 0x1b, 0xc5, + 0x1b, 0xcf, 0xda, 0x69, 0x6c, 0x3f, 0xe9, 0xff, 0xdf, 0x64, 0x12, 0x5a, 0xd7, 0xb4, 0x6e, 0xb0, + 0x44, 0x9b, 0xb6, 0x64, 0xb7, 0x76, 0xda, 0xb4, 0x87, 0x52, 0x94, 0x34, 0x25, 0x0d, 0xb4, 0x25, + 0x6c, 0x10, 0x48, 0x08, 0x69, 0xb5, 0xf6, 0x8e, 0x37, 0xab, 0xd8, 0x3b, 0xd3, 0x9d, 0xb1, 0xc1, + 0x42, 0x48, 0x88, 0x0f, 0x80, 0x90, 0xf8, 0x0a, 0x1c, 0xe0, 0xc6, 0xa1, 0x82, 0x13, 0x95, 0xe0, + 0x54, 0x71, 0xaa, 0x8a, 0x84, 0xaa, 0x1e, 0x10, 0x6a, 0x91, 0xf8, 0x1a, 0x68, 0x5e, 0xd6, 0xde, + 0xcd, 0x4b, 0xed, 0xf4, 0x06, 0x17, 0x6b, 0xf6, 0x79, 0xfd, 0xfd, 0x9e, 0x67, 0xe6, 0x99, 0x31, + 0x9c, 0x6b, 0x10, 0xd6, 0x26, 0xcc, 0xaa, 0xbb, 0x0c, 0x5b, 0x1c, 0x87, 0x1e, 0x8e, 0xda, 0x41, + 0xc8, 0xad, 0x6e, 0xb5, 0x8e, 0xb9, 0x5b, 0xb5, 0xee, 0x76, 0x70, 0xd4, 0x33, 0x69, 0x44, 0x38, + 0x41, 0x65, 0x65, 0x6b, 0x0a, 0x5b, 0x73, 0x60, 0x6b, 0x6a, 0xdb, 0xd2, 0xac, 0x4f, 0x7c, 0x22, + 0x4d, 0x2d, 0xb1, 0x52, 0x5e, 0xa5, 0xe3, 0x3e, 0x21, 0x7e, 0x0b, 0x5b, 0xf2, 0xab, 0xde, 0x69, + 0x5a, 0x6e, 0xa8, 0x03, 0x96, 0x4e, 0x68, 0x95, 0x4b, 0x03, 0xcb, 0x0d, 0x43, 0xc2, 0x5d, 0x1e, + 0x90, 0x90, 0x69, 0xed, 0xcb, 0x0d, 0xd2, 0xc6, 0xbc, 0xde, 0xe4, 0x16, 0xad, 0x51, 0xab, 0x5b, + 0xb5, 0x78, 0x8f, 0xe2, 0x58, 0x79, 0xb2, 0xaf, 0x94, 0xd2, 0x9d, 0xea, 0x14, 0x2d, 0xc9, 0xa1, + 0xcf, 0x88, 0xba, 0x7e, 0x10, 0xca, 0x44, 0x7b, 0xd9, 0xee, 0x51, 0x82, 0x64, 0xdc, 0xe3, 0xca, + 0xd6, 0x51, 0x2c, 0x75, 0x3d, 0xf6, 0x45, 0x54, 0x6f, 0x91, 0xc6, 0xb6, 0x56, 0x4f, 0xbb, 0xed, + 0x20, 0x24, 0x96, 0xfc, 0x55, 0xa2, 0xca, 0xe7, 0x06, 0x94, 0xd7, 0x30, 0x7f, 0xdf, 0x6d, 0x05, + 0x9e, 0xcb, 0x49, 0xb4, 0x89, 0xf9, 0x4a, 0xef, 0x26, 0x0e, 0xfc, 0x2d, 0x6e, 0xe3, 0xbb, 0x1d, + 0xcc, 0x38, 0x3a, 0x0a, 0x13, 0x5b, 0x52, 0x50, 0x34, 0xe6, 0x8c, 0xf9, 0xac, 0xad, 0xbf, 0xd0, + 0x9b, 0x00, 0x03, 0x1e, 0xc5, 0xcc, 0x9c, 0x31, 0x3f, 0x59, 0x3b, 0x6d, 0x26, 0xfb, 0xa3, 0x1a, + 0xa7, 0x39, 0x98, 0x1b, 0xae, 0x8f, 0x75, 0x4c, 0x3b, 0xe1, 0x59, 0x79, 0x6c, 0xc0, 0xa9, 0x7d, + 0x21, 0x30, 0x4a, 0x42, 0x86, 0xd1, 0x2b, 0x70, 0x58, 0x12, 0x71, 0x52, 0x48, 0x26, 0xa5, 0x4c, + 0x99, 0xa2, 0x75, 0x80, 0x6e, 0x1c, 0x82, 0x15, 0x33, 0x73, 0xd9, 0xf9, 0xc9, 0xda, 0x59, 0xf3, + 0xf9, 0xdb, 0xc5, 0xec, 0x27, 0xb5, 0x13, 0xce, 0x68, 0x2d, 0xc5, 0x2c, 0x2b, 0x99, 0x9d, 0x19, + 0xca, 0x4c, 0x41, 0x4d, 0x51, 0x6b, 0xc2, 0x89, 0x35, 0xcc, 0x6f, 0xb9, 0x1c, 0xb3, 0x14, 0xbf, + 0xb8, 0xb4, 0xe9, 0x12, 0x1a, 0x2f, 0x5c, 0xc2, 0xdf, 0x0d, 0x38, 0xb9, 0x4f, 0xa2, 0x7f, 0x77, + 0x01, 0xef, 0x1b, 0x50, 0xe8, 0xa7, 0x40, 0x35, 0xc8, 0xb9, 0x9e, 0x17, 0x61, 0xc6, 0x24, 0xfe, + 0xc2, 0x4a, 0xf1, 0xd1, 0xbd, 0x85, 0x59, 0x1d, 0x76, 0x59, 0x69, 0x36, 0x79, 0x14, 0x84, 0xbe, + 0x1d, 0x1b, 0xa2, 0x05, 0xc8, 0xd1, 0x4e, 0xdd, 0xd9, 0xc6, 0x3d, 0xbd, 0x45, 0x67, 0x4d, 0x75, + 0xe2, 0xcd, 0x78, 0x18, 0x98, 0xcb, 0x61, 0xcf, 0x9e, 0xa0, 0x9d, 0xfa, 0xdb, 0xb8, 0x27, 0xea, + 0xd4, 0x25, 0x3c, 0x08, 0x7d, 0x87, 0x92, 0x8f, 0x71, 0x24, 0xb1, 0x67, 0xed, 0x49, 0x25, 0xdb, + 0x10, 0x22, 0x74, 0x1e, 0xa6, 0x69, 0x44, 0x28, 0x61, 0x38, 0x72, 0x68, 0x14, 0x90, 0x28, 0xe0, + 0xbd, 0xe2, 0xb8, 0xb4, 0x9b, 0x8a, 0x15, 0x1b, 0x5a, 0x5e, 0xa9, 0xc2, 0xb1, 0x35, 0xcc, 0x57, + 0x44, 0x99, 0x47, 0x3c, 0x57, 0x95, 0x27, 0x06, 0x14, 0x77, 0xfb, 0xe8, 0x3e, 0x5e, 0x82, 0xbc, + 0xea, 0x63, 0xe0, 0xe9, 0xfd, 0x52, 0x32, 0xe3, 0x43, 0x6f, 0xaa, 0x29, 0xd1, 0xad, 0x9a, 0xd2, + 0x77, 0x7d, 0xd5, 0xce, 0x49, 0xdb, 0x75, 0x0f, 0x99, 0x70, 0x48, 0x2e, 0x75, 0x0d, 0x8a, 0xfb, + 0xf9, 0xd8, 0xca, 0x0c, 0x7d, 0x00, 0x05, 0xe6, 0x6d, 0x3b, 0xca, 0x47, 0xf5, 0xef, 0xd5, 0x61, + 0x5b, 0x41, 0x01, 0x9e, 0x79, 0x72, 0x6f, 0xe1, 0x88, 0xb2, 0x5c, 0x60, 0xde, 0xf6, 0xdc, 0x05, + 0xf3, 0xe2, 0x65, 0x3b, 0xcf, 0xbc, 0x6d, 0xa9, 0xae, 0x1c, 0x83, 0x97, 0xfa, 0x1b, 0x55, 0x65, + 0x54, 0xd5, 0x10, 0x53, 0xe0, 0xe8, 0x4e, 0xcd, 0x7f, 0x84, 0xf3, 0x0c, 0x4c, 0xaf, 0x61, 0xbe, + 0xd9, 0x0b, 0x1b, 0x62, 0x67, 0x6a, 0xbe, 0x26, 0xa0, 0xa4, 0x50, 0x53, 0x2d, 0x42, 0x8e, 0x29, + 0x91, 0x64, 0x9a, 0xb7, 0xe3, 0xcf, 0xca, 0xac, 0xb4, 0xbf, 0x43, 0x3c, 0xbc, 0x1e, 0x36, 0x49, + 0x1c, 0xe5, 0x67, 0x03, 0x66, 0x52, 0x62, 0x1d, 0xe7, 0x16, 0x4c, 0x7b, 0xb8, 0xe9, 0x76, 0x5a, + 0xdc, 0x09, 0x89, 0x87, 0x9d, 0x20, 0x6c, 0x12, 0x5d, 0xbb, 0xb9, 0x41, 0x1d, 0x68, 0x8d, 0x8a, + 0x2a, 0xac, 0x2a, 0xcb, 0x7e, 0x90, 0x23, 0x5e, 0x5a, 0x80, 0x3e, 0x82, 0x19, 0x97, 0xd2, 0x56, + 0xd0, 0x90, 0x87, 0xd2, 0xe9, 0xe2, 0x88, 0x0d, 0x46, 0xfe, 0xf9, 0xa1, 0x23, 0x42, 0x99, 0xcb, + 0xd0, 0x28, 0x11, 0x47, 0xcb, 0x2b, 0x3f, 0x65, 0x60, 0x32, 0x61, 0x83, 0x10, 0x8c, 0x87, 0x6e, + 0x1b, 0xab, 0x23, 0x6e, 0xcb, 0x35, 0x3a, 0x0e, 0x79, 0x97, 0x52, 0x47, 0xca, 0x33, 0x52, 0x9e, + 0x73, 0x29, 0xbd, 0x23, 0x54, 0x45, 0xc8, 0xc5, 0x80, 0xb2, 0x4a, 0xa3, 0x3f, 0xd1, 0x49, 0x00, + 0x3f, 0xe0, 0x4e, 0x83, 0xb4, 0xdb, 0x01, 0x97, 0x27, 0xb4, 0x60, 0x17, 0xfc, 0x80, 0x5f, 0x97, + 0x02, 0xa1, 0xae, 0x77, 0x82, 0x96, 0xe7, 0x70, 0xd7, 0x67, 0xc5, 0x43, 0x4a, 0x2d, 0x25, 0xef, + 0xb9, 0x3e, 0x93, 0xde, 0xa4, 0xcf, 0x75, 0x42, 0x7b, 0x13, 0x8d, 0x14, 0xdd, 0x88, 0xbd, 0x3d, + 0x4c, 0x59, 0x31, 0x27, 0xa7, 0xe5, 0xe9, 0x61, 0xa5, 0xb8, 0x4d, 0xbc, 0x4e, 0x0b, 0xeb, 0x2c, + 0xab, 0x98, 0x32, 0xb4, 0x0c, 0x48, 0x5f, 0xe7, 0x62, 0xef, 0xc5, 0xd9, 0xf2, 0x72, 0xba, 0xed, + 0xb1, 0xad, 0x16, 0xed, 0x29, 0x25, 0xd8, 0xf4, 0xb6, 0xe3, 0xfa, 0xdd, 0x84, 0x09, 0x15, 0x57, + 0x54, 0x8e, 0xba, 0x7c, 0x2b, 0xae, 0x9c, 0x58, 0x27, 0xcb, 0x93, 0x49, 0x97, 0x67, 0x0a, 0xb2, + 0xac, 0xd3, 0xd6, 0x45, 0x13, 0xcb, 0xca, 0x16, 0x4c, 0x2d, 0xaf, 0x5c, 0x5f, 0x7f, 0x57, 0xcc, + 0xe6, 0x78, 0x4a, 0x21, 0x18, 0xf7, 0x5c, 0xee, 0xca, 0x98, 0x87, 0x6d, 0xb9, 0xee, 0xe7, 0xc9, + 0x24, 0xf2, 0x0c, 0xa6, 0x59, 0x36, 0xf5, 0x4a, 0x98, 0x85, 0x43, 0x34, 0x22, 0x5d, 0x2c, 0xeb, + 0x9f, 0xb7, 0xd5, 0x47, 0xe5, 0xcb, 0x0c, 0x4c, 0x27, 0x52, 0xe9, 0x5d, 0x8b, 0x60, 0xbc, 0x41, + 0x3c, 0xd5, 0xf9, 0xff, 0xd9, 0x72, 0x2d, 0x50, 0xb6, 0x88, 0x1f, 0xa3, 0x6c, 0x11, 0x5f, 0x58, + 0xc9, 0xed, 0xac, 0x1a, 0x2a, 0xd7, 0x22, 0x4b, 0x10, 0x7a, 0xf8, 0x13, 0xd9, 0xc6, 0xac, 0xad, + 0x3e, 0x84, 0xaf, 0x98, 0xfb, 0x13, 0x12, 0xba, 0x58, 0x0a, 0xbb, 0xae, 0xdb, 0xea, 0xe0, 0x62, + 0x4e, 0xca, 0xd4, 0x07, 0xba, 0x01, 0x05, 0x1a, 0x11, 0xd2, 0x74, 0x08, 0x65, 0xb2, 0xf6, 0x93, + 0xb5, 0xf9, 0x61, 0xad, 0xdc, 0x10, 0x0e, 0xef, 0x50, 0x66, 0xe7, 0xa9, 0x5e, 0x25, 0x4a, 0x50, + 0x48, 0x95, 0xe0, 0x04, 0x14, 0x04, 0x15, 0x46, 0xdd, 0x06, 0x2e, 0x82, 0xda, 0x48, 0x7d, 0xc1, + 0x5b, 0xe3, 0xf9, 0xcc, 0x54, 0xb6, 0x72, 0x1d, 0x72, 0x3a, 0xa2, 0xe0, 0x27, 0x06, 0x54, 0xdc, + 0x45, 0xb1, 0x8e, 0x99, 0x64, 0x06, 0x4c, 0xe2, 0xbe, 0x64, 0x07, 0x7d, 0xa9, 0x6c, 0x40, 0x3e, + 0x86, 0x85, 0x56, 0x21, 0x2b, 0xd8, 0x18, 0x72, 0x63, 0x9e, 0x19, 0x91, 0xcd, 0x4a, 0xe1, 0xc1, + 0x1f, 0xa7, 0xc6, 0xbe, 0xfd, 0xfb, 0xfb, 0x73, 0x86, 0x2d, 0xdc, 0x6b, 0xbf, 0x00, 0xe4, 0x36, + 0x71, 0xd4, 0x0d, 0x1a, 0x18, 0x7d, 0x67, 0xc0, 0x64, 0x62, 0xd6, 0xa0, 0xda, 0xb0, 0xa0, 0xbb, + 0xe7, 0x55, 0x69, 0xf1, 0x40, 0x3e, 0x6a, 0x5b, 0x54, 0xaa, 0x5f, 0xfc, 0xf6, 0xd7, 0xd7, 0x99, + 0xf3, 0xe8, 0xac, 0x35, 0xe4, 0x95, 0xdc, 0x1f, 0x75, 0xe8, 0x1b, 0x03, 0x60, 0x30, 0x5e, 0x51, + 0x75, 0x84, 0xb4, 0xe9, 0xf9, 0x5c, 0xaa, 0x1d, 0xc4, 0x45, 0x03, 0xb5, 0x24, 0xd0, 0xb3, 0xe8, + 0xcc, 0x30, 0xa0, 0x7a, 0xa8, 0xa3, 0x1f, 0x0c, 0xf8, 0x7f, 0xfa, 0xd2, 0x43, 0x97, 0x46, 0xc8, + 0xbb, 0xfb, 0xfa, 0x2c, 0x2d, 0x1d, 0xd4, 0x4d, 0x43, 0xbe, 0x24, 0x21, 0x5b, 0x68, 0x61, 0x18, + 0x64, 0x79, 0x2d, 0x32, 0xab, 0x25, 0x63, 0xa0, 0xfb, 0x06, 0x4c, 0xed, 0x7c, 0xa3, 0xa0, 0xcb, + 0x23, 0x60, 0xd8, 0xeb, 0x25, 0x54, 0xba, 0x72, 0x70, 0x47, 0x0d, 0xff, 0xb2, 0x84, 0x5f, 0x45, + 0xd6, 0x88, 0xf0, 0x3f, 0x55, 0x47, 0xf2, 0x33, 0xf4, 0xc8, 0x48, 0x3c, 0x44, 0x92, 0x2f, 0x66, + 0x74, 0x75, 0xe4, 0x4a, 0xee, 0xf1, 0xa2, 0x2f, 0xbd, 0xfe, 0x82, 0xde, 0x9a, 0xcf, 0x55, 0xc9, + 0x67, 0x09, 0x5d, 0x1c, 0xc6, 0x67, 0xf0, 0xd8, 0xc6, 0xbc, 0xdf, 0x95, 0x27, 0x86, 0x7c, 0x6d, + 0xee, 0xf5, 0x4f, 0x0a, 0x5d, 0x1b, 0x01, 0xd8, 0x73, 0xfe, 0x05, 0x96, 0xde, 0x78, 0x61, 0x7f, + 0x4d, 0xed, 0x9a, 0xa4, 0x76, 0x05, 0x2d, 0x1d, 0x8c, 0x5a, 0xbf, 0x63, 0x3f, 0x1a, 0x50, 0xe8, + 0x5f, 0x19, 0xe8, 0xc2, 0x30, 0x38, 0x3b, 0x2f, 0xb2, 0x52, 0xf5, 0x00, 0x1e, 0x1a, 0xf2, 0x8d, + 0x5f, 0x77, 0x5d, 0xc0, 0x4b, 0x92, 0xc5, 0x6b, 0xe8, 0xdc, 0x30, 0x16, 0x6e, 0xbd, 0x11, 0x38, + 0xf2, 0x5f, 0xce, 0xca, 0xed, 0x07, 0x4f, 0xcb, 0xc6, 0xc3, 0xa7, 0x65, 0xe3, 0xcf, 0xa7, 0x65, + 0xe3, 0xab, 0x67, 0xe5, 0xb1, 0x87, 0xcf, 0xca, 0x63, 0x8f, 0x9f, 0x95, 0xc7, 0x3e, 0x5c, 0xf4, + 0x03, 0xbe, 0xd5, 0xa9, 0x8b, 0x17, 0x59, 0x1c, 0x6f, 0x90, 0xce, 0x6a, 0xb4, 0x02, 0x1c, 0x72, + 0xcb, 0x8f, 0x68, 0xc3, 0x6a, 0xb4, 0x39, 0x53, 0x73, 0xb8, 0x3e, 0x21, 0xff, 0xb8, 0x2c, 0xfe, + 0x13, 0x00, 0x00, 0xff, 0xff, 0xfb, 0xad, 0x63, 0x50, 0x37, 0x11, 0x00, 0x00, +} + +// Reference imports to suppress errors if they are not otherwise used. +var _ context.Context +var _ grpc.ClientConn + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the grpc package it is being compiled against. +const _ = grpc.SupportPackageIsVersion4 + +// ServiceClient is the client API for Service service. +// +// For semantics around ctx use and closing/ending streaming RPCs, please refer to https://godoc.org/google.golang.org/grpc#ClientConn.NewStream. +type ServiceClient interface { + // GetNodeInfo queries the current node info. + GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, opts ...grpc.CallOption) (*GetNodeInfoResponse, error) + // GetSyncing queries node syncing. + GetSyncing(ctx context.Context, in *GetSyncingRequest, opts ...grpc.CallOption) (*GetSyncingResponse, error) + // GetLatestBlock returns the latest block. + GetLatestBlock(ctx context.Context, in *GetLatestBlockRequest, opts ...grpc.CallOption) (*GetLatestBlockResponse, error) + // GetBlockByHeight queries block for given height. + GetBlockByHeight(ctx context.Context, in *GetBlockByHeightRequest, opts ...grpc.CallOption) (*GetBlockByHeightResponse, error) + // GetLatestValidatorSet queries latest validator-set. + GetLatestValidatorSet(ctx context.Context, in *GetLatestValidatorSetRequest, opts ...grpc.CallOption) (*GetLatestValidatorSetResponse, error) + // GetValidatorSetByHeight queries validator-set at a given height. + GetValidatorSetByHeight(ctx context.Context, in *GetValidatorSetByHeightRequest, opts ...grpc.CallOption) (*GetValidatorSetByHeightResponse, error) + // ABCIQuery defines a query handler that supports ABCI queries directly to the + // application, bypassing Tendermint completely. The ABCI query must contain + // a valid and supported path, including app, custom, p2p, and store. + ABCIQuery(ctx context.Context, in *ABCIQueryRequest, opts ...grpc.CallOption) (*ABCIQueryResponse, error) +} + +type serviceClient struct { + cc grpc1.ClientConn +} + +func NewServiceClient(cc grpc1.ClientConn) ServiceClient { + return &serviceClient{cc} +} + +func (c *serviceClient) GetNodeInfo(ctx context.Context, in *GetNodeInfoRequest, opts ...grpc.CallOption) (*GetNodeInfoResponse, error) { + out := new(GetNodeInfoResponse) + err := c.cc.Invoke(ctx, "/cosmos.base.tendermint.v1beta1.Service/GetNodeInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) GetSyncing(ctx context.Context, in *GetSyncingRequest, opts ...grpc.CallOption) (*GetSyncingResponse, error) { + out := new(GetSyncingResponse) + err := c.cc.Invoke(ctx, "/cosmos.base.tendermint.v1beta1.Service/GetSyncing", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) GetLatestBlock(ctx context.Context, in *GetLatestBlockRequest, opts ...grpc.CallOption) (*GetLatestBlockResponse, error) { + out := new(GetLatestBlockResponse) + err := c.cc.Invoke(ctx, "/cosmos.base.tendermint.v1beta1.Service/GetLatestBlock", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) GetBlockByHeight(ctx context.Context, in *GetBlockByHeightRequest, opts ...grpc.CallOption) (*GetBlockByHeightResponse, error) { + out := new(GetBlockByHeightResponse) + err := c.cc.Invoke(ctx, "/cosmos.base.tendermint.v1beta1.Service/GetBlockByHeight", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) GetLatestValidatorSet(ctx context.Context, in *GetLatestValidatorSetRequest, opts ...grpc.CallOption) (*GetLatestValidatorSetResponse, error) { + out := new(GetLatestValidatorSetResponse) + err := c.cc.Invoke(ctx, "/cosmos.base.tendermint.v1beta1.Service/GetLatestValidatorSet", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) GetValidatorSetByHeight(ctx context.Context, in *GetValidatorSetByHeightRequest, opts ...grpc.CallOption) (*GetValidatorSetByHeightResponse, error) { + out := new(GetValidatorSetByHeightResponse) + err := c.cc.Invoke(ctx, "/cosmos.base.tendermint.v1beta1.Service/GetValidatorSetByHeight", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +func (c *serviceClient) ABCIQuery(ctx context.Context, in *ABCIQueryRequest, opts ...grpc.CallOption) (*ABCIQueryResponse, error) { + out := new(ABCIQueryResponse) + err := c.cc.Invoke(ctx, "/cosmos.base.tendermint.v1beta1.Service/ABCIQuery", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + +// ServiceServer is the server API for Service service. +type ServiceServer interface { + // GetNodeInfo queries the current node info. + GetNodeInfo(context.Context, *GetNodeInfoRequest) (*GetNodeInfoResponse, error) + // GetSyncing queries node syncing. + GetSyncing(context.Context, *GetSyncingRequest) (*GetSyncingResponse, error) + // GetLatestBlock returns the latest block. + GetLatestBlock(context.Context, *GetLatestBlockRequest) (*GetLatestBlockResponse, error) + // GetBlockByHeight queries block for given height. + GetBlockByHeight(context.Context, *GetBlockByHeightRequest) (*GetBlockByHeightResponse, error) + // GetLatestValidatorSet queries latest validator-set. + GetLatestValidatorSet(context.Context, *GetLatestValidatorSetRequest) (*GetLatestValidatorSetResponse, error) + // GetValidatorSetByHeight queries validator-set at a given height. + GetValidatorSetByHeight(context.Context, *GetValidatorSetByHeightRequest) (*GetValidatorSetByHeightResponse, error) + // ABCIQuery defines a query handler that supports ABCI queries directly to the + // application, bypassing Tendermint completely. The ABCI query must contain + // a valid and supported path, including app, custom, p2p, and store. + ABCIQuery(context.Context, *ABCIQueryRequest) (*ABCIQueryResponse, error) +} + +// UnimplementedServiceServer can be embedded to have forward compatible implementations. +type UnimplementedServiceServer struct { +} + +func (*UnimplementedServiceServer) GetNodeInfo(ctx context.Context, req *GetNodeInfoRequest) (*GetNodeInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetNodeInfo not implemented") +} +func (*UnimplementedServiceServer) GetSyncing(ctx context.Context, req *GetSyncingRequest) (*GetSyncingResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetSyncing not implemented") +} +func (*UnimplementedServiceServer) GetLatestBlock(ctx context.Context, req *GetLatestBlockRequest) (*GetLatestBlockResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetLatestBlock not implemented") +} +func (*UnimplementedServiceServer) GetBlockByHeight(ctx context.Context, req *GetBlockByHeightRequest) (*GetBlockByHeightResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetBlockByHeight not implemented") +} +func (*UnimplementedServiceServer) GetLatestValidatorSet(ctx context.Context, req *GetLatestValidatorSetRequest) (*GetLatestValidatorSetResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetLatestValidatorSet not implemented") +} +func (*UnimplementedServiceServer) GetValidatorSetByHeight(ctx context.Context, req *GetValidatorSetByHeightRequest) (*GetValidatorSetByHeightResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method GetValidatorSetByHeight not implemented") +} +func (*UnimplementedServiceServer) ABCIQuery(ctx context.Context, req *ABCIQueryRequest) (*ABCIQueryResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method ABCIQuery not implemented") +} + +func RegisterServiceServer(s grpc1.Server, srv ServiceServer) { + s.RegisterService(&_Service_serviceDesc, srv) +} + +func _Service_GetNodeInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetNodeInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceServer).GetNodeInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.base.tendermint.v1beta1.Service/GetNodeInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceServer).GetNodeInfo(ctx, req.(*GetNodeInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Service_GetSyncing_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetSyncingRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceServer).GetSyncing(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.base.tendermint.v1beta1.Service/GetSyncing", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceServer).GetSyncing(ctx, req.(*GetSyncingRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Service_GetLatestBlock_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetLatestBlockRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceServer).GetLatestBlock(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.base.tendermint.v1beta1.Service/GetLatestBlock", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceServer).GetLatestBlock(ctx, req.(*GetLatestBlockRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Service_GetBlockByHeight_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetBlockByHeightRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceServer).GetBlockByHeight(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.base.tendermint.v1beta1.Service/GetBlockByHeight", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceServer).GetBlockByHeight(ctx, req.(*GetBlockByHeightRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Service_GetLatestValidatorSet_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetLatestValidatorSetRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceServer).GetLatestValidatorSet(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.base.tendermint.v1beta1.Service/GetLatestValidatorSet", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceServer).GetLatestValidatorSet(ctx, req.(*GetLatestValidatorSetRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Service_GetValidatorSetByHeight_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(GetValidatorSetByHeightRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceServer).GetValidatorSetByHeight(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.base.tendermint.v1beta1.Service/GetValidatorSetByHeight", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceServer).GetValidatorSetByHeight(ctx, req.(*GetValidatorSetByHeightRequest)) + } + return interceptor(ctx, in, info, handler) +} + +func _Service_ABCIQuery_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(ABCIQueryRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(ServiceServer).ABCIQuery(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/cosmos.base.tendermint.v1beta1.Service/ABCIQuery", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(ServiceServer).ABCIQuery(ctx, req.(*ABCIQueryRequest)) + } + return interceptor(ctx, in, info, handler) +} + +var _Service_serviceDesc = grpc.ServiceDesc{ + ServiceName: "cosmos.base.tendermint.v1beta1.Service", + HandlerType: (*ServiceServer)(nil), + Methods: []grpc.MethodDesc{ + { + MethodName: "GetNodeInfo", + Handler: _Service_GetNodeInfo_Handler, + }, + { + MethodName: "GetSyncing", + Handler: _Service_GetSyncing_Handler, + }, + { + MethodName: "GetLatestBlock", + Handler: _Service_GetLatestBlock_Handler, + }, + { + MethodName: "GetBlockByHeight", + Handler: _Service_GetBlockByHeight_Handler, + }, + { + MethodName: "GetLatestValidatorSet", + Handler: _Service_GetLatestValidatorSet_Handler, + }, + { + MethodName: "GetValidatorSetByHeight", + Handler: _Service_GetValidatorSetByHeight_Handler, + }, + { + MethodName: "ABCIQuery", + Handler: _Service_ABCIQuery_Handler, + }, + }, + Streams: []grpc.StreamDesc{}, + Metadata: "cosmos/base/tendermint/v1beta1/query.proto", +} + +func (m *GetValidatorSetByHeightRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetValidatorSetByHeightRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetValidatorSetByHeightRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.Height != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *GetValidatorSetByHeightResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetValidatorSetByHeightResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetValidatorSetByHeightResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.Validators) > 0 { + for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if m.BlockHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.BlockHeight)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *GetLatestValidatorSetRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetLatestValidatorSetRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetLatestValidatorSetRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetLatestValidatorSetResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetLatestValidatorSetResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetLatestValidatorSetResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Pagination != nil { + { + size, err := m.Pagination.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if len(m.Validators) > 0 { + for iNdEx := len(m.Validators) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Validators[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + } + if m.BlockHeight != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.BlockHeight)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *Validator) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Validator) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Validator) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ProposerPriority != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.ProposerPriority)) + i-- + dAtA[i] = 0x20 + } + if m.VotingPower != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.VotingPower)) + i-- + dAtA[i] = 0x18 + } + if m.PubKey != nil { + { + size, err := m.PubKey.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if len(m.Address) > 0 { + i -= len(m.Address) + copy(dAtA[i:], m.Address) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Address))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetBlockByHeightRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetBlockByHeightRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetBlockByHeightRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Height != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *GetBlockByHeightResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetBlockByHeightResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetBlockByHeightResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.SdkBlock != nil { + { + size, err := m.SdkBlock.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Block != nil { + { + size, err := m.Block.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.BlockId != nil { + { + size, err := m.BlockId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetLatestBlockRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetLatestBlockRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetLatestBlockRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *GetLatestBlockResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetLatestBlockResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetLatestBlockResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.SdkBlock != nil { + { + size, err := m.SdkBlock.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + } + if m.Block != nil { + { + size, err := m.Block.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.BlockId != nil { + { + size, err := m.BlockId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *GetSyncingRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetSyncingRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetSyncingRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *GetSyncingResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetSyncingResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetSyncingResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Syncing { + i-- + if m.Syncing { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *GetNodeInfoRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetNodeInfoRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetNodeInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + return len(dAtA) - i, nil +} + +func (m *GetNodeInfoResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *GetNodeInfoResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *GetNodeInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.ApplicationVersion != nil { + { + size, err := m.ApplicationVersion.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + } + if m.DefaultNodeInfo != nil { + { + size, err := m.DefaultNodeInfo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *VersionInfo) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *VersionInfo) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *VersionInfo) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.CosmosSdkVersion) > 0 { + i -= len(m.CosmosSdkVersion) + copy(dAtA[i:], m.CosmosSdkVersion) + i = encodeVarintQuery(dAtA, i, uint64(len(m.CosmosSdkVersion))) + i-- + dAtA[i] = 0x42 + } + if len(m.BuildDeps) > 0 { + for iNdEx := len(m.BuildDeps) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.BuildDeps[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x3a + } + } + if len(m.GoVersion) > 0 { + i -= len(m.GoVersion) + copy(dAtA[i:], m.GoVersion) + i = encodeVarintQuery(dAtA, i, uint64(len(m.GoVersion))) + i-- + dAtA[i] = 0x32 + } + if len(m.BuildTags) > 0 { + i -= len(m.BuildTags) + copy(dAtA[i:], m.BuildTags) + i = encodeVarintQuery(dAtA, i, uint64(len(m.BuildTags))) + i-- + dAtA[i] = 0x2a + } + if len(m.GitCommit) > 0 { + i -= len(m.GitCommit) + copy(dAtA[i:], m.GitCommit) + i = encodeVarintQuery(dAtA, i, uint64(len(m.GitCommit))) + i-- + dAtA[i] = 0x22 + } + if len(m.Version) > 0 { + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x1a + } + if len(m.AppName) > 0 { + i -= len(m.AppName) + copy(dAtA[i:], m.AppName) + i = encodeVarintQuery(dAtA, i, uint64(len(m.AppName))) + i-- + dAtA[i] = 0x12 + } + if len(m.Name) > 0 { + i -= len(m.Name) + copy(dAtA[i:], m.Name) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Name))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *Module) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Module) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Module) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Sum) > 0 { + i -= len(m.Sum) + copy(dAtA[i:], m.Sum) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Sum))) + i-- + dAtA[i] = 0x1a + } + if len(m.Version) > 0 { + i -= len(m.Version) + copy(dAtA[i:], m.Version) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Version))) + i-- + dAtA[i] = 0x12 + } + if len(m.Path) > 0 { + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ABCIQueryRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ABCIQueryRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ABCIQueryRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.Prove { + i-- + if m.Prove { + dAtA[i] = 1 + } else { + dAtA[i] = 0 + } + i-- + dAtA[i] = 0x20 + } + if m.Height != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x18 + } + if len(m.Path) > 0 { + i -= len(m.Path) + copy(dAtA[i:], m.Path) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Path))) + i-- + dAtA[i] = 0x12 + } + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ABCIQueryResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ABCIQueryResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ABCIQueryResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Codespace) > 0 { + i -= len(m.Codespace) + copy(dAtA[i:], m.Codespace) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Codespace))) + i-- + dAtA[i] = 0x52 + } + if m.Height != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x48 + } + if m.ProofOps != nil { + { + size, err := m.ProofOps.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + } + if len(m.Value) > 0 { + i -= len(m.Value) + copy(dAtA[i:], m.Value) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Value))) + i-- + dAtA[i] = 0x3a + } + if len(m.Key) > 0 { + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0x32 + } + if m.Index != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Index)) + i-- + dAtA[i] = 0x28 + } + if len(m.Info) > 0 { + i -= len(m.Info) + copy(dAtA[i:], m.Info) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Info))) + i-- + dAtA[i] = 0x22 + } + if len(m.Log) > 0 { + i -= len(m.Log) + copy(dAtA[i:], m.Log) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Log))) + i-- + dAtA[i] = 0x1a + } + if m.Code != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.Code)) + i-- + dAtA[i] = 0x8 + } + return len(dAtA) - i, nil +} + +func (m *ProofOp) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProofOp) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProofOp) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Data) > 0 { + i -= len(m.Data) + copy(dAtA[i:], m.Data) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Data))) + i-- + dAtA[i] = 0x1a + } + if len(m.Key) > 0 { + i -= len(m.Key) + copy(dAtA[i:], m.Key) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Key))) + i-- + dAtA[i] = 0x12 + } + if len(m.Type) > 0 { + i -= len(m.Type) + copy(dAtA[i:], m.Type) + i = encodeVarintQuery(dAtA, i, uint64(len(m.Type))) + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + +func (m *ProofOps) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *ProofOps) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *ProofOps) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.Ops) > 0 { + for iNdEx := len(m.Ops) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.Ops[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + } + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *GetValidatorSetByHeightRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Height != 0 { + n += 1 + sovQuery(uint64(m.Height)) + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *GetValidatorSetByHeightResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BlockHeight != 0 { + n += 1 + sovQuery(uint64(m.BlockHeight)) + } + if len(m.Validators) > 0 { + for _, e := range m.Validators { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *GetLatestValidatorSetRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *GetLatestValidatorSetResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BlockHeight != 0 { + n += 1 + sovQuery(uint64(m.BlockHeight)) + } + if len(m.Validators) > 0 { + for _, e := range m.Validators { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + if m.Pagination != nil { + l = m.Pagination.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *Validator) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Address) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.PubKey != nil { + l = m.PubKey.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.VotingPower != 0 { + n += 1 + sovQuery(uint64(m.VotingPower)) + } + if m.ProposerPriority != 0 { + n += 1 + sovQuery(uint64(m.ProposerPriority)) + } + return n +} + +func (m *GetBlockByHeightRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Height != 0 { + n += 1 + sovQuery(uint64(m.Height)) + } + return n +} + +func (m *GetBlockByHeightResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BlockId != nil { + l = m.BlockId.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.Block != nil { + l = m.Block.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.SdkBlock != nil { + l = m.SdkBlock.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *GetLatestBlockRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *GetLatestBlockResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.BlockId != nil { + l = m.BlockId.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.Block != nil { + l = m.Block.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.SdkBlock != nil { + l = m.SdkBlock.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *GetSyncingRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *GetSyncingResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Syncing { + n += 2 + } + return n +} + +func (m *GetNodeInfoRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *GetNodeInfoResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.DefaultNodeInfo != nil { + l = m.DefaultNodeInfo.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.ApplicationVersion != nil { + l = m.ApplicationVersion.Size() + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *VersionInfo) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Name) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.AppName) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Version) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.GitCommit) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.BuildTags) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.GoVersion) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if len(m.BuildDeps) > 0 { + for _, e := range m.BuildDeps { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + l = len(m.CosmosSdkVersion) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *Module) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Path) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Version) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Sum) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *ABCIQueryRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Data) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Path) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Height != 0 { + n += 1 + sovQuery(uint64(m.Height)) + } + if m.Prove { + n += 2 + } + return n +} + +func (m *ABCIQueryResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.Code != 0 { + n += 1 + sovQuery(uint64(m.Code)) + } + l = len(m.Log) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Info) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.Index != 0 { + n += 1 + sovQuery(uint64(m.Index)) + } + l = len(m.Key) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Value) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + if m.ProofOps != nil { + l = m.ProofOps.Size() + n += 1 + l + sovQuery(uint64(l)) + } + if m.Height != 0 { + n += 1 + sovQuery(uint64(m.Height)) + } + l = len(m.Codespace) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *ProofOp) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = len(m.Type) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Key) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + l = len(m.Data) + if l > 0 { + n += 1 + l + sovQuery(uint64(l)) + } + return n +} + +func (m *ProofOps) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if len(m.Ops) > 0 { + for _, e := range m.Ops { + l = e.Size() + n += 1 + l + sovQuery(uint64(l)) + } + } + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *GetValidatorSetByHeightRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetValidatorSetByHeightRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetValidatorSetByHeightRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + m.Height = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Height |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetValidatorSetByHeightResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetValidatorSetByHeightResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetValidatorSetByHeightResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockHeight", wireType) + } + m.BlockHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BlockHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validators = append(m.Validators, &Validator{}) + if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetLatestValidatorSetRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetLatestValidatorSetRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetLatestValidatorSetRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageRequest{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetLatestValidatorSetResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetLatestValidatorSetResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetLatestValidatorSetResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockHeight", wireType) + } + m.BlockHeight = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BlockHeight |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Validators", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Validators = append(m.Validators, &Validator{}) + if err := m.Validators[len(m.Validators)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Pagination", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Pagination == nil { + m.Pagination = &query.PageResponse{} + } + if err := m.Pagination.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Validator) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Validator: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Validator: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Address", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Address = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PubKey", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PubKey == nil { + m.PubKey = &any.Any{} + } + if err := m.PubKey.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field VotingPower", wireType) + } + m.VotingPower = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.VotingPower |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ProposerPriority", wireType) + } + m.ProposerPriority = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.ProposerPriority |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetBlockByHeightRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetBlockByHeightRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetBlockByHeightRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + m.Height = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Height |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetBlockByHeightResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetBlockByHeightResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetBlockByHeightResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.BlockId == nil { + m.BlockId = &v1.BlockID{} + } + if err := m.BlockId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Block", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Block == nil { + m.Block = &v1.Block{} + } + if err := m.Block.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SdkBlock", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SdkBlock == nil { + m.SdkBlock = &Block{} + } + if err := m.SdkBlock.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetLatestBlockRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetLatestBlockRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetLatestBlockRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetLatestBlockResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetLatestBlockResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetLatestBlockResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.BlockId == nil { + m.BlockId = &v1.BlockID{} + } + if err := m.BlockId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Block", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.Block == nil { + m.Block = &v1.Block{} + } + if err := m.Block.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SdkBlock", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SdkBlock == nil { + m.SdkBlock = &Block{} + } + if err := m.SdkBlock.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetSyncingRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetSyncingRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetSyncingRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetSyncingResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetSyncingResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetSyncingResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Syncing", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Syncing = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetNodeInfoRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetNodeInfoRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetNodeInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *GetNodeInfoResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: GetNodeInfoResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: GetNodeInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DefaultNodeInfo", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.DefaultNodeInfo == nil { + m.DefaultNodeInfo = &v11.DefaultNodeInfo{} + } + if err := m.DefaultNodeInfo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ApplicationVersion", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ApplicationVersion == nil { + m.ApplicationVersion = &VersionInfo{} + } + if err := m.ApplicationVersion.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *VersionInfo) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: VersionInfo: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: VersionInfo: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Name", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Name = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppName", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppName = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GitCommit", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GitCommit = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BuildTags", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BuildTags = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field GoVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.GoVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BuildDeps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.BuildDeps = append(m.BuildDeps, &Module{}) + if err := m.BuildDeps[len(m.BuildDeps)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CosmosSdkVersion", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.CosmosSdkVersion = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Module) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Module: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Module: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Version = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Sum", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Sum = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ABCIQueryRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ABCIQueryRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ABCIQueryRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Path", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Path = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + m.Height = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Height |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Prove", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + v |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + m.Prove = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ABCIQueryResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ABCIQueryResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ABCIQueryResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Code", wireType) + } + m.Code = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Code |= uint32(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Log", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Log = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Info", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Info = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Index", wireType) + } + m.Index = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Index |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) + if m.Key == nil { + m.Key = []byte{} + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Value", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Value = append(m.Value[:0], dAtA[iNdEx:postIndex]...) + if m.Value == nil { + m.Value = []byte{} + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProofOps", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.ProofOps == nil { + m.ProofOps = &ProofOps{} + } + if err := m.ProofOps.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + m.Height = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Height |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Codespace", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Codespace = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProofOp) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ProofOp: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProofOp: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Type", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Type = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Key", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Key = append(m.Key[:0], dAtA[iNdEx:postIndex]...) + if m.Key == nil { + m.Key = []byte{} + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Data = append(m.Data[:0], dAtA[iNdEx:postIndex]...) + if m.Data == nil { + m.Data = []byte{} + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *ProofOps) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: ProofOps: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: ProofOps: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Ops", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.Ops = append(m.Ops, ProofOp{}) + if err := m.Ops[len(m.Ops)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipQuery(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowQuery + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthQuery + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupQuery + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthQuery + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthQuery = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowQuery = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupQuery = fmt.Errorf("proto: unexpected end of group") +) diff --git a/server/v2/cometbft/client/grpc/cmtservice/query.pb.gw.go b/server/v2/cometbft/client/grpc/cmtservice/query.pb.gw.go new file mode 100644 index 000000000000..e169618c93c8 --- /dev/null +++ b/server/v2/cometbft/client/grpc/cmtservice/query.pb.gw.go @@ -0,0 +1,669 @@ +// Code generated by protoc-gen-grpc-gateway. DO NOT EDIT. +// source: cosmos/base/tendermint/v1beta1/query.proto + +/* +Package cmtservice is a reverse proxy. + +It translates gRPC into RESTful JSON APIs. +*/ +package cmtservice + +import ( + "context" + "io" + "net/http" + + "github.com/golang/protobuf/descriptor" + "github.com/golang/protobuf/proto" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "github.com/grpc-ecosystem/grpc-gateway/utilities" + "google.golang.org/grpc" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/grpclog" + "google.golang.org/grpc/metadata" + "google.golang.org/grpc/status" +) + +// Suppress "imported and not used" errors +var _ codes.Code +var _ io.Reader +var _ status.Status +var _ = runtime.String +var _ = utilities.NewDoubleArray +var _ = descriptor.ForMessage +var _ = metadata.Join + +func request_Service_GetNodeInfo_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetNodeInfoRequest + var metadata runtime.ServerMetadata + + msg, err := client.GetNodeInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Service_GetNodeInfo_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetNodeInfoRequest + var metadata runtime.ServerMetadata + + msg, err := server.GetNodeInfo(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Service_GetSyncing_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetSyncingRequest + var metadata runtime.ServerMetadata + + msg, err := client.GetSyncing(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Service_GetSyncing_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetSyncingRequest + var metadata runtime.ServerMetadata + + msg, err := server.GetSyncing(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Service_GetLatestBlock_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetLatestBlockRequest + var metadata runtime.ServerMetadata + + msg, err := client.GetLatestBlock(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Service_GetLatestBlock_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetLatestBlockRequest + var metadata runtime.ServerMetadata + + msg, err := server.GetLatestBlock(ctx, &protoReq) + return msg, metadata, err + +} + +func request_Service_GetBlockByHeight_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetBlockByHeightRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["height"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "height") + } + + protoReq.Height, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "height", err) + } + + msg, err := client.GetBlockByHeight(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Service_GetBlockByHeight_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetBlockByHeightRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["height"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "height") + } + + protoReq.Height, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "height", err) + } + + msg, err := server.GetBlockByHeight(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Service_GetLatestValidatorSet_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Service_GetLatestValidatorSet_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetLatestValidatorSetRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Service_GetLatestValidatorSet_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetLatestValidatorSet(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Service_GetLatestValidatorSet_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetLatestValidatorSetRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Service_GetLatestValidatorSet_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetLatestValidatorSet(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Service_GetValidatorSetByHeight_0 = &utilities.DoubleArray{Encoding: map[string]int{"height": 0}, Base: []int{1, 1, 0}, Check: []int{0, 1, 2}} +) + +func request_Service_GetValidatorSetByHeight_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetValidatorSetByHeightRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["height"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "height") + } + + protoReq.Height, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "height", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Service_GetValidatorSetByHeight_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.GetValidatorSetByHeight(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Service_GetValidatorSetByHeight_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq GetValidatorSetByHeightRequest + var metadata runtime.ServerMetadata + + var ( + val string + ok bool + err error + _ = err + ) + + val, ok = pathParams["height"] + if !ok { + return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "height") + } + + protoReq.Height, err = runtime.Int64(val) + + if err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "height", err) + } + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Service_GetValidatorSetByHeight_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.GetValidatorSetByHeight(ctx, &protoReq) + return msg, metadata, err + +} + +var ( + filter_Service_ABCIQuery_0 = &utilities.DoubleArray{Encoding: map[string]int{}, Base: []int(nil), Check: []int(nil)} +) + +func request_Service_ABCIQuery_0(ctx context.Context, marshaler runtime.Marshaler, client ServiceClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABCIQueryRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Service_ABCIQuery_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := client.ABCIQuery(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Service_ABCIQuery_0(ctx context.Context, marshaler runtime.Marshaler, server ServiceServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq ABCIQueryRequest + var metadata runtime.ServerMetadata + + if err := req.ParseForm(); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + if err := runtime.PopulateQueryParameters(&protoReq, req.Form, filter_Service_ABCIQuery_0); err != nil { + return nil, metadata, status.Errorf(codes.InvalidArgument, "%v", err) + } + + msg, err := server.ABCIQuery(ctx, &protoReq) + return msg, metadata, err + +} + +// RegisterServiceHandlerServer registers the http handlers for service Service to "mux". +// UnaryRPC :call ServiceServer directly. +// StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. +// Note that using this registration option will cause many gRPC library features to stop working. Consider using RegisterServiceHandlerFromEndpoint instead. +func RegisterServiceHandlerServer(ctx context.Context, mux *runtime.ServeMux, server ServiceServer) error { + + mux.Handle("GET", pattern_Service_GetNodeInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Service_GetNodeInfo_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetNodeInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_GetSyncing_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Service_GetSyncing_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetSyncing_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_GetLatestBlock_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Service_GetLatestBlock_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetLatestBlock_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_GetBlockByHeight_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Service_GetBlockByHeight_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetBlockByHeight_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_GetLatestValidatorSet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Service_GetLatestValidatorSet_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetLatestValidatorSet_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_GetValidatorSetByHeight_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Service_GetValidatorSetByHeight_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetValidatorSetByHeight_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_ABCIQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Service_ABCIQuery_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_ABCIQuery_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +// RegisterServiceHandlerFromEndpoint is same as RegisterServiceHandler but +// automatically dials to "endpoint" and closes the connection when "ctx" gets done. +func RegisterServiceHandlerFromEndpoint(ctx context.Context, mux *runtime.ServeMux, endpoint string, opts []grpc.DialOption) (err error) { + conn, err := grpc.Dial(endpoint, opts...) + if err != nil { + return err + } + defer func() { + if err != nil { + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + return + } + go func() { + <-ctx.Done() + if cerr := conn.Close(); cerr != nil { + grpclog.Infof("Failed to close conn to %s: %v", endpoint, cerr) + } + }() + }() + + return RegisterServiceHandler(ctx, mux, conn) +} + +// RegisterServiceHandler registers the http handlers for service Service to "mux". +// The handlers forward requests to the grpc endpoint over "conn". +func RegisterServiceHandler(ctx context.Context, mux *runtime.ServeMux, conn *grpc.ClientConn) error { + return RegisterServiceHandlerClient(ctx, mux, NewServiceClient(conn)) +} + +// RegisterServiceHandlerClient registers the http handlers for service Service +// to "mux". The handlers forward requests to the grpc endpoint over the given implementation of "ServiceClient". +// Note: the gRPC framework executes interceptors within the gRPC handler. If the passed in "ServiceClient" +// doesn't go through the normal gRPC flow (creating a gRPC client etc.) then it will be up to the passed in +// "ServiceClient" to call the correct interceptors. +func RegisterServiceHandlerClient(ctx context.Context, mux *runtime.ServeMux, client ServiceClient) error { + + mux.Handle("GET", pattern_Service_GetNodeInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Service_GetNodeInfo_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetNodeInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_GetSyncing_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Service_GetSyncing_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetSyncing_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_GetLatestBlock_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Service_GetLatestBlock_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetLatestBlock_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_GetBlockByHeight_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Service_GetBlockByHeight_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetBlockByHeight_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_GetLatestValidatorSet_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Service_GetLatestValidatorSet_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetLatestValidatorSet_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_GetValidatorSetByHeight_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Service_GetValidatorSetByHeight_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_GetValidatorSetByHeight_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + mux.Handle("GET", pattern_Service_ABCIQuery_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Service_ABCIQuery_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Service_ABCIQuery_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + + return nil +} + +var ( + pattern_Service_GetNodeInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"cosmos", "base", "tendermint", "v1beta1", "node_info"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Service_GetSyncing_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"cosmos", "base", "tendermint", "v1beta1", "syncing"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Service_GetLatestBlock_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"cosmos", "base", "tendermint", "v1beta1", "blocks", "latest"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Service_GetBlockByHeight_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"cosmos", "base", "tendermint", "v1beta1", "blocks", "height"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Service_GetLatestValidatorSet_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 2, 5}, []string{"cosmos", "base", "tendermint", "v1beta1", "validatorsets", "latest"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Service_GetValidatorSetByHeight_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"cosmos", "base", "tendermint", "v1beta1", "validatorsets", "height"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Service_ABCIQuery_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 2, 3, 2, 4}, []string{"cosmos", "base", "tendermint", "v1beta1", "abci_query"}, "", runtime.AssumeColonVerbOpt(false))) +) + +var ( + forward_Service_GetNodeInfo_0 = runtime.ForwardResponseMessage + + forward_Service_GetSyncing_0 = runtime.ForwardResponseMessage + + forward_Service_GetLatestBlock_0 = runtime.ForwardResponseMessage + + forward_Service_GetBlockByHeight_0 = runtime.ForwardResponseMessage + + forward_Service_GetLatestValidatorSet_0 = runtime.ForwardResponseMessage + + forward_Service_GetValidatorSetByHeight_0 = runtime.ForwardResponseMessage + + forward_Service_ABCIQuery_0 = runtime.ForwardResponseMessage +) diff --git a/server/v2/cometbft/client/grpc/cmtservice/service.go b/server/v2/cometbft/client/grpc/cmtservice/service.go new file mode 100644 index 000000000000..02555d719574 --- /dev/null +++ b/server/v2/cometbft/client/grpc/cmtservice/service.go @@ -0,0 +1,312 @@ +package cmtservice + +import ( + "context" + "fmt" + "strings" + + abci "github.com/cometbft/cometbft/abci/types" + coretypes "github.com/cometbft/cometbft/rpc/core/types" + gogogrpc "github.com/cosmos/gogoproto/grpc" + "github.com/grpc-ecosystem/grpc-gateway/runtime" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" + + "cosmossdk.io/server/v2/cometbft/client/rpc" + + codectypes "github.com/cosmos/cosmos-sdk/codec/types" + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" + sdk "github.com/cosmos/cosmos-sdk/types" + qtypes "github.com/cosmos/cosmos-sdk/types/query" + "github.com/cosmos/cosmos-sdk/version" +) + +var ( + _ ServiceServer = queryServer{} + _ codectypes.UnpackInterfacesMessage = &GetLatestValidatorSetResponse{} +) + +type ( + abciQueryFn = func(context.Context, *abci.QueryRequest) (*abci.QueryResponse, error) + + queryServer struct { + client rpc.CometRPC + queryFn abciQueryFn + } +) + +// NewQueryServer creates a new CometBFT query server. +func NewQueryServer( + client rpc.CometRPC, + queryFn abciQueryFn, +) ServiceServer { + return queryServer{ + queryFn: queryFn, + client: client, + } +} + +// GetNodeStatus returns the status of the node. +func (s queryServer) GetNodeStatus(ctx context.Context) (*coretypes.ResultStatus, error) { + return s.client.Status(ctx) +} + +// GetSyncing implements ServiceServer.GetSyncing +func (s queryServer) GetSyncing(ctx context.Context, _ *GetSyncingRequest) (*GetSyncingResponse, error) { + status, err := s.client.Status(ctx) + if err != nil { + return nil, err + } + + return &GetSyncingResponse{ + Syncing: status.SyncInfo.CatchingUp, + }, nil +} + +// GetLatestBlock implements ServiceServer.GetLatestBlock +func (s queryServer) GetLatestBlock(ctx context.Context, _ *GetLatestBlockRequest) (*GetLatestBlockResponse, error) { + block, err := s.client.Block(ctx, nil) + if err != nil { + return nil, err + } + + protoBlockID := block.BlockID.ToProto() + protoBlock, err := block.Block.ToProto() + if err != nil { + return nil, err + } + + return &GetLatestBlockResponse{ + BlockId: &protoBlockID, + Block: protoBlock, + SdkBlock: convertBlock(protoBlock), + }, nil +} + +// GetBlockByHeight implements ServiceServer.GetBlockByHeight +func (s queryServer) GetBlockByHeight( + ctx context.Context, + req *GetBlockByHeightRequest, +) (*GetBlockByHeightResponse, error) { + nodeStatus, err := s.client.Status(ctx) + if err != nil { + return nil, err + } + + blockHeight := nodeStatus.SyncInfo.LatestBlockHeight + + if req.Height > blockHeight { + return nil, status.Error(codes.InvalidArgument, "requested block height is bigger then the chain length") + } + + b, err := s.client.Block(ctx, &req.Height) + if err != nil { + return nil, err + } + + protoBlockID := b.BlockID.ToProto() + protoBlock, err := b.Block.ToProto() + if err != nil { + return nil, err + } + + return &GetBlockByHeightResponse{ + BlockId: &protoBlockID, + Block: protoBlock, + SdkBlock: convertBlock(protoBlock), + }, nil +} + +// GetLatestValidatorSet implements ServiceServer.GetLatestValidatorSet +func (s queryServer) GetLatestValidatorSet( + ctx context.Context, + req *GetLatestValidatorSetRequest, +) (*GetLatestValidatorSetResponse, error) { + page, limit, err := qtypes.ParsePagination(req.Pagination) + if err != nil { + return nil, err + } + + return ValidatorsOutput(ctx, s.client, nil, page, limit) +} + +func (m *GetLatestValidatorSetResponse) UnpackInterfaces(unpacker codectypes.AnyUnpacker) error { + var pubKey cryptotypes.PubKey + for _, val := range m.Validators { + err := unpacker.UnpackAny(val.PubKey, &pubKey) + if err != nil { + return err + } + } + + return nil +} + +// GetValidatorSetByHeight implements ServiceServer.GetValidatorSetByHeight +func (s queryServer) GetValidatorSetByHeight( + ctx context.Context, + req *GetValidatorSetByHeightRequest, +) (*GetValidatorSetByHeightResponse, error) { + page, limit, err := qtypes.ParsePagination(req.Pagination) + if err != nil { + return nil, err + } + + nodeStatus, err := s.client.Status(ctx) + if err != nil { + return nil, err + } + + blockHeight := nodeStatus.SyncInfo.LatestBlockHeight + + if req.Height > blockHeight { + return nil, status.Error(codes.InvalidArgument, "requested block height is bigger then the chain length") + } + + r, err := ValidatorsOutput(ctx, s.client, &req.Height, page, limit) + if err != nil { + return nil, err + } + + return &GetValidatorSetByHeightResponse{ + BlockHeight: r.BlockHeight, + Validators: r.Validators, + Pagination: r.Pagination, + }, nil +} + +func ValidatorsOutput( + ctx context.Context, + client rpc.CometRPC, + height *int64, + page, limit int, +) (*GetLatestValidatorSetResponse, error) { + vs, err := client.Validators(ctx, height, &page, &limit) + if err != nil { + return nil, err + } + + resp := GetLatestValidatorSetResponse{ + BlockHeight: vs.BlockHeight, + Validators: make([]*Validator, len(vs.Validators)), + Pagination: &qtypes.PageResponse{ + Total: uint64(vs.Total), + }, + } + + for i, v := range vs.Validators { + pk, err := cryptocodec.FromCmtPubKeyInterface(v.PubKey) + if err != nil { + return nil, err + } + anyPub, err := codectypes.NewAnyWithValue(pk) + if err != nil { + return nil, err + } + + resp.Validators[i] = &Validator{ + Address: sdk.ConsAddress(v.Address).String(), + ProposerPriority: v.ProposerPriority, + PubKey: anyPub, + VotingPower: v.VotingPower, + } + } + + return &resp, nil +} + +// GetNodeInfo implements ServiceServer.GetNodeInfo +func (s queryServer) GetNodeInfo(ctx context.Context, _ *GetNodeInfoRequest) (*GetNodeInfoResponse, error) { + nodeStatus, err := s.client.Status(ctx) + if err != nil { + return nil, err + } + + protoNodeInfo := nodeStatus.NodeInfo.ToProto() + nodeInfo := version.NewInfo() + + deps := make([]*Module, len(nodeInfo.BuildDeps)) + + for i, dep := range nodeInfo.BuildDeps { + deps[i] = &Module{ + Path: dep.Path, + Sum: dep.Sum, + Version: dep.Version, + } + } + + resp := GetNodeInfoResponse{ + DefaultNodeInfo: protoNodeInfo, + ApplicationVersion: &VersionInfo{ + AppName: nodeInfo.AppName, + Name: nodeInfo.Name, + GitCommit: nodeInfo.GitCommit, + GoVersion: nodeInfo.GoVersion, + Version: nodeInfo.Version, + BuildTags: nodeInfo.BuildTags, + BuildDeps: deps, + CosmosSdkVersion: nodeInfo.CosmosSdkVersion, + }, + } + return &resp, nil +} + +func (s queryServer) ABCIQuery(ctx context.Context, req *ABCIQueryRequest) (*ABCIQueryResponse, error) { + if s.queryFn == nil { + return nil, status.Error(codes.Internal, "ABCI Query handler undefined") + } + if req == nil { + return nil, status.Error(codes.InvalidArgument, "empty request") + } + if len(req.Path) == 0 { + return nil, status.Error(codes.InvalidArgument, "empty query path") + } + + if path := SplitABCIQueryPath(req.Path); len(path) > 0 { + switch path[0] { + case "app", "store", "p2p", "custom": // TODO: check if we can use the ones from abci.go without having circular deps. + return nil, status.Error(codes.InvalidArgument, fmt.Sprintf("ABCI query path not yet implemented: %s", req.Path)) + + default: + // Otherwise, error as to prevent either valid gRPC service requests or + // bogus ABCI queries. + return nil, status.Errorf(codes.InvalidArgument, "unsupported ABCI query path: %s", req.Path) + } + } + + res, err := s.queryFn(ctx, req.ToABCIRequestQuery()) + if err != nil { + return nil, err + } + return FromABCIResponseQuery(res), nil +} + +// RegisterTendermintService registers the CometBFT queries on the gRPC router. +func RegisterTendermintService( + client rpc.CometRPC, + server gogogrpc.Server, + queryFn abciQueryFn, +) { + RegisterServiceServer(server, NewQueryServer(client, queryFn)) +} + +// RegisterGRPCGatewayRoutes mounts the CometBFT service's GRPC-gateway routes on the +// given Mux. +func RegisterGRPCGatewayRoutes(clientConn gogogrpc.ClientConn, mux *runtime.ServeMux) { + _ = RegisterServiceHandlerClient(context.Background(), mux, NewServiceClient(clientConn)) +} + +// SplitABCIQueryPath splits a string path using the delimiter '/'. +// +// e.g. "this/is/funny" becomes []string{"this", "is", "funny"} +func SplitABCIQueryPath(requestPath string) (path []string) { + path = strings.Split(requestPath, "/") + + // first element is empty string + if len(path) > 0 && path[0] == "" { + path = path[1:] + } + + return path +} diff --git a/server/v2/cometbft/client/grpc/cmtservice/types.go b/server/v2/cometbft/client/grpc/cmtservice/types.go new file mode 100644 index 000000000000..a94c0fd8ba8d --- /dev/null +++ b/server/v2/cometbft/client/grpc/cmtservice/types.go @@ -0,0 +1,47 @@ +package cmtservice + +import ( + abci "github.com/cometbft/cometbft/abci/types" +) + +// ToABCIRequestQuery converts a gRPC ABCIQueryRequest type to an ABCI +// RequestQuery type. +func (req *ABCIQueryRequest) ToABCIRequestQuery() *abci.QueryRequest { + return &abci.QueryRequest{ + Data: req.Data, + Path: req.Path, + Height: req.Height, + Prove: req.Prove, + } +} + +// FromABCIResponseQuery converts an ABCI ResponseQuery type to a gRPC +// ABCIQueryResponse type. +func FromABCIResponseQuery(res *abci.QueryResponse) *ABCIQueryResponse { + var proofOps *ProofOps + + if res.ProofOps != nil { + proofOps = &ProofOps{ + Ops: make([]ProofOp, len(res.ProofOps.Ops)), + } + for i, proofOp := range res.ProofOps.Ops { + proofOps.Ops[i] = ProofOp{ + Type: proofOp.Type, + Key: proofOp.Key, + Data: proofOp.Data, + } + } + } + + return &ABCIQueryResponse{ + Code: res.Code, + Log: res.Log, + Info: res.Info, + Index: res.Index, + Key: res.Key, + Value: res.Value, + ProofOps: proofOps, + Height: res.Height, + Codespace: res.Codespace, + } +} diff --git a/server/v2/cometbft/client/grpc/cmtservice/types.pb.go b/server/v2/cometbft/client/grpc/cmtservice/types.pb.go new file mode 100644 index 000000000000..6d1a3cbb607c --- /dev/null +++ b/server/v2/cometbft/client/grpc/cmtservice/types.pb.go @@ -0,0 +1,1371 @@ +// Code generated by protoc-gen-gogo. DO NOT EDIT. +// source: cosmos/base/tendermint/v1beta1/types.proto + +package cmtservice + +import ( + fmt "fmt" + v1 "github.com/cometbft/cometbft/api/cometbft/types/v1" + v11 "github.com/cometbft/cometbft/api/cometbft/version/v1" + _ "github.com/cosmos/cosmos-sdk/types/tx/amino" + _ "github.com/cosmos/gogoproto/gogoproto" + proto "github.com/cosmos/gogoproto/proto" + github_com_cosmos_gogoproto_types "github.com/cosmos/gogoproto/types" + _ "google.golang.org/protobuf/types/known/timestamppb" + io "io" + math "math" + math_bits "math/bits" + time "time" +) + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf +var _ = time.Kitchen + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.GoGoProtoPackageIsVersion3 // please upgrade the proto package + +// Block is tendermint type Block, with the Header proposer address +// field converted to bech32 string. +type Block struct { + Header Header `protobuf:"bytes,1,opt,name=header,proto3" json:"header"` + Data v1.Data `protobuf:"bytes,2,opt,name=data,proto3" json:"data"` + Evidence v1.EvidenceList `protobuf:"bytes,3,opt,name=evidence,proto3" json:"evidence"` + LastCommit *v1.Commit `protobuf:"bytes,4,opt,name=last_commit,json=lastCommit,proto3" json:"last_commit,omitempty"` +} + +func (m *Block) Reset() { *m = Block{} } +func (m *Block) String() string { return proto.CompactTextString(m) } +func (*Block) ProtoMessage() {} +func (*Block) Descriptor() ([]byte, []int) { + return fileDescriptor_bb9931519c08e0d6, []int{0} +} +func (m *Block) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Block) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Block.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Block) XXX_Merge(src proto.Message) { + xxx_messageInfo_Block.Merge(m, src) +} +func (m *Block) XXX_Size() int { + return m.Size() +} +func (m *Block) XXX_DiscardUnknown() { + xxx_messageInfo_Block.DiscardUnknown(m) +} + +var xxx_messageInfo_Block proto.InternalMessageInfo + +func (m *Block) GetHeader() Header { + if m != nil { + return m.Header + } + return Header{} +} + +func (m *Block) GetData() v1.Data { + if m != nil { + return m.Data + } + return v1.Data{} +} + +func (m *Block) GetEvidence() v1.EvidenceList { + if m != nil { + return m.Evidence + } + return v1.EvidenceList{} +} + +func (m *Block) GetLastCommit() *v1.Commit { + if m != nil { + return m.LastCommit + } + return nil +} + +// Header defines the structure of a Tendermint block header. +type Header struct { + // basic block info + Version v11.Consensus `protobuf:"bytes,1,opt,name=version,proto3" json:"version"` + ChainID string `protobuf:"bytes,2,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Height int64 `protobuf:"varint,3,opt,name=height,proto3" json:"height,omitempty"` + Time time.Time `protobuf:"bytes,4,opt,name=time,proto3,stdtime" json:"time"` + // prev block info + LastBlockId v1.BlockID `protobuf:"bytes,5,opt,name=last_block_id,json=lastBlockId,proto3" json:"last_block_id"` + // hashes of block data + LastCommitHash []byte `protobuf:"bytes,6,opt,name=last_commit_hash,json=lastCommitHash,proto3" json:"last_commit_hash,omitempty"` + DataHash []byte `protobuf:"bytes,7,opt,name=data_hash,json=dataHash,proto3" json:"data_hash,omitempty"` + // hashes from the app output from the prev block + ValidatorsHash []byte `protobuf:"bytes,8,opt,name=validators_hash,json=validatorsHash,proto3" json:"validators_hash,omitempty"` + NextValidatorsHash []byte `protobuf:"bytes,9,opt,name=next_validators_hash,json=nextValidatorsHash,proto3" json:"next_validators_hash,omitempty"` + ConsensusHash []byte `protobuf:"bytes,10,opt,name=consensus_hash,json=consensusHash,proto3" json:"consensus_hash,omitempty"` + AppHash []byte `protobuf:"bytes,11,opt,name=app_hash,json=appHash,proto3" json:"app_hash,omitempty"` + LastResultsHash []byte `protobuf:"bytes,12,opt,name=last_results_hash,json=lastResultsHash,proto3" json:"last_results_hash,omitempty"` + // consensus info + EvidenceHash []byte `protobuf:"bytes,13,opt,name=evidence_hash,json=evidenceHash,proto3" json:"evidence_hash,omitempty"` + // proposer_address is the original block proposer address, formatted as a Bech32 string. + // In Tendermint, this type is `bytes`, but in the SDK, we convert it to a Bech32 string + // for better UX. + ProposerAddress string `protobuf:"bytes,14,opt,name=proposer_address,json=proposerAddress,proto3" json:"proposer_address,omitempty"` +} + +func (m *Header) Reset() { *m = Header{} } +func (m *Header) String() string { return proto.CompactTextString(m) } +func (*Header) ProtoMessage() {} +func (*Header) Descriptor() ([]byte, []int) { + return fileDescriptor_bb9931519c08e0d6, []int{1} +} +func (m *Header) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_Header.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *Header) XXX_Merge(src proto.Message) { + xxx_messageInfo_Header.Merge(m, src) +} +func (m *Header) XXX_Size() int { + return m.Size() +} +func (m *Header) XXX_DiscardUnknown() { + xxx_messageInfo_Header.DiscardUnknown(m) +} + +var xxx_messageInfo_Header proto.InternalMessageInfo + +func (m *Header) GetVersion() v11.Consensus { + if m != nil { + return m.Version + } + return v11.Consensus{} +} + +func (m *Header) GetChainID() string { + if m != nil { + return m.ChainID + } + return "" +} + +func (m *Header) GetHeight() int64 { + if m != nil { + return m.Height + } + return 0 +} + +func (m *Header) GetTime() time.Time { + if m != nil { + return m.Time + } + return time.Time{} +} + +func (m *Header) GetLastBlockId() v1.BlockID { + if m != nil { + return m.LastBlockId + } + return v1.BlockID{} +} + +func (m *Header) GetLastCommitHash() []byte { + if m != nil { + return m.LastCommitHash + } + return nil +} + +func (m *Header) GetDataHash() []byte { + if m != nil { + return m.DataHash + } + return nil +} + +func (m *Header) GetValidatorsHash() []byte { + if m != nil { + return m.ValidatorsHash + } + return nil +} + +func (m *Header) GetNextValidatorsHash() []byte { + if m != nil { + return m.NextValidatorsHash + } + return nil +} + +func (m *Header) GetConsensusHash() []byte { + if m != nil { + return m.ConsensusHash + } + return nil +} + +func (m *Header) GetAppHash() []byte { + if m != nil { + return m.AppHash + } + return nil +} + +func (m *Header) GetLastResultsHash() []byte { + if m != nil { + return m.LastResultsHash + } + return nil +} + +func (m *Header) GetEvidenceHash() []byte { + if m != nil { + return m.EvidenceHash + } + return nil +} + +func (m *Header) GetProposerAddress() string { + if m != nil { + return m.ProposerAddress + } + return "" +} + +func init() { + proto.RegisterType((*Block)(nil), "cosmos.base.tendermint.v1beta1.Block") + proto.RegisterType((*Header)(nil), "cosmos.base.tendermint.v1beta1.Header") +} + +func init() { + proto.RegisterFile("cosmos/base/tendermint/v1beta1/types.proto", fileDescriptor_bb9931519c08e0d6) +} + +var fileDescriptor_bb9931519c08e0d6 = []byte{ + // 654 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x94, 0xcb, 0x6e, 0xd3, 0x40, + 0x14, 0x86, 0xe3, 0x36, 0xcd, 0x65, 0xd2, 0xf4, 0x62, 0x55, 0x90, 0x06, 0xe1, 0x54, 0x45, 0x94, + 0x52, 0x09, 0x0f, 0xa5, 0x12, 0x0b, 0x24, 0x16, 0xa4, 0x05, 0x35, 0x12, 0x6c, 0x2c, 0xc4, 0x82, + 0x4d, 0x34, 0xb6, 0xa7, 0xf6, 0xa8, 0xb1, 0xc7, 0xf2, 0x4c, 0x2c, 0x78, 0x09, 0xd4, 0xc7, 0x60, + 0xc9, 0x63, 0x74, 0xd9, 0x25, 0xab, 0x82, 0xd2, 0x05, 0x8f, 0xc0, 0x16, 0xcd, 0x99, 0x71, 0x92, + 0x5e, 0xc4, 0x26, 0xb1, 0xff, 0xf3, 0x9d, 0x3f, 0x73, 0xfe, 0x33, 0x0a, 0xda, 0x0b, 0xb8, 0x48, + 0xb8, 0xc0, 0x3e, 0x11, 0x14, 0x4b, 0x9a, 0x86, 0x34, 0x4f, 0x58, 0x2a, 0x71, 0xb1, 0xef, 0x53, + 0x49, 0xf6, 0xb1, 0xfc, 0x9a, 0x51, 0xe1, 0x66, 0x39, 0x97, 0xdc, 0x76, 0x34, 0xeb, 0x2a, 0xd6, + 0x9d, 0xb1, 0xae, 0x61, 0xbb, 0x1b, 0x11, 0x8f, 0x38, 0xa0, 0x58, 0x3d, 0xe9, 0xae, 0xee, 0xc3, + 0x80, 0x27, 0x54, 0xfa, 0x27, 0x52, 0x7b, 0xe1, 0xe2, 0x9a, 0x69, 0x77, 0xeb, 0x76, 0x99, 0x16, + 0x2c, 0xa4, 0x69, 0x40, 0x0d, 0xd1, 0x9b, 0x12, 0x05, 0xcd, 0x05, 0xe3, 0xe9, 0x4d, 0x8b, 0x5e, + 0xc4, 0x79, 0x34, 0xa2, 0x18, 0xde, 0xfc, 0xf1, 0x09, 0x96, 0x2c, 0xa1, 0x42, 0x92, 0x24, 0x33, + 0xc0, 0x3a, 0x49, 0x58, 0xca, 0x31, 0x7c, 0x6a, 0x69, 0xfb, 0xdb, 0x02, 0x5a, 0xea, 0x8f, 0x78, + 0x70, 0x6a, 0x0f, 0x50, 0x2d, 0xa6, 0x24, 0xa4, 0x79, 0xc7, 0xda, 0xb2, 0x76, 0x5b, 0x2f, 0x76, + 0xdc, 0xff, 0x8f, 0xe9, 0x1e, 0x03, 0xdd, 0x6f, 0x9e, 0x5f, 0xf6, 0x2a, 0xdf, 0xff, 0xfc, 0xd8, + 0xb3, 0x3c, 0x63, 0x60, 0xbf, 0x44, 0xd5, 0x90, 0x48, 0xd2, 0x59, 0x00, 0xa3, 0xfb, 0x6e, 0x79, + 0x70, 0x57, 0x9f, 0xb6, 0xd8, 0x77, 0x8f, 0x88, 0x24, 0xf3, 0x9d, 0xc0, 0xdb, 0xef, 0x50, 0xa3, + 0x9c, 0xb9, 0xb3, 0x08, 0xbd, 0xbd, 0x3b, 0x7a, 0xdf, 0x1a, 0xe4, 0x3d, 0x13, 0x72, 0xde, 0x63, + 0xda, 0x6b, 0xbf, 0x42, 0xad, 0x11, 0x11, 0x72, 0x18, 0xf0, 0x24, 0x61, 0xb2, 0x53, 0x05, 0xab, + 0xcd, 0x3b, 0xac, 0x0e, 0x01, 0xf0, 0x90, 0xa2, 0xf5, 0xf3, 0xf6, 0xdf, 0x2a, 0xaa, 0xe9, 0xc9, + 0xec, 0x43, 0x54, 0x37, 0x49, 0x9b, 0x48, 0x9c, 0x99, 0x85, 0x29, 0x68, 0x93, 0x54, 0xd0, 0x54, + 0x8c, 0xc5, 0xfc, 0x61, 0xca, 0x4e, 0x7b, 0x07, 0x35, 0x82, 0x98, 0xb0, 0x74, 0xc8, 0x42, 0xc8, + 0xa3, 0xd9, 0x6f, 0x4d, 0x2e, 0x7b, 0xf5, 0x43, 0xa5, 0x0d, 0x8e, 0xbc, 0x3a, 0x14, 0x07, 0xa1, + 0x7d, 0x4f, 0xc5, 0xcf, 0xa2, 0x58, 0xc2, 0xe4, 0x8b, 0x9e, 0x79, 0xb3, 0x5f, 0xa3, 0xaa, 0x5a, + 0xa3, 0x19, 0xa2, 0xeb, 0xea, 0x1d, 0xbb, 0xe5, 0x8e, 0xdd, 0x8f, 0xe5, 0x8e, 0xfb, 0x6d, 0xf5, + 0xeb, 0x67, 0xbf, 0x7a, 0x96, 0x89, 0x54, 0xb5, 0xd9, 0x03, 0xd4, 0x86, 0x28, 0x7c, 0xb5, 0x63, + 0x75, 0x86, 0x25, 0xe3, 0x73, 0x3b, 0x0c, 0xb8, 0x06, 0x83, 0xa3, 0xf9, 0x29, 0x20, 0x46, 0xad, + 0x87, 0xf6, 0x2e, 0x5a, 0x9b, 0x4b, 0x75, 0x18, 0x13, 0x11, 0x77, 0x6a, 0x5b, 0xd6, 0xee, 0xb2, + 0xb7, 0x32, 0xcb, 0xef, 0x98, 0x88, 0xd8, 0x7e, 0x80, 0x9a, 0x6a, 0x9f, 0x1a, 0xa9, 0x03, 0xd2, + 0x50, 0x02, 0x14, 0x9f, 0xa0, 0xd5, 0x82, 0x8c, 0x58, 0x48, 0x24, 0xcf, 0x85, 0x46, 0x1a, 0xda, + 0x65, 0x26, 0x03, 0xf8, 0x1c, 0x6d, 0xa4, 0xf4, 0x8b, 0x1c, 0xde, 0xa4, 0x9b, 0x40, 0xdb, 0xaa, + 0xf6, 0xe9, 0x7a, 0xc7, 0x63, 0xb4, 0x12, 0x94, 0xcb, 0xd0, 0x2c, 0x02, 0xb6, 0x3d, 0x55, 0x01, + 0xdb, 0x44, 0x0d, 0x92, 0x65, 0x1a, 0x68, 0x01, 0x50, 0x27, 0x59, 0x06, 0xa5, 0x3d, 0xb4, 0x0e, + 0x33, 0xe6, 0x54, 0x8c, 0x47, 0xd2, 0x98, 0x2c, 0x03, 0xb3, 0xaa, 0x0a, 0x9e, 0xd6, 0x81, 0x7d, + 0x84, 0xda, 0xe5, 0x8d, 0xd3, 0x5c, 0x1b, 0xb8, 0xe5, 0x52, 0x04, 0xe8, 0x29, 0x5a, 0xcb, 0x72, + 0x9e, 0x71, 0x41, 0xf3, 0x21, 0x09, 0xc3, 0x9c, 0x0a, 0xd1, 0x59, 0x51, 0xd7, 0xc0, 0x5b, 0x2d, + 0xf5, 0x37, 0x5a, 0xee, 0x7f, 0x38, 0x9f, 0x38, 0xd6, 0xc5, 0xc4, 0xb1, 0x7e, 0x4f, 0x1c, 0xeb, + 0xec, 0xca, 0xa9, 0x5c, 0x5c, 0x39, 0x95, 0x9f, 0x57, 0x4e, 0xe5, 0xf3, 0x41, 0xc4, 0x64, 0x3c, + 0xf6, 0xd5, 0xce, 0xb0, 0xf9, 0x9f, 0xd2, 0x5f, 0xcf, 0x44, 0x78, 0x8a, 0x83, 0x11, 0xa3, 0xa9, + 0xc4, 0x51, 0x9e, 0x05, 0x38, 0x48, 0xa4, 0xa0, 0x79, 0xc1, 0x02, 0xea, 0xd7, 0xe0, 0x8a, 0x1c, + 0xfc, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x71, 0x63, 0x17, 0x59, 0xda, 0x04, 0x00, 0x00, +} + +func (m *Block) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Block) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Block) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.LastCommit != nil { + { + size, err := m.LastCommit.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + } + { + size, err := m.Evidence.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size, err := m.Data.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Header.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func (m *Header) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *Header) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *Header) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if len(m.ProposerAddress) > 0 { + i -= len(m.ProposerAddress) + copy(dAtA[i:], m.ProposerAddress) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ProposerAddress))) + i-- + dAtA[i] = 0x72 + } + if len(m.EvidenceHash) > 0 { + i -= len(m.EvidenceHash) + copy(dAtA[i:], m.EvidenceHash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.EvidenceHash))) + i-- + dAtA[i] = 0x6a + } + if len(m.LastResultsHash) > 0 { + i -= len(m.LastResultsHash) + copy(dAtA[i:], m.LastResultsHash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.LastResultsHash))) + i-- + dAtA[i] = 0x62 + } + if len(m.AppHash) > 0 { + i -= len(m.AppHash) + copy(dAtA[i:], m.AppHash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.AppHash))) + i-- + dAtA[i] = 0x5a + } + if len(m.ConsensusHash) > 0 { + i -= len(m.ConsensusHash) + copy(dAtA[i:], m.ConsensusHash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ConsensusHash))) + i-- + dAtA[i] = 0x52 + } + if len(m.NextValidatorsHash) > 0 { + i -= len(m.NextValidatorsHash) + copy(dAtA[i:], m.NextValidatorsHash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.NextValidatorsHash))) + i-- + dAtA[i] = 0x4a + } + if len(m.ValidatorsHash) > 0 { + i -= len(m.ValidatorsHash) + copy(dAtA[i:], m.ValidatorsHash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ValidatorsHash))) + i-- + dAtA[i] = 0x42 + } + if len(m.DataHash) > 0 { + i -= len(m.DataHash) + copy(dAtA[i:], m.DataHash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.DataHash))) + i-- + dAtA[i] = 0x3a + } + if len(m.LastCommitHash) > 0 { + i -= len(m.LastCommitHash) + copy(dAtA[i:], m.LastCommitHash) + i = encodeVarintTypes(dAtA, i, uint64(len(m.LastCommitHash))) + i-- + dAtA[i] = 0x32 + } + { + size, err := m.LastBlockId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x2a + n6, err6 := github_com_cosmos_gogoproto_types.StdTimeMarshalTo(m.Time, dAtA[i-github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time):]) + if err6 != nil { + return 0, err6 + } + i -= n6 + i = encodeVarintTypes(dAtA, i, uint64(n6)) + i-- + dAtA[i] = 0x22 + if m.Height != 0 { + i = encodeVarintTypes(dAtA, i, uint64(m.Height)) + i-- + dAtA[i] = 0x18 + } + if len(m.ChainID) > 0 { + i -= len(m.ChainID) + copy(dAtA[i:], m.ChainID) + i = encodeVarintTypes(dAtA, i, uint64(len(m.ChainID))) + i-- + dAtA[i] = 0x12 + } + { + size, err := m.Version.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintTypes(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintTypes(dAtA []byte, offset int, v uint64) int { + offset -= sovTypes(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *Block) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Header.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.Data.Size() + n += 1 + l + sovTypes(uint64(l)) + l = m.Evidence.Size() + n += 1 + l + sovTypes(uint64(l)) + if m.LastCommit != nil { + l = m.LastCommit.Size() + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + +func (m *Header) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Version.Size() + n += 1 + l + sovTypes(uint64(l)) + l = len(m.ChainID) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + if m.Height != 0 { + n += 1 + sovTypes(uint64(m.Height)) + } + l = github_com_cosmos_gogoproto_types.SizeOfStdTime(m.Time) + n += 1 + l + sovTypes(uint64(l)) + l = m.LastBlockId.Size() + n += 1 + l + sovTypes(uint64(l)) + l = len(m.LastCommitHash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.DataHash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.ValidatorsHash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.NextValidatorsHash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.ConsensusHash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.AppHash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.LastResultsHash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.EvidenceHash) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + l = len(m.ProposerAddress) + if l > 0 { + n += 1 + l + sovTypes(uint64(l)) + } + return n +} + +func sovTypes(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozTypes(x uint64) (n int) { + return sovTypes(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *Block) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Block: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Block: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Header", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Header.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Data", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Data.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Evidence", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Evidence.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastCommit", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.LastCommit == nil { + m.LastCommit = &v1.Commit{} + } + if err := m.LastCommit.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *Header) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: Header: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: Header: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Version", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Version.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ChainID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ChainID = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field Height", wireType) + } + m.Height = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.Height |= int64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Time", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := github_com_cosmos_gogoproto_types.StdTimeUnmarshal(&m.Time, dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastBlockId", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LastBlockId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 6: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastCommitHash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LastCommitHash = append(m.LastCommitHash[:0], dAtA[iNdEx:postIndex]...) + if m.LastCommitHash == nil { + m.LastCommitHash = []byte{} + } + iNdEx = postIndex + case 7: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field DataHash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.DataHash = append(m.DataHash[:0], dAtA[iNdEx:postIndex]...) + if m.DataHash == nil { + m.DataHash = []byte{} + } + iNdEx = postIndex + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorsHash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ValidatorsHash = append(m.ValidatorsHash[:0], dAtA[iNdEx:postIndex]...) + if m.ValidatorsHash == nil { + m.ValidatorsHash = []byte{} + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NextValidatorsHash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.NextValidatorsHash = append(m.NextValidatorsHash[:0], dAtA[iNdEx:postIndex]...) + if m.NextValidatorsHash == nil { + m.NextValidatorsHash = []byte{} + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ConsensusHash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ConsensusHash = append(m.ConsensusHash[:0], dAtA[iNdEx:postIndex]...) + if m.ConsensusHash == nil { + m.ConsensusHash = []byte{} + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AppHash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AppHash = append(m.AppHash[:0], dAtA[iNdEx:postIndex]...) + if m.AppHash == nil { + m.AppHash = []byte{} + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LastResultsHash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.LastResultsHash = append(m.LastResultsHash[:0], dAtA[iNdEx:postIndex]...) + if m.LastResultsHash == nil { + m.LastResultsHash = []byte{} + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EvidenceHash", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.EvidenceHash = append(m.EvidenceHash[:0], dAtA[iNdEx:postIndex]...) + if m.EvidenceHash == nil { + m.EvidenceHash = []byte{} + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ProposerAddress", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowTypes + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthTypes + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthTypes + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.ProposerAddress = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipTypes(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthTypes + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func skipTypes(dAtA []byte) (n int, err error) { + l := len(dAtA) + iNdEx := 0 + depth := 0 + for iNdEx < l { + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + wireType := int(wire & 0x7) + switch wireType { + case 0: + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + iNdEx++ + if dAtA[iNdEx-1] < 0x80 { + break + } + } + case 1: + iNdEx += 8 + case 2: + var length int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return 0, ErrIntOverflowTypes + } + if iNdEx >= l { + return 0, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + length |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if length < 0 { + return 0, ErrInvalidLengthTypes + } + iNdEx += length + case 3: + depth++ + case 4: + if depth == 0 { + return 0, ErrUnexpectedEndOfGroupTypes + } + depth-- + case 5: + iNdEx += 4 + default: + return 0, fmt.Errorf("proto: illegal wireType %d", wireType) + } + if iNdEx < 0 { + return 0, ErrInvalidLengthTypes + } + if depth == 0 { + return iNdEx, nil + } + } + return 0, io.ErrUnexpectedEOF +} + +var ( + ErrInvalidLengthTypes = fmt.Errorf("proto: negative length found during unmarshaling") + ErrIntOverflowTypes = fmt.Errorf("proto: integer overflow") + ErrUnexpectedEndOfGroupTypes = fmt.Errorf("proto: unexpected end of group") +) diff --git a/server/v2/cometbft/client/grpc/cmtservice/util.go b/server/v2/cometbft/client/grpc/cmtservice/util.go new file mode 100644 index 000000000000..6b18e3fdb6e5 --- /dev/null +++ b/server/v2/cometbft/client/grpc/cmtservice/util.go @@ -0,0 +1,39 @@ +package cmtservice + +import ( + cmtprototypes "github.com/cometbft/cometbft/api/cometbft/types/v1" + + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// convertHeader converts CometBFT header to sdk header +func convertHeader(h cmtprototypes.Header) Header { + return Header{ + Version: h.Version, + ChainID: h.ChainID, + Height: h.Height, + Time: h.Time, + LastBlockId: h.LastBlockId, + ValidatorsHash: h.ValidatorsHash, + NextValidatorsHash: h.NextValidatorsHash, + ConsensusHash: h.ConsensusHash, + AppHash: h.AppHash, + DataHash: h.DataHash, + EvidenceHash: h.EvidenceHash, + LastResultsHash: h.LastResultsHash, + LastCommitHash: h.LastCommitHash, + ProposerAddress: sdk.ConsAddress(h.ProposerAddress).String(), + } +} + +// convertBlock converts CometBFT block to sdk block +func convertBlock(cmtblock *cmtprototypes.Block) *Block { + b := new(Block) + + b.Header = convertHeader(cmtblock.Header) + b.LastCommit = cmtblock.LastCommit + b.Data = cmtblock.Data + b.Evidence = cmtblock.Evidence + + return b +} diff --git a/server/v2/cometbft/client/rpc/block.go b/server/v2/cometbft/client/rpc/block.go new file mode 100644 index 000000000000..ead230b16b87 --- /dev/null +++ b/server/v2/cometbft/client/rpc/block.go @@ -0,0 +1,103 @@ +package rpc + +import ( + "context" + "encoding/hex" + "fmt" + + v11 "buf.build/gen/go/cometbft/cometbft/protocolbuffers/go/cometbft/types/v1" + + abciv1beta1 "cosmossdk.io/api/cosmos/base/abci/v1beta1" +) + +// GetChainHeight returns the current blockchain height. +func GetChainHeight(ctx context.Context, rpcClient CometRPC) (int64, error) { + status, err := rpcClient.Status(ctx) + if err != nil { + return -1, err + } + + height := status.SyncInfo.LatestBlockHeight + return height, nil +} + +// QueryBlocks performs a search for blocks based on BeginBlock and EndBlock +// events via the CometBFT RPC. A custom query may be passed as described below: +// +// To tell which events you want, you need to provide a query. query is a +// string, which has a form: "condition AND condition ..." (no OR at the +// moment). condition has a form: "key operation operand". key is a string with +// a restricted set of possible symbols ( \t\n\r\\()"'=>< are not allowed). +// operation can be "=", "<", "<=", ">", ">=", "CONTAINS" AND "EXISTS". operand +// can be a string (escaped with single quotes), number, date or time. + +// Examples: +// tm.event = 'NewBlock' # new blocks +// tm.event = 'CompleteProposal' # node got a complete proposal +// tm.event = 'Tx' AND tx.hash = 'XYZ' # single transaction +// tm.event = 'Tx' AND tx.height = 5 # all txs of the fifth block +// tx.height = 5 # all txs of the fifth block +// +// For more information, see the /subscribe CometBFT RPC endpoint documentation +func QueryBlocks(ctx context.Context, rpcClient CometRPC, page, limit int, query, orderBy string) (*abciv1beta1.SearchBlocksResult, error) { + resBlocks, err := rpcClient.BlockSearch(ctx, query, &page, &limit, orderBy) + if err != nil { + return nil, err + } + + blocks, err := formatBlockResults(resBlocks.Blocks) + if err != nil { + return nil, err + } + + result := NewSearchBlocksResult(int64(resBlocks.TotalCount), int64(len(blocks)), int64(page), int64(limit), blocks) + + return result, nil +} + +// get block by height +func GetBlockByHeight(ctx context.Context, rpcClient CometRPC, height *int64) (*v11.Block, error) { + // header -> BlockchainInfo + // header, tx -> Block + // results -> BlockResults + resBlock, err := rpcClient.Block(ctx, height) + if err != nil { + return nil, err + } + + out, err := NewResponseResultBlock(resBlock) + if err != nil { + return nil, err + } + if out == nil { + return nil, fmt.Errorf("unable to create response block from comet result block: %v", resBlock) + } + + return out, nil +} + +func GetBlockByHash(ctx context.Context, rpcClient CometRPC, hashHexString string) (*v11.Block, error) { + hash, err := hex.DecodeString(hashHexString) + if err != nil { + return nil, err + } + + resBlock, err := rpcClient.BlockByHash(ctx, hash) + + if err != nil { + return nil, err + } else if resBlock.Block == nil { + return nil, fmt.Errorf("block not found with hash: %s", hashHexString) + } + + // TODO: Also move NewResponseResultBlock somewhere around this package + out, err := NewResponseResultBlock(resBlock) + if err != nil { + return nil, err + } + if out == nil { + return nil, fmt.Errorf("unable to create response block from comet result block: %v", resBlock) + } + + return out, nil +} diff --git a/server/v2/cometbft/client/rpc/client.go b/server/v2/cometbft/client/rpc/client.go new file mode 100644 index 000000000000..94680758abe4 --- /dev/null +++ b/server/v2/cometbft/client/rpc/client.go @@ -0,0 +1,36 @@ +package rpc + +import ( + "context" + + rpcclient "github.com/cometbft/cometbft/rpc/client" + coretypes "github.com/cometbft/cometbft/rpc/core/types" +) + +// CometRPC defines the interface of a CometBFT RPC client needed for +// queries and transaction handling. +type CometRPC interface { + rpcclient.ABCIClient + + Validators(ctx context.Context, height *int64, page, perPage *int) (*coretypes.ResultValidators, error) + Status(context.Context) (*coretypes.ResultStatus, error) + Block(ctx context.Context, height *int64) (*coretypes.ResultBlock, error) + BlockByHash(ctx context.Context, hash []byte) (*coretypes.ResultBlock, error) + BlockResults(ctx context.Context, height *int64) (*coretypes.ResultBlockResults, error) + BlockchainInfo(ctx context.Context, minHeight, maxHeight int64) (*coretypes.ResultBlockchainInfo, error) + Commit(ctx context.Context, height *int64) (*coretypes.ResultCommit, error) + Tx(ctx context.Context, hash []byte, prove bool) (*coretypes.ResultTx, error) + TxSearch( + ctx context.Context, + query string, + prove bool, + page, perPage *int, + orderBy string, + ) (*coretypes.ResultTxSearch, error) + BlockSearch( + ctx context.Context, + query string, + page, perPage *int, + orderBy string, + ) (*coretypes.ResultBlockSearch, error) +} diff --git a/server/v2/cometbft/client/rpc/utils.go b/server/v2/cometbft/client/rpc/utils.go new file mode 100644 index 000000000000..c41542c9734c --- /dev/null +++ b/server/v2/cometbft/client/rpc/utils.go @@ -0,0 +1,75 @@ +package rpc + +import ( + "fmt" + + v11 "buf.build/gen/go/cometbft/cometbft/protocolbuffers/go/cometbft/types/v1" + coretypes "github.com/cometbft/cometbft/rpc/core/types" + gogoproto "github.com/cosmos/gogoproto/proto" + protov2 "google.golang.org/protobuf/proto" + + abciv1beta1 "cosmossdk.io/api/cosmos/base/abci/v1beta1" +) + +// formatBlockResults parses the indexed blocks into a slice of BlockResponse objects. +func formatBlockResults(resBlocks []*coretypes.ResultBlock) ([]*v11.Block, error) { + var ( + err error + out = make([]*v11.Block, len(resBlocks)) + ) + for i := range resBlocks { + out[i], err = NewResponseResultBlock(resBlocks[i]) + if err != nil { + return nil, fmt.Errorf("unable to create response block from comet result block: %v: %w", resBlocks[i], err) + } + if out[i] == nil { + return nil, fmt.Errorf("unable to create response block from comet result block: %v", resBlocks[i]) + } + } + + return out, nil +} + +func NewSearchBlocksResult(totalCount, count, page, limit int64, blocks []*v11.Block) *abciv1beta1.SearchBlocksResult { + totalPages := calcTotalPages(totalCount, limit) + return &abciv1beta1.SearchBlocksResult{ + TotalCount: totalCount, + Count: count, + PageNumber: page, + PageTotal: totalPages, + Limit: limit, + Blocks: blocks, + } +} + +// NewResponseResultBlock returns a BlockResponse given a ResultBlock from CometBFT +func NewResponseResultBlock(res *coretypes.ResultBlock) (*v11.Block, error) { + blkProto, err := res.Block.ToProto() + if err != nil { + return nil, err + } + blkBz, err := gogoproto.Marshal(blkProto) + if err != nil { + return nil, err + } + + blk := &v11.Block{} + err = protov2.Unmarshal(blkBz, blk) + if err != nil { + return nil, err + } + return blk, nil +} + +// calculate total pages in an overflow safe manner +func calcTotalPages(totalCount, limit int64) int64 { + totalPages := int64(0) + if totalCount != 0 && limit != 0 { + if totalCount%limit > 0 { + totalPages = totalCount/limit + 1 + } else { + totalPages = totalCount / limit + } + } + return totalPages +} diff --git a/server/v2/cometbft/commands.go b/server/v2/cometbft/commands.go new file mode 100644 index 000000000000..f9c505cd34c5 --- /dev/null +++ b/server/v2/cometbft/commands.go @@ -0,0 +1,414 @@ +package cometbft + +import ( + "encoding/json" + "fmt" + "strconv" + "strings" + + cmtcfg "github.com/cometbft/cometbft/config" + cmtjson "github.com/cometbft/cometbft/libs/json" + "github.com/cometbft/cometbft/node" + "github.com/cometbft/cometbft/p2p" + pvm "github.com/cometbft/cometbft/privval" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + "github.com/cometbft/cometbft/rpc/client/local" + cmtversion "github.com/cometbft/cometbft/version" + "github.com/spf13/cobra" + "google.golang.org/protobuf/encoding/protojson" + "sigs.k8s.io/yaml" + + "cosmossdk.io/server/v2/cometbft/client/rpc" + "cosmossdk.io/server/v2/cometbft/flags" + auth "cosmossdk.io/x/auth/client/cli" + + cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/cosmos-sdk/types/query" + "github.com/cosmos/cosmos-sdk/version" +) + +func (s *CometBFTServer[T]) rpcClient() (rpc.CometRPC, error) { + if s.config.Standalone { + client, err := rpchttp.New(s.config.CmtConfig.RPC.ListenAddress) + if err != nil { + return nil, err + } + return client, nil + } + + return local.New(s.Node), nil +} + +// StatusCommand returns the command to return the status of the network. +func (s *CometBFTServer[T]) StatusCommand() *cobra.Command { + cmd := &cobra.Command{ + Use: "status", + Short: "Query remote node for status", + RunE: func(cmd *cobra.Command, _ []string) error { + rpcclient, err := s.rpcClient() + if err != nil { + return err + } + + status, err := rpcclient.Status(cmd.Context()) + if err != nil { + return err + } + + output, err := cmtjson.Marshal(status) + if err != nil { + return err + } + + cmd.Println(string(output)) + + // TODO: figure out yaml and json output + return nil + }, + } + + cmd.Flags().StringP(flags.FlagNode, "n", "tcp://localhost:26657", "Node to connect to") + cmd.Flags().StringP(flags.FlagOutput, "o", "json", "Output format (text|json)") + + return cmd +} + +// ShowNodeIDCmd - ported from CometBFT, dump node ID to stdout +func (s *CometBFTServer[T]) ShowNodeIDCmd() *cobra.Command { + return &cobra.Command{ + Use: "show-node-id", + Short: "Show this node's ID", + RunE: func(cmd *cobra.Command, args []string) error { + nodeKey, err := p2p.LoadNodeKey(s.config.CmtConfig.NodeKeyFile()) + if err != nil { + return err + } + + cmd.Println(nodeKey.ID()) + return nil + }, + } +} + +// ShowValidatorCmd - ported from CometBFT, show this node's validator info +func (s *CometBFTServer[T]) ShowValidatorCmd() *cobra.Command { + cmd := cobra.Command{ + Use: "show-validator", + Short: "Show this node's CometBFT validator info", + RunE: func(cmd *cobra.Command, args []string) error { + cfg := s.config.CmtConfig + privValidator := pvm.LoadFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile()) + pk, err := privValidator.GetPubKey() + if err != nil { + return err + } + + sdkPK, err := cryptocodec.FromCmtPubKeyInterface(pk) + if err != nil { + return err + } + + cmd.Println(sdkPK) // TODO: figure out if we need the codec here or not, see below + + // clientCtx := client.GetClientContextFromCmd(cmd) + // bz, err := clientCtx.Codec.MarshalInterfaceJSON(sdkPK) + // if err != nil { + // return err + // } + + // cmd.Println(string(bz)) + return nil + }, + } + + return &cmd +} + +// ShowAddressCmd - show this node's validator address +func (s *CometBFTServer[T]) ShowAddressCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "show-address", + Short: "Shows this node's CometBFT validator consensus address", + RunE: func(cmd *cobra.Command, args []string) error { + cfg := s.config.CmtConfig + privValidator := pvm.LoadFilePV(cfg.PrivValidatorKeyFile(), cfg.PrivValidatorStateFile()) + // TODO: use address codec? + valConsAddr := (sdk.ConsAddress)(privValidator.GetAddress()) + + cmd.Println(valConsAddr.String()) + return nil + }, + } + + return cmd +} + +// VersionCmd prints CometBFT and ABCI version numbers. +func (s *CometBFTServer[T]) VersionCmd() *cobra.Command { + return &cobra.Command{ + Use: "version", + Short: "Print CometBFT libraries' version", + Long: "Print protocols' and libraries' version numbers against which this app has been compiled.", + RunE: func(cmd *cobra.Command, args []string) error { + bs, err := yaml.Marshal(&struct { + CometBFT string + ABCI string + BlockProtocol uint64 + P2PProtocol uint64 + }{ + CometBFT: cmtversion.CMTSemVer, + ABCI: cmtversion.ABCIVersion, + BlockProtocol: cmtversion.BlockProtocol, + P2PProtocol: cmtversion.P2PProtocol, + }) + if err != nil { + return err + } + + cmd.Println(string(bs)) + return nil + }, + } +} + +// QueryBlocksCmd returns a command to search through blocks by events. +func (s *CometBFTServer[T]) QueryBlocksCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "blocks", + Short: "Query for paginated blocks that match a set of events", + Long: `Search for blocks that match the exact given events where results are paginated. +The events query is directly passed to CometBFT's RPC BlockSearch method and must +conform to CometBFT's query syntax. +Please refer to each module's documentation for the full set of events to query +for. Each module documents its respective events under 'xx_events.md'. +`, + Example: fmt.Sprintf( + "$ %s query blocks --query \"message.sender='cosmos1...' AND block.height > 7\" --page 1 --limit 30 --order-by ASC", + version.AppName, + ), + RunE: func(cmd *cobra.Command, args []string) error { + rpcclient, err := s.rpcClient() + if err != nil { + return err + } + + query, _ := cmd.Flags().GetString(auth.FlagQuery) + page, _ := cmd.Flags().GetInt(flags.FlagPage) + limit, _ := cmd.Flags().GetInt(flags.FlagLimit) + orderBy, _ := cmd.Flags().GetString(auth.FlagOrderBy) + + blocks, err := rpc.QueryBlocks(cmd.Context(), rpcclient, page, limit, query, orderBy) + if err != nil { + return err + } + + // return clientCtx.PrintProto(blocks) // TODO: previously we had this, but I think it can be replaced with a simple json marshal. + // We are missing YAML output tho. + bz, err := protojson.Marshal(blocks) + if err != nil { + return err + } + + _, err = cmd.OutOrStdout().Write(bz) + return err + }, + } + + flags.AddQueryFlagsToCmd(cmd) + cmd.Flags().Int(flags.FlagPage, query.DefaultPage, "Query a specific page of paginated results") + cmd.Flags().Int(flags.FlagLimit, query.DefaultLimit, "Query number of transactions results per page returned") + cmd.Flags().String(auth.FlagQuery, "", "The blocks events query per CometBFT's query semantics") + cmd.Flags().String(auth.FlagOrderBy, "", "The ordering semantics (asc|dsc)") + _ = cmd.MarkFlagRequired(auth.FlagQuery) + + return cmd +} + +// QueryBlockCmd implements the default command for a Block query. +func (s *CometBFTServer[T]) QueryBlockCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "block --type=[height|hash] [height|hash]", + Short: "Query for a committed block by height, hash, or event(s)", + Long: "Query for a specific committed block using the CometBFT RPC `block` and `block_by_hash` method", + Example: strings.TrimSpace(fmt.Sprintf(` +$ %s query block --%s=%s +$ %s query block --%s=%s +`, + version.AppName, auth.FlagType, auth.TypeHeight, + version.AppName, auth.FlagType, auth.TypeHash)), + Args: cobra.ExactArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + typ, _ := cmd.Flags().GetString(auth.FlagType) + + rpcclient, err := s.rpcClient() + if err != nil { + return err + } + + switch typ { + case auth.TypeHeight: + if args[0] == "" { + return fmt.Errorf("argument should be a block height") + } + + // optional height + var height *int64 + if len(args) > 0 { + height, err = parseOptionalHeight(args[0]) + if err != nil { + return err + } + } + + output, err := rpc.GetBlockByHeight(cmd.Context(), rpcclient, height) + if err != nil { + return err + } + + if output.Header.Height == 0 { + return fmt.Errorf("no block found with height %s", args[0]) + } + + // return clientCtx.PrintProto(output) + + bz, err := json.Marshal(output) + if err != nil { + return err + } + + _, err = cmd.OutOrStdout().Write(bz) + return err + + case auth.TypeHash: + + if args[0] == "" { + return fmt.Errorf("argument should be a tx hash") + } + + // If hash is given, then query the tx by hash. + output, err := rpc.GetBlockByHash(cmd.Context(), rpcclient, args[0]) + if err != nil { + return err + } + + if output.Header.AppHash == nil { + return fmt.Errorf("no block found with hash %s", args[0]) + } + + // return clientCtx.PrintProto(output) + bz, err := json.Marshal(output) + if err != nil { + return err + } + + _, err = cmd.OutOrStdout().Write(bz) + return err + + default: + return fmt.Errorf("unknown --%s value %s", auth.FlagType, typ) + } + }, + } + + flags.AddQueryFlagsToCmd(cmd) + cmd.Flags().String(auth.FlagType, auth.TypeHash, fmt.Sprintf("The type to be used when querying tx, can be one of \"%s\", \"%s\"", auth.TypeHeight, auth.TypeHash)) + + return cmd +} + +// QueryBlockResultsCmd implements the default command for a BlockResults query. +func (s *CometBFTServer[T]) QueryBlockResultsCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "block-results [height]", + Short: "Query for a committed block's results by height", + Long: "Query for a specific committed block's results using the CometBFT RPC `block_results` method", + Args: cobra.RangeArgs(0, 1), + RunE: func(cmd *cobra.Command, args []string) error { + // clientCtx, err := client.GetClientQueryContext(cmd) + // if err != nil { + // return err + // } + + // TODO: we should be able to do this without using client context + + node, err := s.rpcClient() + if err != nil { + return err + } + + // optional height + var height *int64 + if len(args) > 0 { + height, err = parseOptionalHeight(args[0]) + if err != nil { + return err + } + } + + blockRes, err := node.BlockResults(cmd.Context(), height) + if err != nil { + return err + } + + // coretypes.ResultBlockResults doesn't implement proto.Message interface + // so we can't print it using clientCtx.PrintProto + // we choose to serialize it to json and print the json instead + blockResStr, err := json.Marshal(blockRes) + if err != nil { + return err + } + + cmd.Println(string(blockResStr)) + + // TODO: figure out yaml and json output + return nil + }, + } + + flags.AddQueryFlagsToCmd(cmd) + + return cmd +} + +func parseOptionalHeight(heightStr string) (*int64, error) { + h, err := strconv.Atoi(heightStr) + if err != nil { + return nil, err + } + + if h == 0 { + return nil, nil + } + + tmp := int64(h) + + return &tmp, nil +} + +func (s *CometBFTServer[T]) BootstrapStateCmd() *cobra.Command { + cmd := &cobra.Command{ + Use: "bootstrap-state", + Short: "Bootstrap CometBFT state at an arbitrary block height using a light client", + Args: cobra.NoArgs, + RunE: func(cmd *cobra.Command, args []string) error { + height, err := cmd.Flags().GetUint64("height") + if err != nil { + return err + } + if height == 0 { + height, err = s.App.store.GetLatestVersion() + if err != nil { + return err + } + } + + // TODO genensis doc provider and apphash + return node.BootstrapState(cmd.Context(), s.config.CmtConfig, cmtcfg.DefaultDBProvider, nil, height, nil) + }, + } + + cmd.Flags().Int64("height", 0, "Block height to bootstrap state at, if not provided it uses the latest block height in app state") + + return cmd +} diff --git a/server/v2/cometbft/config.go b/server/v2/cometbft/config.go new file mode 100644 index 000000000000..40b987abb2b3 --- /dev/null +++ b/server/v2/cometbft/config.go @@ -0,0 +1,37 @@ +package cometbft + +import ( + cmtcfg "github.com/cometbft/cometbft/config" + + "cosmossdk.io/server/v2/api/grpc" + "cosmossdk.io/server/v2/cometbft/types" +) + +// Config is the configuration for the CometBFT application +type Config struct { + // app.toml config options + Name string `mapstructure:"name" toml:"name"` + Version string `mapstructure:"version" toml:"version"` + InitialHeight uint64 `mapstructure:"initial_height" toml:"initial_height"` + MinRetainBlocks uint64 `mapstructure:"min_retain_blocks" toml:"min_retain_blocks"` + IndexEvents map[string]struct{} `mapstructure:"index_events" toml:"index_events"` + HaltHeight uint64 `mapstructure:"halt_height" toml:"halt_height"` + HaltTime uint64 `mapstructure:"halt_time" toml:"halt_time"` + // end of app.toml config options + + AddrPeerFilter types.PeerFilter // filter peers by address and port + IdPeerFilter types.PeerFilter // filter peers by node ID + + Transport string `mapstructure:"transport" toml:"transport"` + Addr string `mapstructure:"addr" toml:"addr"` + Standalone bool `mapstructure:"standalone" toml:"standalone"` + Trace bool `mapstructure:"trace" toml:"trace"` + + GrpcConfig grpc.Config + + // MempoolConfig + CmtConfig *cmtcfg.Config + + // Must be set by the application to grant authority to the consensus engine to send messages to the consensus module + ConsensusAuthority string +} diff --git a/server/v2/cometbft/flags/flags.go b/server/v2/cometbft/flags/flags.go new file mode 100644 index 000000000000..37003dcdce21 --- /dev/null +++ b/server/v2/cometbft/flags/flags.go @@ -0,0 +1,79 @@ +package flags + +import "github.com/spf13/cobra" + +const ( + FlagQuery = "query" + FlagType = "type" + FlagOrderBy = "order_by" +) + +const ( + FlagHome = "home" + FlagKeyringDir = "keyring-dir" + FlagUseLedger = "ledger" + FlagChainID = "chain-id" + FlagNode = "node" + FlagGRPC = "grpc-addr" + FlagGRPCInsecure = "grpc-insecure" + FlagHeight = "height" + FlagGasAdjustment = "gas-adjustment" + FlagFrom = "from" + FlagName = "name" + FlagAccountNumber = "account-number" + FlagSequence = "sequence" + FlagNote = "note" + FlagFees = "fees" + FlagGas = "gas" + FlagGasPrices = "gas-prices" + FlagBroadcastMode = "broadcast-mode" + FlagDryRun = "dry-run" + FlagGenerateOnly = "generate-only" + FlagOffline = "offline" + FlagOutputDocument = "output-document" // inspired by wget -O + FlagSkipConfirmation = "yes" + FlagProve = "prove" + FlagKeyringBackend = "keyring-backend" + FlagPage = "page" + FlagLimit = "limit" + FlagSignMode = "sign-mode" + FlagPageKey = "page-key" + FlagOffset = "offset" + FlagCountTotal = "count-total" + FlagTimeoutHeight = "timeout-height" + FlagUnordered = "unordered" + FlagKeyAlgorithm = "algo" + FlagKeyType = "key-type" + FlagFeePayer = "fee-payer" + FlagFeeGranter = "fee-granter" + FlagReverse = "reverse" + FlagTip = "tip" + FlagAux = "aux" + FlagInitHeight = "initial-height" + // FlagOutput is the flag to set the output format. + // This differs from FlagOutputDocument that is used to set the output file. + FlagOutput = "output" + // Logging flags + FlagLogLevel = "log_level" + FlagLogFormat = "log_format" + FlagLogNoColor = "log_no_color" +) + +// List of supported output formats +const ( + OutputFormatJSON = "json" + OutputFormatText = "text" +) + +// AddQueryFlagsToCmd adds common flags to a module query command. +func AddQueryFlagsToCmd(cmd *cobra.Command) { + cmd.Flags().String(FlagNode, "tcp://localhost:26657", ": to CometBFT RPC interface for this chain") + cmd.Flags().String(FlagGRPC, "", "the gRPC endpoint to use for this chain") + cmd.Flags().Bool(FlagGRPCInsecure, false, "allow gRPC over insecure channels, if not the server must use TLS") + cmd.Flags().Int64(FlagHeight, 0, "Use a specific height to query state at (this can error if the node is pruning state)") + cmd.Flags().StringP(FlagOutput, "o", "text", "Output format (text|json)") + + // some base commands does not require chainID e.g `simd testnet` while subcommands do + // hence the flag should not be required for those commands + _ = cmd.MarkFlagRequired(FlagChainID) +} diff --git a/server/v2/cometbft/go.mod b/server/v2/cometbft/go.mod new file mode 100644 index 000000000000..8781d7371fda --- /dev/null +++ b/server/v2/cometbft/go.mod @@ -0,0 +1,190 @@ +module cosmossdk.io/server/v2/cometbft + +go 1.22.2 + +replace ( + cosmossdk.io/api => ../../../api + cosmossdk.io/core => ../../../core + cosmossdk.io/depinject => ../../../depinject + cosmossdk.io/log => ../../../log + cosmossdk.io/runtime/v2 => ../../../runtime/v2 + cosmossdk.io/server/v2 => ../ + cosmossdk.io/server/v2/appmanager => ../appmanager + cosmossdk.io/server/v2/stf => ../stf + cosmossdk.io/store/v2 => ../../../store/v2 + cosmossdk.io/x/accounts => ../../../x/accounts + cosmossdk.io/x/auth => ../../../x/auth + cosmossdk.io/x/bank => ../../../x/bank + cosmossdk.io/x/consensus => ../../../x/consensus + cosmossdk.io/x/staking => ../../../x/staking + cosmossdk.io/x/tx => ../../../x/tx + github.com/cosmos/cosmos-sdk => ../../../ +) + +require ( + buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.1-20240312114316-c0d3497e35d6.1 + cosmossdk.io/api v0.7.5 + cosmossdk.io/core v0.12.1-0.20231114100755-569e3ff6a0d7 + cosmossdk.io/errors v1.0.1 + cosmossdk.io/server/v2 v2.0.0-00010101000000-000000000000 + cosmossdk.io/server/v2/appmanager v0.0.0-00010101000000-000000000000 + cosmossdk.io/store/v2 v2.0.0-00010101000000-000000000000 + cosmossdk.io/x/auth v0.0.0-00010101000000-000000000000 + cosmossdk.io/x/consensus v0.0.0-00010101000000-000000000000 + github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 + github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 + github.com/cosmos/cosmos-proto v1.0.0-beta.5 + github.com/cosmos/cosmos-sdk v0.51.0 + github.com/cosmos/gogoproto v1.4.12 + github.com/golang/protobuf v1.5.4 + github.com/grpc-ecosystem/grpc-gateway v1.16.0 + github.com/spf13/cobra v1.8.0 + github.com/spf13/pflag v1.0.5 + google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237 + google.golang.org/grpc v1.64.0 + google.golang.org/protobuf v1.34.1 + sigs.k8s.io/yaml v1.4.0 +) + +require ( + buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.34.1-20240130113600-88ef6483f90f.1 // indirect + cosmossdk.io/collections v0.4.0 // indirect + cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/log v1.3.1 // indirect + cosmossdk.io/math v1.3.0 // indirect + cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc // indirect + cosmossdk.io/x/accounts v0.0.0-20240226161501-23359a0b6d91 // indirect + cosmossdk.io/x/bank v0.0.0-20240226161501-23359a0b6d91 // indirect + cosmossdk.io/x/staking v0.0.0-00010101000000-000000000000 // indirect + cosmossdk.io/x/tx v0.13.3 // indirect + filippo.io/edwards25519 v1.1.0 // indirect + github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect + github.com/99designs/keyring v1.2.2 // indirect + github.com/DataDog/datadog-go v4.8.3+incompatible // indirect + github.com/DataDog/zstd v1.5.5 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/beorn7/perks v1.0.1 // indirect + github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.3.3 // indirect + github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cockroachdb/errors v1.11.1 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/pebble v1.1.0 // indirect + github.com/cockroachdb/redact v1.1.5 // indirect + github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect + github.com/cometbft/cometbft-db v0.12.0 // indirect + github.com/cosmos/btcutil v1.0.5 // indirect + github.com/cosmos/cosmos-db v1.0.2 // indirect + github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e // indirect + github.com/cosmos/go-bip39 v1.0.0 // indirect + github.com/cosmos/gogogateway v1.2.0 // indirect + github.com/cosmos/iavl v1.2.0 // indirect + github.com/cosmos/ics23/go v0.10.0 // indirect + github.com/cosmos/ledger-cosmos-go v0.13.3 // indirect + github.com/danieljoos/wincred v1.2.1 // indirect + github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 // indirect + github.com/dgraph-io/badger/v4 v4.2.0 // indirect + github.com/dgraph-io/ristretto v0.1.1 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect + github.com/dvsekhvalnov/jose2go v1.6.0 // indirect + github.com/emicklei/dot v1.6.2 // indirect + github.com/fatih/color v1.17.0 // indirect + github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/getsentry/sentry-go v0.27.0 // indirect + github.com/go-kit/kit v0.13.0 // indirect + github.com/go-kit/log v0.2.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect + github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect + github.com/gofrs/uuid v4.4.0+incompatible // indirect + github.com/gogo/googleapis v1.4.1 // 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/snappy v0.0.4 // indirect + github.com/google/btree v1.1.2 // indirect + github.com/google/flatbuffers v2.0.8+incompatible // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/orderedcode v0.0.1 // indirect + github.com/gorilla/handlers v1.5.2 // indirect + github.com/gorilla/mux v1.8.1 // indirect + github.com/gorilla/websocket v1.5.1 // indirect + github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect + github.com/hashicorp/go-hclog v1.6.3 // indirect + github.com/hashicorp/go-immutable-radix v1.3.1 // indirect + github.com/hashicorp/go-metrics v0.5.3 // indirect + github.com/hashicorp/go-plugin v1.6.1 // indirect + github.com/hashicorp/golang-lru v1.0.2 // indirect + github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect + github.com/hashicorp/hcl v1.0.0 // indirect + github.com/hashicorp/yamux v0.1.1 // indirect + github.com/hdevalence/ed25519consensus v0.2.0 // indirect + github.com/huandu/skiplist v1.2.0 // indirect + github.com/iancoleman/strcase v0.3.0 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/jmhodges/levigo v1.0.0 // indirect + github.com/klauspost/compress v1.17.8 // indirect + github.com/kr/pretty v0.3.1 // indirect + github.com/kr/text v0.2.0 // indirect + github.com/lib/pq v1.10.9 // indirect + github.com/libp2p/go-buffer-pool v0.1.0 // indirect + github.com/linxGnu/grocksdb v1.8.14 // indirect + github.com/magiconair/properties v1.8.7 // indirect + github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect + github.com/minio/highwayhash v1.0.2 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/mtibben/percent v0.2.1 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect + github.com/oklog/run v1.1.0 // indirect + github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/petermattis/goid v0.0.0-20240327183114-c42a807a84ba // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect + github.com/prometheus/client_golang v1.19.1 // indirect + github.com/prometheus/client_model v0.6.1 // indirect + github.com/prometheus/common v0.53.0 // indirect + github.com/prometheus/procfs v0.14.0 // indirect + github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/rs/cors v1.11.0 // indirect + github.com/rs/zerolog v1.33.0 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect + github.com/sagikazarmark/slog-shim v0.1.0 // indirect + github.com/sasha-s/go-deadlock v0.3.1 // indirect + github.com/sourcegraph/conc v0.3.0 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect + github.com/spf13/viper v1.18.2 // indirect + github.com/stretchr/testify v1.9.0 // indirect + github.com/subosito/gotenv v1.6.0 // indirect + github.com/supranational/blst v0.3.11 // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tendermint/go-amino v0.16.0 // indirect + github.com/tidwall/btree v1.7.0 // indirect + github.com/zondax/hid v0.9.2 // indirect + github.com/zondax/ledger-go v0.14.3 // indirect + gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b // indirect + gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 // indirect + go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 // indirect + go.opencensus.io v0.24.0 // indirect + go.uber.org/multierr v1.11.0 // indirect + golang.org/x/crypto v0.23.0 // indirect + golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/net v0.25.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.20.0 // indirect + golang.org/x/term v0.20.0 // indirect + golang.org/x/text v0.15.0 // indirect + golang.org/x/tools v0.21.0 // indirect + google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240515191416-fc5f0ca64291 // indirect + gopkg.in/ini.v1 v1.67.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect + gotest.tools/v3 v3.5.1 // indirect + pgregory.net/rapid v1.1.0 // indirect +) diff --git a/server/v2/cometbft/go.sum b/server/v2/cometbft/go.sum new file mode 100644 index 000000000000..b40b52b571b1 --- /dev/null +++ b/server/v2/cometbft/go.sum @@ -0,0 +1,694 @@ +buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.1-20240312114316-c0d3497e35d6.1 h1:lBlYy54lX1iBjFhbkd13bWlH7dMnoiyENzZ0Wok1YH4= +buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.34.1-20240312114316-c0d3497e35d6.1/go.mod h1:fYP6DZCfO5Ex4U+Xq1PqQwB8NQQhW5Y+Qbyzd/7dw7o= +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.34.1-20240130113600-88ef6483f90f.1 h1:MfK7sTqm7NFqM/GOuuKOOemQzW8P7z07YQIW0vsYr38= +buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.34.1-20240130113600-88ef6483f90f.1/go.mod h1:RigkrxrsA6FPZontmsidcr0WGWF8zNFYleIktv6XdLc= +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= +cosmossdk.io/collections v0.4.0 h1:PFmwj2W8szgpD5nOd8GWH6AbYNi1f2J6akWXJ7P5t9s= +cosmossdk.io/collections v0.4.0/go.mod h1:oa5lUING2dP+gdDquow+QjlF45eL1t4TJDypgGd+tv0= +cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= +cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= +cosmossdk.io/math v1.3.0 h1:RC+jryuKeytIiictDslBP9i1fhkVm6ZDmZEoNP316zE= +cosmossdk.io/math v1.3.0/go.mod h1:vnRTxewy+M7BtXBNFybkuhSH4WfedVAAnERHgVFhp3k= +cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc h1:R9O9d75e0qZYUsVV0zzi+D7cNLnX2JrUOQNoIPaF0Bg= +cosmossdk.io/store v1.1.1-0.20240418092142-896cdf1971bc/go.mod h1:amTTatOUV3u1PsKmNb87z6/galCxrRbz9kRdJkL0DyU= +cosmossdk.io/x/accounts/defaults/lockup v0.0.0-20240417181816-5e7aae0db1f5 h1:eb0kcGyaYHSS0do7+MIWg7UKlskSH01biRNENbm/zDA= +cosmossdk.io/x/accounts/defaults/lockup v0.0.0-20240417181816-5e7aae0db1f5/go.mod h1:drzY4oVisyWvSgpsM7ccQ7IX3efMuVIvd9Eij1Gm/6o= +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +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.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= +github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/datadog-go v4.8.3+incompatible h1:fNGaYSuObuQb5nzeTQqowRAd9bpDIRRV4/gUtIBjh8Q= +github.com/DataDog/datadog-go v4.8.3+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= +github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= +github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +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/adlio/schema v1.3.6 h1:k1/zc2jNfeiZBA5aFTRy37jlBIuCkXCm0XmvpzCKI9I= +github.com/adlio/schema v1.3.6/go.mod h1:qkxwLgPBd1FgLRHYVCmQT/rrBr3JH38J9LjmVzWNudg= +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/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/benbjohnson/clock v1.1.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/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= +github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= +github.com/btcsuite/btcd/btcec/v2 v2.3.3 h1:6+iXlDKE8RMtKsvK0gshlXIuPbyWM/h84Ensb7o3sC0= +github.com/btcsuite/btcd/btcec/v2 v2.3.3/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= +github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8= +github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00= +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/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= +github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= +github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +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/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/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-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-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/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f h1:otljaYPt5hWxV3MUfO5dFPFiOXg9CyG5/kCfayTqsJ4= +github.com/cockroachdb/datadriven v1.0.3-0.20230413201302-be42291fc80f/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= +github.com/cockroachdb/errors v1.11.1 h1:xSEW75zKaKCWzR3OfxXUxgrk/NtT4G1MiOv5lWZazG8= +github.com/cockroachdb/errors v1.11.1/go.mod h1:8MUxA3Gi6b25tYlFEBGLf+D8aISL+M4MIpiWMSNRfxw= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/pebble v1.1.0 h1:pcFh8CdCIt2kmEpK0OIatq67Ln9uGDYY3d5XnE0LJG4= +github.com/cockroachdb/pebble v1.1.0/go.mod h1:sEHm5NOXxyiAoKWhoFxT8xMgd/f3RA6qUqQ1BXKrh2E= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= +github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:xW0les/5Lr+4qVsOYDDwl5Utj8uouvv69hEtiavHJ2M= +github.com/cometbft/cometbft v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:8uXGKqp5yPmNSbU81K/669E3rfO3H+juGkYKCPTnAtY= +github.com/cometbft/cometbft-db v0.12.0 h1:v77/z0VyfSU7k682IzZeZPFZrQAKiQwkqGN0QzAjMi0= +github.com/cometbft/cometbft-db v0.12.0/go.mod h1:aX2NbCrjNVd2ZajYxt1BsiFf/Z+TQ2MN0VxdicheYuw= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08 h1:BNUwBnVEBiRUGfLIqbKPKHEiR6VCOjWarDgy2dcbys4= +github.com/cometbft/cometbft/api v1.0.0-alpha.2.0.20240530055211-ae27f7eb3c08/go.mod h1:NDFKiBBD8HJC6QQLAoUI99YhsiRZtg2+FJWfk6A6m6o= +github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= +github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= +github.com/cosmos/cosmos-db v1.0.2 h1:hwMjozuY1OlJs/uh6vddqnk9j7VamLv+0DBlbEXbAKs= +github.com/cosmos/cosmos-db v1.0.2/go.mod h1:Z8IXcFJ9PqKK6BIsVOB3QXtkKoqUOp1vRvPT39kOXEA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5 h1:eNcayDLpip+zVLRLYafhzLvQlSmyab+RC5W7ZfmxJLA= +github.com/cosmos/cosmos-proto v1.0.0-beta.5/go.mod h1:hQGLpiIUloJBMdQMMWb/4wRApmI9hjHH05nefC0Ojec= +github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e h1:Zk4OsfLBN+0WOfH15Hg/aAYsSP7IuZQC6RZjewPuITw= +github.com/cosmos/crypto v0.0.0-20240309083813-82ed2537802e/go.mod h1:0KOK/XVzL5lj9x+NyJ7lWuJYl6F0Wd7JMVYM06bVQsc= +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/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= +github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= +github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= +github.com/cosmos/gogoproto v1.4.12 h1:vB6Lbe/rtnYGjQuFxkPiPYiCybqFT8QvLipDZP8JpFE= +github.com/cosmos/gogoproto v1.4.12/go.mod h1:LnZob1bXRdUoqMMtwYlcR3wjiElmlC+FkjaZRv1/eLY= +github.com/cosmos/iavl v1.2.0 h1:kVxTmjTh4k0Dh1VNL046v6BXqKziqMDzxo93oh3kOfM= +github.com/cosmos/iavl v1.2.0/go.mod h1:HidWWLVAtODJqFD6Hbne2Y0q3SdxByJepHUOeoH4LiI= +github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= +github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= +github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5nvue4rK+yM= +github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= +github.com/danieljoos/wincred v1.2.1 h1:dl9cBrupW8+r5250DYkYxocLeZ1Y4vB1kxgtjxw8GQs= +github.com/danieljoos/wincred v1.2.1/go.mod h1:uGaFL9fDn3OLTvzCGulzE+SzjEe5NGlh5FdCcyfPwps= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.1 h1:7PltbUIQB7u/FfZ39+DGa/ShuMyJ5ilcvdfma9wOH6Y= +github.com/decred/dcrd/crypto/blake256 v1.0.1/go.mod h1:2OfgNZ5wDpcsFmHmCK5gZTPcCXqlm2ArzUIkw9czNJo= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0 h1:rpfIENRNNilwHwZeG5+P150SMrnNEcHYvcCuK6dPZSg= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.3.0/go.mod h1:v57UDF4pDQJcEfFUCRop3lJL149eHGSe9Jvczhzjo/0= +github.com/dgraph-io/badger/v4 v4.2.0 h1:kJrlajbXXL9DFTNuhhu9yCx7JJa4qpYWxtE8BzuWsEs= +github.com/dgraph-io/badger/v4 v4.2.0/go.mod h1:qfCqhPoWDFJRx1gp5QwwyGo8xk1lbHUxvK9nK0OGAak= +github.com/dgraph-io/ristretto v0.1.1 h1:6CWw5tJNgpegArSHpNHJKldNeq03FQCwYvfMVWajOK8= +github.com/dgraph-io/ristretto v0.1.1/go.mod h1:S1GPSBCYCIhmVNfcth17y2zZtQT6wzkzgwUve0VDWWA= +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/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= +github.com/dvsekhvalnov/jose2go v1.6.0 h1:Y9gnSnP4qEI0+/uQkHvFXeD2PLPJeXEL+ySMEA2EjTY= +github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= +github.com/emicklei/dot v1.6.2 h1:08GN+DD79cy/tzN6uLCT84+2Wk9u+wvqP+Hkx/dIR8A= +github.com/emicklei/dot v1.6.2/go.mod h1:DeV7GvQtIw4h2u73RKBkkFdvVAz0D9fzeJrgPW6gy/s= +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.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +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.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/color v1.17.0 h1:GlRw1BRJxkpqUCBKzKOw098ed57fEsKeNjpTe3cSjK4= +github.com/fatih/color v1.17.0/go.mod h1:YZ7TlrGPkiz6ku9fK3TLD/pl3CpsiFyu8N92HLgmosI= +github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= +github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +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.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= +github.com/getsentry/sentry-go v0.27.0 h1:Pv98CIbtB3LkMWmXi4Joa5OOcwbmnX88sF5qbK3r3Ps= +github.com/getsentry/sentry-go v0.27.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= +github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +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.13.0 h1:OoneCcHKHQ03LfBpoQCUfCluwd2Vt3ohz+kvbJneZAU= +github.com/go-kit/kit v0.13.0/go.mod h1:phqEHMMUbyrCFCTgH48JueqrM3md2HcAZ8N3XE4FKDg= +github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= +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.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= +github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +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/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/gofrs/uuid v4.4.0+incompatible h1:3qXRTX8/NbyulANqlc0lchS1gqAVxRgsuW1YrTJupqA= +github.com/gofrs/uuid v4.4.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +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-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.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.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.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.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.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= +github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= +github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= +github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= +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.5.0/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.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.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/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +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-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= +github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= +github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= +github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= +github.com/grpc-ecosystem/go-grpc-middleware v1.4.0/go.mod h1:g5qyo/la0ALbONm6Vbp88Yd8NsDy6rZz+RcrMPxvld8= +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/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/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= +github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= +github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= +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-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYSucoNE= +github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= +github.com/hashicorp/go-plugin v1.6.1 h1:P7MR2UP6gNKGPp+y7EZw2kOiq4IR9WiqLvp0XOsVdwI= +github.com/hashicorp/go-plugin v1.6.1/go.mod h1:XPHFku2tFo3o3QKFgSYo+cghcUhw1NA1hZyMK0PWAw0= +github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= +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/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v1.0.2 h1:dV3g9Z/unq5DpblPpw+Oqcv4dU/1omnb4Ok8iPY6p1c= +github.com/hashicorp/golang-lru v1.0.2/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= +github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= +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/yamux v0.1.1 h1:yrQxtgseBDrq9Y652vSRDvsKCJKOUD+GzTS4Y0Y8pvE= +github.com/hashicorp/yamux v0.1.1/go.mod h1:CtWFDAQgb7dxtzFs4tWbplKIe2jSi3+5vKbgIO0SLnQ= +github.com/hdevalence/ed25519consensus v0.2.0 h1:37ICyZqdyj0lAZ8P4D1d1id3HqbbG1N3iBb1Tb4rdcU= +github.com/hdevalence/ed25519consensus v0.2.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= +github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= +github.com/huandu/skiplist v1.2.0 h1:gox56QD77HzSC0w+Ws3MH3iie755GBJU1OER3h5VsYw= +github.com/huandu/skiplist v1.2.0/go.mod h1:7v3iFjLcSAzO4fN5B8dvebvo/qsfumiLiDXMrPiHF9w= +github.com/iancoleman/strcase v0.3.0 h1:nTXanmYxhfFAMjZL34Ov6gkzEsSJZ5DbhxWjvSASxEI= +github.com/iancoleman/strcase v0.3.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/jhump/protoreflect v1.15.3 h1:6SFRuqU45u9hIZPJAoZ8c28T3nK64BNdp9w6jFonzls= +github.com/jhump/protoreflect v1.15.3/go.mod h1:4ORHmSBmlCW8fh3xHmJMGyul1zNqZK4Elxc8qKP+p1k= +github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= +github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= +github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= +github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +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.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/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/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/linxGnu/grocksdb v1.8.14 h1:HTgyYalNwBSG/1qCQUIott44wU5b2Y9Kr3z7SK5OfGQ= +github.com/linxGnu/grocksdb v1.8.14/go.mod h1:QYiYypR2d4v63Wj1adOOfzglnoII0gLj3PNh4fZkcFA= +github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= +github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= +github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= +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.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= +github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= +github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= +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/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= +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/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/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/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +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/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a h1:dlRvE5fWabOchtH7znfiFCcOvmIYgOeAS5ifBXBlh9Q= +github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a/go.mod h1:hVoHR2EVESiICEMbg137etN/Lx+lSrHPTD39Z/uE+2s= +github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= +github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= +github.com/onsi/ginkgo v1.16.5/go.mod h1:+E8gABHa3K6zRBolWtd+ROzc/U5bkGt0FwiG042wbpU= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +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.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.28.1 h1:MijcGUbfYuznzK/5R4CPNoUP/9Xvuo20sXfEm6XxoTA= +github.com/onsi/gomega v1.28.1/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.0-rc5 h1:Ygwkfw9bpDvs+c9E34SdgGOj41dX/cbdlwvlWt0pnFI= +github.com/opencontainers/image-spec v1.1.0-rc5/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= +github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= +github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8= +github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= +github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= +github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= +github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= +github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/petermattis/goid v0.0.0-20240327183114-c42a807a84ba h1:3jPgmsFGBID1wFfU2AbYocNcN4wqU68UaHSdMjiw/7U= +github.com/petermattis/goid v0.0.0-20240327183114-c42a807a84ba/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +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/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +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.19.1 h1:wZWJDwK+NameRJuPGDhlnFgx8e8HN3XHQeLaYJFJBOE= +github.com/prometheus/client_golang v1.19.1/go.mod h1:mP78NwGzrVks5S2H6ab8+ZZGJLZUq1hoULYBAYBw1Ho= +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/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= +github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= +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.53.0 h1:U2pL9w9nmJwJDa4qqLQ3ZaePJ6ZTwt7cMD3AG3+aLCE= +github.com/prometheus/common v0.53.0/go.mod h1:BrxBKv3FWBIGXw89Mg1AeBq7FSyRzXWI3l3e7W3RN5U= +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.14.0 h1:Lw4VdGGoKEZilJsayHf0B+9YgLGREba2C6xr+Fdfq6s= +github.com/prometheus/procfs v0.14.0/go.mod h1:XL+Iwz8k8ZabyZfMFHPiilCniixqQarAy5Mu67pHlNQ= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= +github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= +github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +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/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= +github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +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/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= +github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= +github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= +github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +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.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= +github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +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.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= +github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +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 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.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +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.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= +github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= +github.com/supranational/blst v0.3.11 h1:LyU6FolezeWAhvQk0k6O/d49jqgO52MSDDfYgbeoEm4= +github.com/supranational/blst v0.3.11/go.mod h1:jZJtfjgudtNl4en1tzwPIV3KjUnQUvG3/j+w+fVonLw= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +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/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= +github.com/tidwall/btree v1.7.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/zondax/hid v0.9.2 h1:WCJFnEDMiqGF64nlZz28E9qLVZ0KSJ7xpc5DLEyma2U= +github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= +github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= +gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b h1:CzigHMRySiX3drau9C6Q5CAbNIApmLdat5jPMqChvDA= +gitlab.com/yawning/secp256k1-voi v0.0.0-20230925100816-f2616030848b/go.mod h1:/y/V339mxv2sZmYYR64O07VuCpdNZqCTwO8ZcouTMI8= +gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02 h1:qwDnMxjkyLmAFgcfgTnfJrmYKWhHnci3GjDqcZp1M3Q= +gitlab.com/yawning/tuplehash v0.0.0-20230713102510-df83abbf9a02/go.mod h1:JTnUj0mpYiAsuZLmKjTx/ex3AtMowcCgnE7YNyCEP0I= +go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5 h1:qxen9oVGzDdIRP6ejyAJc760RwW4SnVDiTYTzwnXuxo= +go.etcd.io/bbolt v1.4.0-alpha.0.0.20240404170359-43604f3112c5/go.mod h1:eW0HG9/oHQhvRCvb1/pIXW4cOvtDqeQK+XSi3TnwaXY= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= +go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= +go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +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.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= +golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842 h1:vr/HnozRka3pE4EsMEg1lgkXJkTFJCVUX+S/ZT6wYzM= +golang.org/x/exp v0.0.0-20240506185415-9bf2ced13842/go.mod h1:XtvwrStGgqGPLc4cjQfWqZHG1YFdYs6swckp8vpsjnc= +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-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +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.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +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-20181114220301-adae6a3d119a/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-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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +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-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +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/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= +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-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-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +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-20181116152217-5ac8a444bdc5/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-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-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/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-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-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/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-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-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/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-20210615035016-665e8c7367d1/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-20210927094055-39ccf1dd6fa6/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-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/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-20220503163025-988cb79eb6c6/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-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20221010170243-090e33056c14/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/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.20.0 h1:VnkxpohqXaOBYJtBmEppKUG6mXpi+4O6purfc2+sMhw= +golang.org/x/term v0.20.0/go.mod h1:8UkIAJTvZgivsXaD6/pH6U9ecQzZ45awqEOzuCvwpFY= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/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.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= +golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/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-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/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-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= +golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +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-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +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/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-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +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-20240318140521-94a12d6c2237 h1:RFiFrvy37/mpSpdySBDrUdipW/dHwsRwh3J3+A9VgT4= +google.golang.org/genproto/googleapis/api v0.0.0-20240318140521-94a12d6c2237/go.mod h1:Z5Iiy3jtmioajWHDGFk7CeugTyHtPvMHA4UTmUkyalE= +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.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= +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.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= +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 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.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.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +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/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= +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-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/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= +gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +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/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.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/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.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= +pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +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/server/v2/cometbft/handlers/defaults.go b/server/v2/cometbft/handlers/defaults.go new file mode 100644 index 000000000000..8e9795660d19 --- /dev/null +++ b/server/v2/cometbft/handlers/defaults.go @@ -0,0 +1,186 @@ +package handlers + +import ( + "context" + "errors" + "fmt" + + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cosmos/gogoproto/proto" + + consensusv1 "cosmossdk.io/api/cosmos/consensus/v1" + appmanager "cosmossdk.io/core/app" + "cosmossdk.io/core/store" + "cosmossdk.io/core/transaction" + "cosmossdk.io/server/v2/cometbft/mempool" +) + +type AppManager[T transaction.Tx] interface { + ValidateTx(ctx context.Context, tx T) (appmanager.TxResult, error) + Query(ctx context.Context, version uint64, request transaction.Msg) (response transaction.Msg, err error) +} + +type DefaultProposalHandler[T transaction.Tx] struct { + mempool mempool.Mempool[T] + txSelector TxSelector[T] +} + +func NewDefaultProposalHandler[T transaction.Tx](mp mempool.Mempool[T]) *DefaultProposalHandler[T] { + return &DefaultProposalHandler[T]{ + mempool: mp, + txSelector: NewDefaultTxSelector[T](), + } +} + +func (h *DefaultProposalHandler[T]) PrepareHandler() PrepareHandler[T] { + return func(ctx context.Context, app AppManager[T], txs []T, req proto.Message) ([]T, error) { + abciReq, ok := req.(*abci.PrepareProposalRequest) + if !ok { + return nil, fmt.Errorf("expected abci.PrepareProposalRequest, invalid request type: %T,", req) + } + + var maxBlockGas uint64 + + res, err := app.Query(ctx, 0, &consensusv1.QueryParamsRequest{}) + if err != nil { + return nil, err + } + + paramsResp, ok := res.(*consensusv1.QueryParamsResponse) + if !ok { + return nil, fmt.Errorf("unexpected consensus params response type; expected: %T, got: %T", &consensusv1.QueryParamsResponse{}, res) + } + + if b := paramsResp.GetParams().Block; b != nil { + maxBlockGas = uint64(b.MaxGas) + } + + defer h.txSelector.Clear() + + // If the mempool is nil or NoOp we simply return the transactions + // requested from CometBFT, which, by default, should be in FIFO order. + // + // Note, we still need to ensure the transactions returned respect req.MaxTxBytes. + _, isNoOp := h.mempool.(mempool.NoOpMempool[T]) + if h.mempool == nil || isNoOp { + for _, tx := range txs { + stop := h.txSelector.SelectTxForProposal(ctx, uint64(abciReq.MaxTxBytes), maxBlockGas, tx) + if stop { + break + } + } + + return h.txSelector.SelectedTxs(ctx), nil + } + + iterator := h.mempool.Select(ctx, txs) + for iterator != nil { + memTx := iterator.Tx() + + // NOTE: Since transaction verification was already executed in CheckTx, + // which calls mempool.Insert, in theory everything in the pool should be + // valid. But some mempool implementations may insert invalid txs, so we + // check again. + _, err := app.ValidateTx(ctx, memTx) + if err != nil { + err := h.mempool.Remove([]T{memTx}) + if err != nil && !errors.Is(err, mempool.ErrTxNotFound) { + return nil, err + } + } else { + stop := h.txSelector.SelectTxForProposal(ctx, uint64(abciReq.MaxTxBytes), maxBlockGas, memTx) + if stop { + break + } + } + + iterator = iterator.Next() + } + + return h.txSelector.SelectedTxs(ctx), nil + } +} + +func (h *DefaultProposalHandler[T]) ProcessHandler() ProcessHandler[T] { + return func(ctx context.Context, app AppManager[T], txs []T, req proto.Message) error { + // If the mempool is nil we simply return ACCEPT, + // because PrepareProposal may have included txs that could fail verification. + _, isNoOp := h.mempool.(mempool.NoOpMempool[T]) + if h.mempool == nil || isNoOp { + return nil + } + + _, ok := req.(*abci.PrepareProposalRequest) + if !ok { + return fmt.Errorf("invalid request type: %T", req) + } + + res, err := app.Query(ctx, 0, &consensusv1.QueryParamsRequest{}) + if err != nil { + return err + } + + paramsResp, ok := res.(*consensusv1.QueryParamsResponse) + if !ok { + return fmt.Errorf("unexpected consensus params response type; expected: %T, got: %T", &consensusv1.QueryParamsResponse{}, res) + } + + var maxBlockGas uint64 + if b := paramsResp.GetParams().Block; b != nil { + maxBlockGas = uint64(b.MaxGas) + } + + var totalTxGas uint64 + for _, tx := range txs { + _, err := app.ValidateTx(ctx, tx) + if err != nil { + return fmt.Errorf("failed to validate tx: %w", err) + } + + if maxBlockGas > 0 { + gaslimit, err := tx.GetGasLimit() + if err != nil { + return fmt.Errorf("failed to get gas limit") + } + totalTxGas += gaslimit + if totalTxGas > maxBlockGas { + return fmt.Errorf("total tx gas %d exceeds max block gas %d", totalTxGas, maxBlockGas) + } + } + } + + return nil + } +} + +// NoOpPrepareProposal defines a no-op PrepareProposal handler. It will always +// return the transactions sent by the client's request. +func NoOpPrepareProposal[T transaction.Tx]() PrepareHandler[T] { + return func(ctx context.Context, app AppManager[T], txs []T, req proto.Message) ([]T, error) { + return txs, nil + } +} + +// NoOpProcessProposal defines a no-op ProcessProposal Handler. It will always +// return ACCEPT. +func NoOpProcessProposal[T transaction.Tx]() ProcessHandler[T] { + return func(context.Context, AppManager[T], []T, proto.Message) error { + return nil + } +} + +// NoOpExtendVote defines a no-op ExtendVote handler. It will always return an +// empty byte slice as the vote extension. +func NoOpExtendVote() ExtendVoteHandler { + return func(context.Context, store.ReaderMap, *abci.ExtendVoteRequest) (*abci.ExtendVoteResponse, error) { + return &abci.ExtendVoteResponse{VoteExtension: []byte{}}, nil + } +} + +// NoOpVerifyVoteExtensionHandler defines a no-op VerifyVoteExtension handler. It +// will always return an ACCEPT status with no error. +func NoOpVerifyVoteExtensionHandler() VerifyVoteExtensionhandler { + return func(context.Context, store.ReaderMap, *abci.VerifyVoteExtensionRequest) (*abci.VerifyVoteExtensionResponse, error) { + return &abci.VerifyVoteExtensionResponse{Status: abci.VERIFY_VOTE_EXTENSION_STATUS_ACCEPT}, nil + } +} diff --git a/server/v2/cometbft/handlers/handlers.go b/server/v2/cometbft/handlers/handlers.go new file mode 100644 index 000000000000..7780a7cfc602 --- /dev/null +++ b/server/v2/cometbft/handlers/handlers.go @@ -0,0 +1,31 @@ +package handlers + +import ( + "context" + + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cosmos/gogoproto/proto" + + "cosmossdk.io/core/store" + "cosmossdk.io/core/transaction" +) + +type ( + // PrepareHandler passes in the list of Txs that are being proposed. The app can then do stateful operations + // over the list of proposed transactions. It can return a modified list of txs to include in the proposal. + PrepareHandler[T transaction.Tx] func(context.Context, AppManager[T], []T, proto.Message) ([]T, error) + + // ProcessHandler is a function that takes a list of transactions and returns a boolean and an error. + // If the verification of a transaction fails, the boolean is false and the error is non-nil. + ProcessHandler[T transaction.Tx] func(context.Context, AppManager[T], []T, proto.Message) error + + // VerifyVoteExtensionhandler is a function type that handles the verification of a vote extension request. + // It takes a context, a store reader map, and a request to verify a vote extension. + // It returns a response to verify the vote extension and an error if any. + VerifyVoteExtensionhandler func(context.Context, store.ReaderMap, *abci.VerifyVoteExtensionRequest) (*abci.VerifyVoteExtensionResponse, error) + + // ExtendVoteHandler is a function type that handles the extension of a vote. + // It takes a context, a store reader map, and a request to extend a vote. + // It returns a response to extend the vote and an error if any. + ExtendVoteHandler func(context.Context, store.ReaderMap, *abci.ExtendVoteRequest) (*abci.ExtendVoteResponse, error) +) diff --git a/server/v2/cometbft/handlers/tx_selector.go b/server/v2/cometbft/handlers/tx_selector.go new file mode 100644 index 000000000000..a102a44cd94c --- /dev/null +++ b/server/v2/cometbft/handlers/tx_selector.go @@ -0,0 +1,76 @@ +package handlers + +import ( + "context" + + cmttypes "github.com/cometbft/cometbft/types" + + "cosmossdk.io/core/transaction" +) + +// TxSelector defines a helper type that assists in selecting transactions during +// mempool transaction selection in PrepareProposal. It keeps track of the total +// number of bytes and total gas of the selected transactions. It also keeps +// track of the selected transactions themselves. +type TxSelector[T transaction.Tx] interface { + // SelectedTxs should return a copy of the selected transactions. + SelectedTxs(ctx context.Context) []T + + // Clear should clear the TxSelector, nulling out all relevant fields. + Clear() + + // SelectTxForProposal should attempt to select a transaction for inclusion in + // a proposal based on inclusion criteria defined by the TxSelector. It must + // return if the caller should halt the transaction selection loop + // (typically over a mempool) or otherwise. + SelectTxForProposal(ctx context.Context, maxTxBytes, maxBlockGas uint64, tx T) bool +} + +type defaultTxSelector[T transaction.Tx] struct { + totalTxBytes uint64 + totalTxGas uint64 + selectedTxs []T +} + +func NewDefaultTxSelector[T transaction.Tx]() TxSelector[T] { + return &defaultTxSelector[T]{} +} + +func (ts *defaultTxSelector[T]) SelectedTxs(_ context.Context) []T { + txs := make([]T, len(ts.selectedTxs)) + copy(txs, ts.selectedTxs) + return txs +} + +func (ts *defaultTxSelector[T]) Clear() { + ts.totalTxBytes = 0 + ts.totalTxGas = 0 + ts.selectedTxs = nil +} + +func (ts *defaultTxSelector[T]) SelectTxForProposal(_ context.Context, maxTxBytes, maxBlockGas uint64, tx T) bool { + txSize := uint64(cmttypes.ComputeProtoSizeForTxs([]cmttypes.Tx{tx.Bytes()})) + txGasLimit, err := tx.GetGasLimit() + if err != nil { + return false + } + + // only add the transaction to the proposal if we have enough capacity + if (txSize + ts.totalTxBytes) <= maxTxBytes { + // If there is a max block gas limit, add the tx only if the limit has + // not been met. + if maxBlockGas > 0 { + if (txGasLimit + ts.totalTxGas) <= maxBlockGas { + ts.totalTxGas += txGasLimit + ts.totalTxBytes += txSize + ts.selectedTxs = append(ts.selectedTxs, tx) + } + } else { + ts.totalTxBytes += txSize + ts.selectedTxs = append(ts.selectedTxs, tx) + } + } + + // check if we've reached capacity; if so, we cannot select any more transactions + return ts.totalTxBytes >= maxTxBytes || (maxBlockGas > 0 && (ts.totalTxGas >= maxBlockGas)) +} diff --git a/server/v2/cometbft/log/logger.go b/server/v2/cometbft/log/logger.go new file mode 100644 index 000000000000..94f5d944e3ad --- /dev/null +++ b/server/v2/cometbft/log/logger.go @@ -0,0 +1,23 @@ +package log + +import ( + cmtlog "github.com/cometbft/cometbft/libs/log" + + "cosmossdk.io/core/log" +) + +var _ cmtlog.Logger = (*CometLoggerWrapper)(nil) + +// CometLoggerWrapper provides a wrapper around a cosmossdk.io/log instance. +// It implements CometBFT's Logger interface. +type CometLoggerWrapper struct { + log.Logger +} + +// With returns a new wrapped logger with additional context provided by a set +// of key/value tuples. The number of tuples must be even and the key of the +// tuple must be a string. +func (cmt CometLoggerWrapper) With(keyVals ...interface{}) cmtlog.Logger { + logger := cmt.Logger.With(keyVals...) + return CometLoggerWrapper{logger} +} diff --git a/server/v2/cometbft/mempool/config.go b/server/v2/cometbft/mempool/config.go new file mode 100644 index 000000000000..38de18844107 --- /dev/null +++ b/server/v2/cometbft/mempool/config.go @@ -0,0 +1,11 @@ +package mempool + +// Config defines the configurations for the SDK built-in app-side mempool +// implementations. +type Config struct { + // MaxTxs defines the behavior of the mempool. A negative value indicates + // the mempool is disabled entirely, zero indicates that the mempool is + // unbounded in how many txs it may contain, and a positive value indicates + // the maximum amount of txs it may contain. + MaxTxs int `mapstructure:"max-txs"` +} diff --git a/server/v2/cometbft/mempool/doc.go b/server/v2/cometbft/mempool/doc.go new file mode 100644 index 000000000000..f9857f3a9fae --- /dev/null +++ b/server/v2/cometbft/mempool/doc.go @@ -0,0 +1,6 @@ +/* +The mempool package defines a few mempool services which can be used in conjunction with your consensus implementation + +*/ + +package mempool diff --git a/server/v2/cometbft/mempool/mempool.go b/server/v2/cometbft/mempool/mempool.go new file mode 100644 index 000000000000..3cb81c871508 --- /dev/null +++ b/server/v2/cometbft/mempool/mempool.go @@ -0,0 +1,41 @@ +package mempool + +import ( + "context" + "errors" + + "cosmossdk.io/core/transaction" +) + +var ( + ErrTxNotFound = errors.New("tx not found in mempool") + ErrMempoolTxMaxCapacity = errors.New("pool reached max tx capacity") +) + +// Mempool defines the required methods of an application's mempool. +type Mempool[T transaction.Tx] interface { + // Insert attempts to insert a Tx into the app-side mempool returning + // an error upon failure. + Insert(context.Context, T) error + + // Select returns an Iterator over the app-side mempool. If txs are specified, + // then they shall be incorporated into the Iterator. The Iterator must be + // closed by the caller. + Select(context.Context, []T) Iterator[T] + + // Remove attempts to remove a transaction from the mempool, returning an error + // upon failure. + Remove([]T) error +} + +// Iterator defines an app-side mempool iterator interface that is as minimal as +// possible. The order of iteration is determined by the app-side mempool +// implementation. +type Iterator[T transaction.Tx] interface { + // Next returns the next transaction from the mempool. If there are no more + // transactions, it returns nil. + Next() Iterator[T] + + // Tx returns the transaction at the current position of the iterator. + Tx() T +} diff --git a/server/v2/cometbft/mempool/noop.go b/server/v2/cometbft/mempool/noop.go new file mode 100644 index 000000000000..86cea55e2c53 --- /dev/null +++ b/server/v2/cometbft/mempool/noop.go @@ -0,0 +1,22 @@ +package mempool + +import ( + "context" + + "cosmossdk.io/core/transaction" +) + +var _ Mempool[transaction.Tx] = (*NoOpMempool[transaction.Tx])(nil) + +// NoOpMempool defines a no-op mempool. Transactions are completely discarded and +// ignored when BaseApp interacts with the mempool. +// +// Note: When this mempool is used, it assumed that an application will rely +// on CometBFT's transaction ordering defined in `RequestPrepareProposal`, which +// is FIFO-ordered by default. +type NoOpMempool[T transaction.Tx] struct{} + +func (NoOpMempool[T]) Insert(context.Context, T) error { return nil } +func (NoOpMempool[T]) Select(context.Context, []T) Iterator[T] { return nil } +func (NoOpMempool[T]) CountTx() int { return 0 } +func (NoOpMempool[T]) Remove([]T) error { return nil } diff --git a/server/v2/cometbft/query.go b/server/v2/cometbft/query.go new file mode 100644 index 000000000000..1f9c1539bdec --- /dev/null +++ b/server/v2/cometbft/query.go @@ -0,0 +1,130 @@ +package cometbft + +import ( + "context" + "strings" + + abci "github.com/cometbft/cometbft/abci/types" + crypto "github.com/cometbft/cometbft/api/cometbft/crypto/v1" + + errorsmod "cosmossdk.io/errors" + "cosmossdk.io/server/v2/cometbft/types" + cometerrors "cosmossdk.io/server/v2/cometbft/types/errors" +) + +func (c *Consensus[T]) handleQueryP2P(path []string) (*abci.QueryResponse, error) { + // "/p2p" prefix for p2p queries + if len(path) < 4 { + return nil, errorsmod.Wrap(cometerrors.ErrUnknownRequest, "path should be p2p filter ") + } + + cmd, typ, arg := path[1], path[2], path[3] + if cmd == "filter" { + if typ == "addr" { + if c.cfg.AddrPeerFilter != nil { + return c.cfg.AddrPeerFilter(arg) + } + } else if typ == "id" { + if c.cfg.IdPeerFilter != nil { + return c.cfg.IdPeerFilter(arg) + } + } + } + + return nil, errorsmod.Wrap(cometerrors.ErrUnknownRequest, "expected second parameter to be 'filter'") +} + +// handlerQueryApp handles the query requests for the application. +// It expects the path parameter to have at least two elements. +// The second element of the path can be either 'simulate' or 'version'. +// If the second element is 'simulate', it decodes the request data into a transaction, +// simulates the transaction using the application, and returns the simulation result. +// If the second element is 'version', it returns the version of the application. +// If the second element is neither 'simulate' nor 'version', it returns an error indicating an unknown query. +func (c *Consensus[T]) handlerQueryApp(ctx context.Context, path []string, req *abci.QueryRequest) (*abci.QueryResponse, error) { + if len(path) < 2 { + return nil, errorsmod.Wrap( + cometerrors.ErrUnknownRequest, + "expected second parameter to be either 'simulate' or 'version', neither was present", + ) + } + + switch path[1] { + case "simulate": + tx, err := c.txCodec.Decode(req.Data) + if err != nil { + return nil, errorsmod.Wrap(err, "failed to decode tx") + } + + txResult, _, err := c.app.Simulate(ctx, tx) + if err != nil { + return nil, errorsmod.Wrap(err, "failed to simulate tx") + } + + bz, err := intoABCISimulationResponse(txResult, c.cfg.IndexEvents) + if err != nil { + return nil, errorsmod.Wrap(err, "failed to marshal txResult") + } + + return &abci.QueryResponse{ + Codespace: cometerrors.RootCodespace, + Value: bz, + Height: req.Height, + }, nil + + case "version": + return &abci.QueryResponse{ + Codespace: cometerrors.RootCodespace, + Value: []byte(c.cfg.Version), + Height: req.Height, + }, nil + } + + return nil, errorsmod.Wrapf(cometerrors.ErrUnknownRequest, "unknown query: %s", path) +} + +func (c *Consensus[T]) handleQueryStore(path []string, _ types.Store, req *abci.QueryRequest) (*abci.QueryResponse, error) { + req.Path = "/" + strings.Join(path[1:], "/") + if req.Height <= 1 && req.Prove { + return nil, errorsmod.Wrap( + cometerrors.ErrInvalidRequest, + "cannot query with proof when height <= 1; please provide a valid height", + ) + } + + // "/store/" for store queries + storeName := path[1] + storeNameBz := []byte(storeName) // TODO fastpath? + qRes, err := c.store.Query(storeNameBz, uint64(req.Height), req.Data, req.Prove) + if err != nil { + return nil, err + } + + res := &abci.QueryResponse{ + Codespace: cometerrors.RootCodespace, + Height: int64(qRes.Version), + Key: qRes.Key, + Value: qRes.Value, + } + + if req.Prove { + for _, proof := range qRes.ProofOps { + bz, err := proof.Proof.Marshal() + if err != nil { + return nil, errorsmod.Wrap(err, "failed to marshal proof") + } + + res.ProofOps = &crypto.ProofOps{ + Ops: []crypto.ProofOp{ + { + Type: proof.Type, + Key: proof.Key, + Data: bz, + }, + }, + } + } + } + + return res, nil +} diff --git a/server/v2/cometbft/server.go b/server/v2/cometbft/server.go new file mode 100644 index 000000000000..dc7346b034f8 --- /dev/null +++ b/server/v2/cometbft/server.go @@ -0,0 +1,225 @@ +package cometbft + +import ( + "context" + "crypto/sha256" + "encoding/json" + "fmt" + + abciserver "github.com/cometbft/cometbft/abci/server" + cmtcmd "github.com/cometbft/cometbft/cmd/cometbft/commands" + cmtcfg "github.com/cometbft/cometbft/config" + "github.com/cometbft/cometbft/node" + "github.com/cometbft/cometbft/p2p" + pvm "github.com/cometbft/cometbft/privval" + "github.com/cometbft/cometbft/proxy" + "github.com/spf13/cobra" + "github.com/spf13/pflag" + + "cosmossdk.io/core/log" + "cosmossdk.io/core/transaction" + serverv2 "cosmossdk.io/server/v2" + "cosmossdk.io/server/v2/appmanager" + "cosmossdk.io/server/v2/cometbft/handlers" + cometlog "cosmossdk.io/server/v2/cometbft/log" + "cosmossdk.io/server/v2/cometbft/mempool" + "cosmossdk.io/server/v2/cometbft/types" + "cosmossdk.io/store/v2/snapshots" + + genutiltypes "github.com/cosmos/cosmos-sdk/x/genutil/types" +) + +const ( + flagWithComet = "with-comet" + flagAddress = "address" + flagTransport = "transport" + flagTraceStore = "trace-store" + flagCPUProfile = "cpu-profile" + FlagMinGasPrices = "minimum-gas-prices" + FlagQueryGasLimit = "query-gas-limit" + FlagHaltHeight = "halt-height" + FlagHaltTime = "halt-time" + FlagTrace = "trace" +) + +var _ serverv2.ServerModule = (*CometBFTServer[transaction.Tx])(nil) + +type CometBFTServer[T transaction.Tx] struct { + Node *node.Node + App *Consensus[T] + logger log.Logger + + config Config + cleanupFn func() +} + +// App is an interface that represents an application in the CometBFT server. +// It provides methods to access the app manager, logger, and store. +type App[T transaction.Tx] interface { + GetApp() *appmanager.AppManager[T] + GetLogger() log.Logger + GetStore() types.Store +} + +func NewCometBFTServer[T transaction.Tx]( + app *appmanager.AppManager[T], + store types.Store, + logger log.Logger, + cfg Config, + txCodec transaction.Codec[T], +) *CometBFTServer[T] { + logger = logger.With("module", "cometbft-server") + + // create noop mempool + mempool := mempool.NoOpMempool[T]{} + + // create consensus + consensus := NewConsensus[T](app, mempool, store, cfg, txCodec, logger) + + consensus.SetPrepareProposalHandler(handlers.NoOpPrepareProposal[T]()) + consensus.SetProcessProposalHandler(handlers.NoOpProcessProposal[T]()) + consensus.SetVerifyVoteExtension(handlers.NoOpVerifyVoteExtensionHandler()) + consensus.SetExtendVoteExtension(handlers.NoOpExtendVote()) + + // TODO: set these; what is the appropriate presence of the Store interface here? + var ss snapshots.StorageSnapshotter + var sc snapshots.CommitSnapshotter + + snapshotStore, err := GetSnapshotStore(cfg.CmtConfig.RootDir) + if err != nil { + panic(err) + } + + sm := snapshots.NewManager(snapshotStore, snapshots.SnapshotOptions{}, sc, ss, nil, logger) // TODO: set options somehow + consensus.SetSnapshotManager(sm) + + return &CometBFTServer[T]{ + logger: logger, + App: consensus, + config: cfg, + } +} + +func (s *CometBFTServer[T]) Name() string { + return "cometbft" +} + +func (s *CometBFTServer[T]) Start(ctx context.Context) error { + wrappedLogger := cometlog.CometLoggerWrapper{Logger: s.logger} + if s.config.Standalone { + svr, err := abciserver.NewServer(s.config.Addr, s.config.Transport, s.App) + if err != nil { + return fmt.Errorf("error creating listener: %w", err) + } + + svr.SetLogger(wrappedLogger) + + return svr.Start() + } + + nodeKey, err := p2p.LoadOrGenNodeKey(s.config.CmtConfig.NodeKeyFile()) + if err != nil { + return err + } + + s.Node, err = node.NewNode( + ctx, + s.config.CmtConfig, + pvm.LoadOrGenFilePV(s.config.CmtConfig.PrivValidatorKeyFile(), s.config.CmtConfig.PrivValidatorStateFile()), + nodeKey, + proxy.NewLocalClientCreator(s.App), + getGenDocProvider(s.config.CmtConfig), + cmtcfg.DefaultDBProvider, + node.DefaultMetricsProvider(s.config.CmtConfig.Instrumentation), + wrappedLogger, + ) + if err != nil { + return err + } + + s.cleanupFn = func() { + if s.Node != nil && s.Node.IsRunning() { + _ = s.Node.Stop() + } + } + + return s.Node.Start() +} + +func (s *CometBFTServer[T]) Stop(_ context.Context) error { + defer s.cleanupFn() + if s.Node != nil { + return s.Node.Stop() + } + return nil +} + +// returns a function which returns the genesis doc from the genesis file. +func getGenDocProvider(cfg *cmtcfg.Config) func() (node.ChecksummedGenesisDoc, error) { + return func() (node.ChecksummedGenesisDoc, error) { + appGenesis, err := genutiltypes.AppGenesisFromFile(cfg.GenesisFile()) + if err != nil { + return node.ChecksummedGenesisDoc{ + Sha256Checksum: []byte{}, + }, err + } + + gen, err := appGenesis.ToGenesisDoc() + if err != nil { + return node.ChecksummedGenesisDoc{ + Sha256Checksum: []byte{}, + }, err + } + genbz, err := gen.AppState.MarshalJSON() + if err != nil { + return node.ChecksummedGenesisDoc{ + Sha256Checksum: []byte{}, + }, err + } + + bz, err := json.Marshal(genbz) + if err != nil { + return node.ChecksummedGenesisDoc{ + Sha256Checksum: []byte{}, + }, err + } + sum := sha256.Sum256(bz) + + return node.ChecksummedGenesisDoc{ + GenesisDoc: gen, + Sha256Checksum: sum[:], + }, nil + } +} + +func (s *CometBFTServer[T]) StartCmdFlags() pflag.FlagSet { + flags := *pflag.NewFlagSet("cometbft", pflag.ExitOnError) + flags.Bool(flagWithComet, true, "Run abci app embedded in-process with CometBFT") + flags.String(flagAddress, "tcp://127.0.0.1:26658", "Listen address") + flags.String(flagTransport, "socket", "Transport protocol: socket, grpc") + flags.String(flagTraceStore, "", "Enable KVStore tracing to an output file") + flags.String(FlagMinGasPrices, "", "Minimum gas prices to accept for transactions; Any fee in a tx must meet this minimum (e.g. 0.01photino;0.0001stake)") + flags.Uint64(FlagQueryGasLimit, 0, "Maximum gas a Rest/Grpc query can consume. Blank and 0 imply unbounded.") + flags.Uint64(FlagHaltHeight, 0, "Block height at which to gracefully halt the chain and shutdown the node") + flags.Uint64(FlagHaltTime, 0, "Minimum block time (in Unix seconds) at which to gracefully halt the chain and shutdown the node") + flags.String(flagCPUProfile, "", "Enable CPU profiling and write to the provided file") + flags.Bool(FlagTrace, false, "Provide full stack traces for errors in ABCI Log") + return flags +} + +func (s *CometBFTServer[T]) CLICommands() serverv2.CLIConfig { + return serverv2.CLIConfig{ + Commands: []*cobra.Command{ + s.StatusCommand(), + s.ShowNodeIDCmd(), + s.ShowValidatorCmd(), + s.ShowAddressCmd(), + s.VersionCmd(), + s.QueryBlockCmd(), + s.QueryBlocksCmd(), + s.QueryBlockResultsCmd(), + cmtcmd.ResetAllCmd, + cmtcmd.ResetStateCmd, + }, + } +} diff --git a/server/v2/cometbft/service.go b/server/v2/cometbft/service.go new file mode 100644 index 000000000000..cf2a17bf22eb --- /dev/null +++ b/server/v2/cometbft/service.go @@ -0,0 +1,70 @@ +package cometbft + +import ( + "context" + + abci "github.com/cometbft/cometbft/api/cometbft/abci/v1" + + "cosmossdk.io/core/comet" + corecontext "cosmossdk.io/core/context" +) + +func contextWithCometInfo(ctx context.Context, info comet.Info) context.Context { + return context.WithValue(ctx, corecontext.CometInfoKey, info) +} + +// toCoreEvidence takes comet evidence and returns sdk evidence +func toCoreEvidence(ev []abci.Misbehavior) []comet.Evidence { + evidence := make([]comet.Evidence, len(ev)) + for i, e := range ev { + evidence[i] = comet.Evidence{ + Type: comet.MisbehaviorType(e.Type), + Height: e.Height, + Time: e.Time, + TotalVotingPower: e.TotalVotingPower, + Validator: comet.Validator{ + Address: e.Validator.Address, + Power: e.Validator.Power, + }, + } + } + return evidence +} + +// toCoreCommitInfo takes comet commit info and returns sdk commit info +func toCoreCommitInfo(commit abci.CommitInfo) comet.CommitInfo { + ci := comet.CommitInfo{ + Round: commit.Round, + } + + for _, v := range commit.Votes { + ci.Votes = append(ci.Votes, comet.VoteInfo{ + Validator: comet.Validator{ + Address: v.Validator.Address, + Power: v.Validator.Power, + }, + BlockIDFlag: comet.BlockIDFlag(v.BlockIdFlag), + }) + } + return ci +} + +// toCoreExtendedCommitInfo takes comet extended commit info and returns sdk commit info +func toCoreExtendedCommitInfo(commit abci.ExtendedCommitInfo) comet.CommitInfo { + ci := comet.CommitInfo{ + Round: commit.Round, + Votes: make([]comet.VoteInfo, len(commit.Votes)), + } + + for i, v := range commit.Votes { + ci.Votes[i] = comet.VoteInfo{ + Validator: comet.Validator{ + Address: v.Validator.Address, + Power: v.Validator.Power, + }, + BlockIDFlag: comet.BlockIDFlag(v.BlockIdFlag), + } + } + + return ci +} diff --git a/server/v2/cometbft/snapshots.go b/server/v2/cometbft/snapshots.go new file mode 100644 index 000000000000..dc68bab39752 --- /dev/null +++ b/server/v2/cometbft/snapshots.go @@ -0,0 +1,192 @@ +package cometbft + +import ( + "context" + "errors" + "fmt" + "os" + "path/filepath" + + abci "github.com/cometbft/cometbft/abci/types" + "github.com/cosmos/gogoproto/proto" + + "cosmossdk.io/store/v2/snapshots" + snapshottypes "cosmossdk.io/store/v2/snapshots/types" +) + +// GetSnapshotStore returns a snapshot store for the given application options. +// It creates a directory for storing snapshots if it doesn't exist. +// It initializes a GoLevelDB database for storing metadata of the snapshots. +// The snapshot store is then created using the initialized database and directory. +// If any error occurs during the process, it is returned along with a nil snapshot store. +func GetSnapshotStore(rootDir string) (*snapshots.Store, error) { + snapshotDir := filepath.Join(rootDir, "data", "snapshots") + if err := os.MkdirAll(snapshotDir, 0o750); err != nil { + return nil, fmt.Errorf("failed to create snapshots directory: %w", err) + } + + snapshotStore, err := snapshots.NewStore(snapshotDir) + if err != nil { + return nil, err + } + + return snapshotStore, nil +} + +// ApplySnapshotChunk implements types.Application. +func (c *Consensus[T]) ApplySnapshotChunk(_ context.Context, req *abci.ApplySnapshotChunkRequest) (*abci.ApplySnapshotChunkResponse, error) { + if c.snapshotManager == nil { + c.logger.Error("snapshot manager not configured") + return &abci.ApplySnapshotChunkResponse{Result: abci.APPLY_SNAPSHOT_CHUNK_RESULT_ABORT}, nil + } + + _, err := c.snapshotManager.RestoreChunk(req.Chunk) + switch { + case err == nil: + return &abci.ApplySnapshotChunkResponse{Result: abci.APPLY_SNAPSHOT_CHUNK_RESULT_ACCEPT}, nil + + case errors.Is(err, snapshottypes.ErrChunkHashMismatch): + c.logger.Error( + "chunk checksum mismatch; rejecting sender and requesting refetch", + "chunk", req.Index, + "sender", req.Sender, + "err", err, + ) + return &abci.ApplySnapshotChunkResponse{ + Result: abci.APPLY_SNAPSHOT_CHUNK_RESULT_RETRY, + RefetchChunks: []uint32{req.Index}, + RejectSenders: []string{req.Sender}, + }, nil + + default: + c.logger.Error("failed to restore snapshot", "err", err) + return &abci.ApplySnapshotChunkResponse{Result: abci.APPLY_SNAPSHOT_CHUNK_RESULT_ABORT}, nil + } +} + +// ListSnapshots implements types.Application. +func (c *Consensus[T]) ListSnapshots(_ context.Context, ctx *abci.ListSnapshotsRequest) (*abci.ListSnapshotsResponse, error) { + if c.snapshotManager == nil { + return nil, nil + } + + snapshots, err := c.snapshotManager.List() + if err != nil { + c.logger.Error("failed to list snapshots", "err", err) + return nil, err + } + + resp := &abci.ListSnapshotsResponse{} + for _, snapshot := range snapshots { + abciSnapshot, err := snapshotToABCI(snapshot) + if err != nil { + c.logger.Error("failed to convert ABCI snapshots", "err", err) + return nil, err + } + + resp.Snapshots = append(resp.Snapshots, &abciSnapshot) + } + + return resp, nil +} + +// LoadSnapshotChunk implements types.Application. +func (c *Consensus[T]) LoadSnapshotChunk(_ context.Context, req *abci.LoadSnapshotChunkRequest) (*abci.LoadSnapshotChunkResponse, error) { + if c.snapshotManager == nil { + return &abci.LoadSnapshotChunkResponse{}, nil + } + + chunk, err := c.snapshotManager.LoadChunk(req.Height, req.Format, req.Chunk) + if err != nil { + c.logger.Error( + "failed to load snapshot chunk", + "height", req.Height, + "format", req.Format, + "chunk", req.Chunk, + "err", err, + ) + return nil, err + } + + return &abci.LoadSnapshotChunkResponse{Chunk: chunk}, nil +} + +// OfferSnapshot implements types.Application. +func (c *Consensus[T]) OfferSnapshot(_ context.Context, req *abci.OfferSnapshotRequest) (*abci.OfferSnapshotResponse, error) { + if c.snapshotManager == nil { + c.logger.Error("snapshot manager not configured") + return &abci.OfferSnapshotResponse{Result: abci.OFFER_SNAPSHOT_RESULT_ABORT}, nil + } + + if req.Snapshot == nil { + c.logger.Error("received nil snapshot") + return &abci.OfferSnapshotResponse{Result: abci.OFFER_SNAPSHOT_RESULT_REJECT}, nil + } + + snapshot, err := snapshotFromABCI(req.Snapshot) + if err != nil { + c.logger.Error("failed to decode snapshot metadata", "err", err) + return &abci.OfferSnapshotResponse{Result: abci.OFFER_SNAPSHOT_RESULT_REJECT}, nil + } + + err = c.snapshotManager.Restore(snapshot) + switch { + case err == nil: + return &abci.OfferSnapshotResponse{Result: abci.OFFER_SNAPSHOT_RESULT_ACCEPT}, nil + + case errors.Is(err, snapshottypes.ErrUnknownFormat): + return &abci.OfferSnapshotResponse{Result: abci.OFFER_SNAPSHOT_RESULT_REJECT_FORMAT}, nil + + case errors.Is(err, snapshottypes.ErrInvalidMetadata): + c.logger.Error( + "rejecting invalid snapshot", + "height", req.Snapshot.Height, + "format", req.Snapshot.Format, + "err", err, + ) + return &abci.OfferSnapshotResponse{Result: abci.OFFER_SNAPSHOT_RESULT_REJECT}, nil + + default: + c.logger.Error( + "failed to restore snapshot", + "height", req.Snapshot.Height, + "format", req.Snapshot.Format, + "err", err, + ) + + // We currently don't support resetting the IAVL stores and retrying a + // different snapshot, so we ask CometBFT to abort all snapshot restoration. + return &abci.OfferSnapshotResponse{Result: abci.OFFER_SNAPSHOT_RESULT_ABORT}, nil + } +} + +// Converts an ABCI snapshot to a snapshot. Mainly to decode the SDK metadata. +func snapshotFromABCI(in *abci.Snapshot) (snapshottypes.Snapshot, error) { + snapshot := snapshottypes.Snapshot{ + Height: in.Height, + Format: in.Format, + Chunks: in.Chunks, + Hash: in.Hash, + } + err := proto.Unmarshal(in.Metadata, &snapshot.Metadata) + if err != nil { + return snapshottypes.Snapshot{}, fmt.Errorf("failed to unmarshal snapshot metadata: %w", err) + } + return snapshot, nil +} + +// Converts a Snapshot to its ABCI representation. Mainly to encode the SDK metadata. +func snapshotToABCI(s *snapshottypes.Snapshot) (abci.Snapshot, error) { + out := abci.Snapshot{ + Height: s.Height, + Format: s.Format, + Chunks: s.Chunks, + Hash: s.Hash, + } + var err error + out.Metadata, err = proto.Marshal(&s.Metadata) + if err != nil { + return abci.Snapshot{}, fmt.Errorf("failed to marshal snapshot metadata: %w", err) + } + return out, nil +} diff --git a/server/v2/cometbft/streaming.go b/server/v2/cometbft/streaming.go new file mode 100644 index 000000000000..1ac9991b9ffa --- /dev/null +++ b/server/v2/cometbft/streaming.go @@ -0,0 +1,77 @@ +package cometbft + +import ( + "context" + + coreappmgr "cosmossdk.io/core/app" + "cosmossdk.io/core/event" + "cosmossdk.io/core/store" + "cosmossdk.io/server/v2/streaming" +) + +// streamDeliverBlockChanges will stream all the changes happened during deliver block. +func (c *Consensus[T]) streamDeliverBlockChanges( + ctx context.Context, + height int64, + txs [][]byte, + txResults []coreappmgr.TxResult, + events []event.Event, + stateChanges []store.StateChanges, +) error { + // convert txresults to streaming txresults + streamingTxResults := make([]*streaming.ExecTxResult, len(txResults)) + for i, txResult := range txResults { + streamingTxResults[i] = &streaming.ExecTxResult{ + Code: txResult.Code, + Data: txResult.Data, + Log: txResult.Log, + Info: txResult.Info, + GasWanted: uint64ToInt64(txResult.GasWanted), + GasUsed: uint64ToInt64(txResult.GasUsed), + Events: streaming.IntoStreamingEvents(txResult.Events), + Codespace: txResult.Codespace, + } + } + + for _, streamingListener := range c.streaming.Listeners { + if err := streamingListener.ListenDeliverBlock(ctx, streaming.ListenDeliverBlockRequest{ + BlockHeight: height, + Txs: txs, + TxResults: streamingTxResults, + Events: streaming.IntoStreamingEvents(events), + }); err != nil { + c.logger.Error("ListenDeliverBlock listening hook failed", "height", height, "err", err) + } + + if err := streamingListener.ListenStateChanges(ctx, intoStreamingKVPairs(stateChanges)); err != nil { + c.logger.Error("ListenStateChanges listening hook failed", "height", height, "err", err) + } + } + return nil +} + +func intoStreamingKVPairs(stateChanges []store.StateChanges) []*streaming.StoreKVPair { + // Calculate the total number of KV pairs to preallocate the slice with the required capacity. + totalKvPairs := 0 + for _, accounts := range stateChanges { + totalKvPairs += len(accounts.StateChanges) + } + + // Preallocate the slice with the required capacity. + streamKvPairs := make([]*streaming.StoreKVPair, 0, totalKvPairs) + + for _, accounts := range stateChanges { + // Reducing the scope of address variable. + address := accounts.Actor + + for _, kv := range accounts.StateChanges { + streamKvPairs = append(streamKvPairs, &streaming.StoreKVPair{ + Address: address, + Key: kv.Key, + Value: kv.Value, + Delete: kv.Remove, + }) + } + } + return streamKvPairs +} diff --git a/server/v2/cometbft/types/errors/errors.go b/server/v2/cometbft/types/errors/errors.go new file mode 100644 index 000000000000..380c176ff306 --- /dev/null +++ b/server/v2/cometbft/types/errors/errors.go @@ -0,0 +1,17 @@ +package errors + +import ( + errorsmod "cosmossdk.io/errors" +) + +// RootCodespace is the codespace for all errors defined in this package +const RootCodespace = "cometbft-sdk" + +var ( + // ErrUnknownRequest to doc + ErrUnknownRequest = errorsmod.Register(RootCodespace, 1, "unknown request") + + // ErrInvalidRequest defines an ABCI typed error where the request contains + // invalid data. + ErrInvalidRequest = errorsmod.Register(RootCodespace, 2, "invalid request") +) diff --git a/server/v2/cometbft/types/peer.go b/server/v2/cometbft/types/peer.go new file mode 100644 index 000000000000..1ebc9b03c78d --- /dev/null +++ b/server/v2/cometbft/types/peer.go @@ -0,0 +1,6 @@ +package types + +import abci "github.com/cometbft/cometbft/abci/types" + +// PeerFilter responds to p2p filtering queries from Tendermint +type PeerFilter func(info string) (*abci.QueryResponse, error) diff --git a/server/v2/cometbft/types/store.go b/server/v2/cometbft/types/store.go new file mode 100644 index 000000000000..dbbd8f313eff --- /dev/null +++ b/server/v2/cometbft/types/store.go @@ -0,0 +1,32 @@ +package types + +import ( + "cosmossdk.io/core/store" + storev2 "cosmossdk.io/store/v2" + "cosmossdk.io/store/v2/proof" +) + +type Store interface { + // GetLatestVersion returns the latest version that consensus has been made on + GetLatestVersion() (uint64, error) + // StateLatest returns a readonly view over the latest + // committed state of the store. Alongside the version + // associated with it. + StateLatest() (uint64, store.ReaderMap, error) + + // Commit commits the provided changeset and returns + // the new state root of the state. + Commit(*store.Changeset) (store.Hash, error) + + // Query is a key/value query directly to the underlying database. This skips the appmanager + Query(storeKey []byte, version uint64, key []byte, prove bool) (storev2.QueryResult, error) + + // LastCommitID returns a CommitID pertaining to the last commitment. + LastCommitID() (proof.CommitID, error) + + // GetStateStorage returns the SS backend. + GetStateStorage() storev2.VersionedDatabase + + // GetStateCommitment returns the SC backend. + GetStateCommitment() storev2.Committer +} diff --git a/server/v2/cometbft/types/vote.go b/server/v2/cometbft/types/vote.go new file mode 100644 index 000000000000..aeb3b9b8f150 --- /dev/null +++ b/server/v2/cometbft/types/vote.go @@ -0,0 +1,13 @@ +package types + +import ( + "context" + + abci "github.com/cometbft/cometbft/abci/types" +) + +// VoteExtensionsHandler defines how to implement vote extension handlers +type VoteExtensionsHandler interface { + ExtendVote(context.Context, *abci.ExtendVoteRequest) (*abci.ExtendVoteResponse, error) + VerifyVoteExtension(context.Context, *abci.VerifyVoteExtensionRequest) (*abci.VerifyVoteExtensionResponse, error) +} diff --git a/server/v2/cometbft/utils.go b/server/v2/cometbft/utils.go new file mode 100644 index 000000000000..8c21cbd454aa --- /dev/null +++ b/server/v2/cometbft/utils.go @@ -0,0 +1,414 @@ +package cometbft + +import ( + "context" + "fmt" + "math" + "strings" + "time" + + abciv1 "buf.build/gen/go/cometbft/cometbft/protocolbuffers/go/cometbft/abci/v1" + abci "github.com/cometbft/cometbft/abci/types" + cmtproto "github.com/cometbft/cometbft/api/cometbft/types/v1" + gogoproto "github.com/cosmos/gogoproto/proto" + gogoany "github.com/cosmos/gogoproto/types/any" + "google.golang.org/protobuf/encoding/protojson" + "google.golang.org/protobuf/types/known/anypb" + + v1beta1 "cosmossdk.io/api/cosmos/base/abci/v1beta1" + appmanager "cosmossdk.io/core/app" + appmodulev2 "cosmossdk.io/core/appmodule/v2" + "cosmossdk.io/core/comet" + "cosmossdk.io/core/event" + "cosmossdk.io/core/transaction" + errorsmod "cosmossdk.io/errors" + consensus "cosmossdk.io/x/consensus/types" +) + +func queryResponse(res transaction.Msg) (*abci.QueryResponse, error) { + // TODO(kocu): we are tightly coupled go gogoproto here, is this problem? + bz, err := gogoproto.Marshal(res) + if err != nil { + return nil, err + } + + // TODO: how do I reply? I suppose we need to different replies depending of the query + return &abci.QueryResponse{ + Code: 0, + Log: "", + Info: "", + Index: 0, + Key: []byte{}, + Value: bz, + // ProofOps: &cmtcrypto.ProofOps{}, + Height: 0, + Codespace: "", + }, nil +} + +// responseExecTxResultWithEvents returns an ABCI ExecTxResult object with fields +// filled in from the given error, gas values and events. +func responseExecTxResultWithEvents(err error, gw, gu uint64, events []abci.Event, debug bool) *abci.ExecTxResult { + space, code, log := errorsmod.ABCIInfo(err, debug) + return &abci.ExecTxResult{ + Codespace: space, + Code: code, + Log: log, + GasWanted: int64(gw), + GasUsed: int64(gu), + Events: events, + } +} + +// splitABCIQueryPath splits a string path using the delimiter '/'. +// +// e.g. "this/is/funny" becomes []string{"this", "is", "funny"} +func splitABCIQueryPath(requestPath string) (path []string) { + path = strings.Split(requestPath, "/") + + // first element is empty string + if len(path) > 0 && path[0] == "" { + path = path[1:] + } + + return path +} + +func finalizeBlockResponse( + in *appmanager.BlockResponse, + cp *cmtproto.ConsensusParams, + appHash []byte, + indexSet map[string]struct{}, +) (*abci.FinalizeBlockResponse, error) { + allEvents := append(in.BeginBlockEvents, in.EndBlockEvents...) + + resp := &abci.FinalizeBlockResponse{ + Events: intoABCIEvents(allEvents, indexSet), + TxResults: intoABCITxResults(in.TxResults, indexSet), + ValidatorUpdates: intoABCIValidatorUpdates(in.ValidatorUpdates), + AppHash: appHash, + ConsensusParamUpdates: cp, + } + return resp, nil +} + +func intoABCIValidatorUpdates(updates []appmodulev2.ValidatorUpdate) []abci.ValidatorUpdate { + valsetUpdates := make([]abci.ValidatorUpdate, len(updates)) + + for i, v := range updates { + valsetUpdates[i] = abci.ValidatorUpdate{ + PubKeyBytes: v.PubKey, + PubKeyType: v.PubKeyType, + Power: v.Power, + } + } + + return valsetUpdates +} + +func intoABCITxResults(results []appmanager.TxResult, indexSet map[string]struct{}) []*abci.ExecTxResult { + res := make([]*abci.ExecTxResult, len(results)) + for i := range results { + if results[i].Error == nil { + res[i] = responseExecTxResultWithEvents( + results[i].Error, + results[i].GasWanted, + results[i].GasUsed, + intoABCIEvents(results[i].Events, indexSet), + false, + ) + continue + } + + // TODO: handle properly once the we decide on the type of TxResult.Resp + } + + return res +} + +func intoABCIEvents(events []event.Event, indexSet map[string]struct{}) []abci.Event { + indexAll := len(indexSet) == 0 + abciEvents := make([]abci.Event, len(events)) + for i, e := range events { + abciEvents[i] = abci.Event{ + Type: e.Type, + Attributes: make([]abci.EventAttribute, len(e.Attributes)), + } + + for j, attr := range e.Attributes { + _, index := indexSet[fmt.Sprintf("%s.%s", e.Type, attr.Key)] + abciEvents[i].Attributes[j] = abci.EventAttribute{ + Key: attr.Key, + Value: attr.Value, + Index: index || indexAll, + } + } + } + return abciEvents +} + +func intoABCISimulationResponse(txRes appmanager.TxResult, indexSet map[string]struct{}) ([]byte, error) { + indexAll := len(indexSet) == 0 + abciEvents := make([]*abciv1.Event, len(txRes.Events)) + for i, e := range txRes.Events { + abciEvents[i] = &abciv1.Event{ + Type: e.Type, + Attributes: make([]*abciv1.EventAttribute, len(e.Attributes)), + } + + for j, attr := range e.Attributes { + _, index := indexSet[fmt.Sprintf("%s.%s", e.Type, attr.Key)] + abciEvents[i].Attributes[j] = &abciv1.EventAttribute{ + Key: attr.Key, + Value: attr.Value, + Index: index || indexAll, + } + } + } + + msgResponses := make([]*anypb.Any, len(txRes.Resp)) + for i, resp := range txRes.Resp { + // use this hack to maintain the protov2 API here for now + anyMsg, err := gogoany.NewAnyWithCacheWithValue(resp) + if err != nil { + return nil, err + } + msgResponses[i] = &anypb.Any{TypeUrl: anyMsg.TypeUrl, Value: anyMsg.Value} + } + + res := &v1beta1.SimulationResponse{ + GasInfo: &v1beta1.GasInfo{ + GasWanted: txRes.GasWanted, + GasUsed: txRes.GasUsed, + }, + Result: &v1beta1.Result{ + Data: []byte{}, + Log: txRes.Error.Error(), + Events: abciEvents, + MsgResponses: msgResponses, + }, + } + + return protojson.Marshal(res) +} + +// ToSDKEvidence takes comet evidence and returns sdk evidence +func ToSDKEvidence(ev []abci.Misbehavior) []*comet.Evidence { + evidence := make([]*comet.Evidence, len(ev)) + for i, e := range ev { + evidence[i] = &comet.Evidence{ + Type: comet.MisbehaviorType(e.Type), + Height: e.Height, + Time: e.Time, + TotalVotingPower: e.TotalVotingPower, + Validator: comet.Validator{ + Address: e.Validator.Address, + Power: e.Validator.Power, + }, + } + } + return evidence +} + +// ToSDKDecidedCommitInfo takes comet commit info and returns sdk commit info +func ToSDKCommitInfo(commit abci.CommitInfo) *comet.CommitInfo { + ci := comet.CommitInfo{ + Round: commit.Round, + } + + for _, v := range commit.Votes { + ci.Votes = append(ci.Votes, comet.VoteInfo{ + Validator: comet.Validator{ + Address: v.Validator.Address, + Power: v.Validator.Power, + }, + BlockIDFlag: comet.BlockIDFlag(v.BlockIdFlag), + }) + } + return &ci +} + +// ToSDKExtendedCommitInfo takes comet extended commit info and returns sdk commit info +func ToSDKExtendedCommitInfo(commit abci.ExtendedCommitInfo) comet.CommitInfo { + ci := comet.CommitInfo{ + Round: commit.Round, + } + + for _, v := range commit.Votes { + ci.Votes = append(ci.Votes, comet.VoteInfo{ + Validator: comet.Validator{ + Address: v.Validator.Address, + Power: v.Validator.Power, + }, + BlockIDFlag: comet.BlockIDFlag(v.BlockIdFlag), + }) + } + + return ci +} + +// QueryResult returns a ResponseQuery from an error. It will try to parse ABCI +// info from the error. +func QueryResult(err error, debug bool) *abci.QueryResponse { + space, code, log := errorsmod.ABCIInfo(err, debug) + return &abci.QueryResponse{ + Codespace: space, + Code: code, + Log: log, + } +} + +func (c *Consensus[T]) validateFinalizeBlockHeight(req *abci.FinalizeBlockRequest) error { + if req.Height < 1 { + return fmt.Errorf("invalid height: %d", req.Height) + } + + lastBlockHeight, _, err := c.store.StateLatest() + if err != nil { + return err + } + + // expectedHeight holds the expected height to validate + var expectedHeight uint64 + if lastBlockHeight == 0 && c.cfg.InitialHeight > 1 { + // In this case, we're validating the first block of the chain, i.e no + // previous commit. The height we're expecting is the initial height. + expectedHeight = c.cfg.InitialHeight + } else { + // This case can mean two things: + // + // - Either there was already a previous commit in the store, in which + // case we increment the version from there. + // - Or there was no previous commit, in which case we start at version 1. + expectedHeight = lastBlockHeight + 1 + } + + if req.Height != int64(expectedHeight) { + return fmt.Errorf("invalid height: %d; expected: %d", req.Height, expectedHeight) + } + + return nil +} + +// GetConsensusParams makes a query to the consensus module in order to get the latest consensus +// parameters from committed state +func (c *Consensus[T]) GetConsensusParams(ctx context.Context) (*cmtproto.ConsensusParams, error) { + latestVersion, err := c.store.GetLatestVersion() + if err != nil { + return nil, err + } + + res, err := c.app.Query(ctx, latestVersion, &consensus.QueryParamsRequest{}) + if err != nil { + return nil, err + } + + if r, ok := res.(*consensus.QueryParamsResponse); !ok { + return nil, fmt.Errorf("failed to query consensus params") + } else { + // convert our params to cometbft params + evidenceMaxDuration := r.Params.Evidence.MaxAgeDuration + cs := &cmtproto.ConsensusParams{ + Block: &cmtproto.BlockParams{ + MaxBytes: r.Params.Block.MaxBytes, + MaxGas: r.Params.Block.MaxGas, + }, + Evidence: &cmtproto.EvidenceParams{ + MaxAgeNumBlocks: r.Params.Evidence.MaxAgeNumBlocks, + MaxAgeDuration: evidenceMaxDuration, + }, + Validator: &cmtproto.ValidatorParams{ + PubKeyTypes: r.Params.Validator.PubKeyTypes, + }, + Version: &cmtproto.VersionParams{ + App: r.Params.Version.App, + }, + } + if r.Params.Abci != nil { + cs.Abci = &cmtproto.ABCIParams{ // nolint:staticcheck // deprecated type still supported for now + VoteExtensionsEnableHeight: r.Params.Abci.VoteExtensionsEnableHeight, + } + } + return cs, nil + } +} + +func (c *Consensus[T]) GetBlockRetentionHeight(cp *cmtproto.ConsensusParams, commitHeight int64) int64 { + // pruning is disabled if minRetainBlocks is zero + if c.cfg.MinRetainBlocks == 0 { + return 0 + } + + minNonZero := func(x, y int64) int64 { + switch { + case x == 0: + return y + + case y == 0: + return x + + case x < y: + return x + + default: + return y + } + } + + // Define retentionHeight as the minimum value that satisfies all non-zero + // constraints. All blocks below (commitHeight-retentionHeight) are pruned + // from CometBFT. + var retentionHeight int64 + + // Define the number of blocks needed to protect against misbehaving validators + // which allows light clients to operate safely. Note, we piggy back of the + // evidence parameters instead of computing an estimated number of blocks based + // on the unbonding period and block commitment time as the two should be + // equivalent. + if cp.Evidence != nil && cp.Evidence.MaxAgeNumBlocks > 0 { + retentionHeight = commitHeight - cp.Evidence.MaxAgeNumBlocks + } + + if c.snapshotManager != nil { + snapshotRetentionHeights := c.snapshotManager.GetSnapshotBlockRetentionHeights() + if snapshotRetentionHeights > 0 { + retentionHeight = minNonZero(retentionHeight, commitHeight-snapshotRetentionHeights) + } + } + + v := commitHeight - int64(c.cfg.MinRetainBlocks) + retentionHeight = minNonZero(retentionHeight, v) + + if retentionHeight <= 0 { + // prune nothing in the case of a non-positive height + return 0 + } + + return retentionHeight +} + +// checkHalt checks if height or time exceeds halt-height or halt-time respectively. +func (c *Consensus[T]) checkHalt(height int64, time time.Time) error { + var halt bool + switch { + case c.cfg.HaltHeight > 0 && uint64(height) > c.cfg.HaltHeight: + halt = true + + case c.cfg.HaltTime > 0 && time.Unix() > int64(c.cfg.HaltTime): + halt = true + } + + if halt { + return fmt.Errorf("halt per configuration height %d time %d", c.cfg.HaltHeight, c.cfg.HaltTime) + } + + return nil +} + +// uint64ToInt64 converts a uint64 to an int64, returning math.MaxInt64 if the uint64 is too large. +func uint64ToInt64(u uint64) int64 { + if u > uint64(math.MaxInt64) { + return math.MaxInt64 + } + return int64(u) +} diff --git a/tools/cosmovisor/go.mod b/tools/cosmovisor/go.mod index babf91700310..a55f77f1990a 100644 --- a/tools/cosmovisor/go.mod +++ b/tools/cosmovisor/go.mod @@ -6,7 +6,9 @@ require ( cosmossdk.io/log v1.3.1 cosmossdk.io/x/upgrade v0.1.2 github.com/otiai10/copy v1.14.0 + github.com/pelletier/go-toml/v2 v2.2.2 github.com/spf13/cobra v1.8.0 + github.com/spf13/viper v1.18.2 github.com/stretchr/testify v1.9.0 ) @@ -125,7 +127,6 @@ require ( github.com/mtibben/percent v0.2.1 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect - github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/petermattis/goid v0.0.0-20240327183114-c42a807a84ba // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -144,7 +145,6 @@ require ( github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.18.2 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect github.com/tendermint/go-amino v0.16.0 // indirect