diff --git a/baseapp/abci.go b/baseapp/abci.go index 058508ed87f3..5ff5bf32dbba 100644 --- a/baseapp/abci.go +++ b/baseapp/abci.go @@ -436,12 +436,12 @@ func (app *BaseApp) PrepareProposal(req *abci.PrepareProposalRequest) (resp *abc WithBlockGasMeter(app.getBlockGasMeter(app.prepareProposalState.Context()))) defer func() { - if err := recover(); err != nil { + if rec := recover(); rec != nil { app.logger.Error( "panic recovered in PrepareProposal", "height", req.Height, "time", req.Time, - "panic", err, + "panic", rec, ) resp = &abci.PrepareProposalResponse{Txs: req.Txs} @@ -534,13 +534,13 @@ func (app *BaseApp) ProcessProposal(req *abci.ProcessProposalRequest) (resp *abc WithBlockGasMeter(app.getBlockGasMeter(app.processProposalState.Context()))) defer func() { - if err := recover(); err != nil { + if rec := recover(); rec != nil { app.logger.Error( "panic recovered in ProcessProposal", "height", req.Height, "time", req.Time, "hash", fmt.Sprintf("%X", req.Hash), - "panic", err, + "panic", rec, ) resp = &abci.ProcessProposalResponse{Status: abci.PROCESS_PROPOSAL_STATUS_REJECT} } @@ -721,11 +721,11 @@ func (app *BaseApp) VerifyVoteExtension(req *abci.VerifyVoteExtensionRequest) (r func (app *BaseApp) internalFinalizeBlock(ctx context.Context, req *abci.FinalizeBlockRequest) (res *abci.FinalizeBlockResponse, err error) { var events []abci.Event - if err := app.checkHalt(req.Height, req.Time); err != nil { + if err = app.checkHalt(req.Height, req.Time); err != nil { return nil, err } - if err := app.validateFinalizeBlockHeight(req); err != nil { + if err = app.validateFinalizeBlockHeight(req); err != nil { return nil, err } @@ -856,7 +856,7 @@ func (app *BaseApp) internalFinalizeBlock(ctx context.Context, req *abci.Finaliz }, nil } -func (app *BaseApp) executeTxs(ctx context.Context, txs [][]byte) ([]*abci.ExecTxResult, error) { +func (app *BaseApp) executeTxs(ctx context.Context, txs [][]byte) (res []*abci.ExecTxResult, err error) { txResults := make([]*abci.ExecTxResult, 0, len(txs)) for txIdx, rawTx := range txs { var response *abci.ExecTxResult diff --git a/baseapp/baseapp.go b/baseapp/baseapp.go index a63647a9e5a2..c0bd4671d909 100644 --- a/baseapp/baseapp.go +++ b/baseapp/baseapp.go @@ -957,7 +957,7 @@ func (app *BaseApp) runTxWithMultiStore( // run validate basic if mode != recheck. // as validate basic is stateless, it is guaranteed to pass recheck, given that its passed checkTx. if mode != execModeReCheck { - if err := validateBasicTxMsgs(msgs); err != nil { + if err = validateBasicTxMsgs(msgs); err != nil { return sdk.GasInfo{}, nil, nil, err } } diff --git a/go.mod b/go.mod index 118183002517..a9d2e8072db2 100644 --- a/go.mod +++ b/go.mod @@ -206,8 +206,8 @@ replace ( github.com/99designs/keyring => github.com/cosmos/keyring v1.2.0 // Use CometBFT v1.0.1 with Mempool lanes and DOG - github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.3 - github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 + github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 + github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 // dgrijalva/jwt-go is deprecated and doesn't receive security updates. // TODO: remove it: https://github.com/cosmos/cosmos-sdk/issues/13134 diff --git a/go.sum b/go.sum index 0fe7e5619ba5..3ec32a38ab4f 100644 --- a/go.sum +++ b/go.sum @@ -29,10 +29,10 @@ github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dX github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3 h1:wVl4vPhyTh6uuwT0BfH3pbF9W0QqEnZYRgB/2IDFXR0= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 h1:uXsmBVeBickTjZ2GqPNYXShoboRw1m2Cq1bKv4QCe0o= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 h1:QIKdpbqWRC38xJDRBmUitpksS0ZfwlvSMMYaesZirms= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6/go.mod h1:U34DYdUTNyEdnB89+eqZy+SO9g7sFRwJQg7La+o/pHk= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 h1:GcV53gW9ajrbSoU2ikuCB+dUWHmhMmtfRKwJngZ+ChM= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 h1:zvIV7ifNcH2Dvl0RrXd2qYRkaDSc+iP0hqaAhfS85MY= github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8/go.mod h1:fdW28eWh1Ace92UW2TzINdJVaVP7whCmHKkGQZHsxGI= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= diff --git a/server/start.go b/server/start.go index c081bbb59cbc..30ef9feae63d 100644 --- a/server/start.go +++ b/server/start.go @@ -394,6 +394,7 @@ func startCmtNode( cmtcfg.DefaultDBProvider, node.DefaultMetricsProvider(cfg.Instrumentation), servercmtlog.CometLoggerWrapper{Logger: svrCtx.Logger}, + nil, ) if err != nil { return tmNode, cleanupFn, err diff --git a/simapp/go.mod b/simapp/go.mod index ff536112441f..f8136dfb662e 100644 --- a/simapp/go.mod +++ b/simapp/go.mod @@ -54,7 +54,7 @@ require ( github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect + github.com/chenzhuoyu/iasm v0.9.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.11.3 // indirect @@ -239,6 +239,6 @@ replace ( replace ( // Use CometBFT v1.0.1 with Mempool lanes and DOG - github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.3 - github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 + github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 + github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 ) diff --git a/simapp/go.sum b/simapp/go.sum index 6b0c4979a618..54ca9c3a5350 100644 --- a/simapp/go.sum +++ b/simapp/go.sum @@ -213,10 +213,10 @@ github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dX github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3 h1:wVl4vPhyTh6uuwT0BfH3pbF9W0QqEnZYRgB/2IDFXR0= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 h1:uXsmBVeBickTjZ2GqPNYXShoboRw1m2Cq1bKv4QCe0o= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 h1:QIKdpbqWRC38xJDRBmUitpksS0ZfwlvSMMYaesZirms= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6/go.mod h1:U34DYdUTNyEdnB89+eqZy+SO9g7sFRwJQg7La+o/pHk= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 h1:GcV53gW9ajrbSoU2ikuCB+dUWHmhMmtfRKwJngZ+ChM= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 h1:zvIV7ifNcH2Dvl0RrXd2qYRkaDSc+iP0hqaAhfS85MY= github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8/go.mod h1:fdW28eWh1Ace92UW2TzINdJVaVP7whCmHKkGQZHsxGI= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= @@ -269,7 +269,6 @@ github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28 github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= -github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.0 h1:qtNZduETEIWJVIyDl01BeNxur2rW9OwTQ/yBqFRkKEk= github.com/bytedance/sonic v1.10.0/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= diff --git a/store/go.mod b/store/go.mod index e07abdf352f4..da964015df81 100644 --- a/store/go.mod +++ b/store/go.mod @@ -1,8 +1,6 @@ module cosmossdk.io/store -go 1.23.0 - -toolchain go1.23.8 +go 1.23.9 require ( cosmossdk.io/errors v1.0.0 @@ -20,11 +18,11 @@ require ( github.com/hashicorp/go-plugin v1.5.2 github.com/hashicorp/golang-lru v1.0.2 github.com/spf13/cast v1.6.0 // indirect - github.com/stretchr/testify v1.10.0 + github.com/stretchr/testify v1.11.1 github.com/tidwall/btree v1.7.0 golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 - google.golang.org/grpc v1.71.0 - google.golang.org/protobuf v1.36.5 + google.golang.org/grpc v1.75.0 + google.golang.org/protobuf v1.36.8 gotest.tools/v3 v3.5.1 ) @@ -70,16 +68,16 @@ require ( github.com/rogpeppe/go-internal v1.14.1 // indirect github.com/rs/zerolog v1.33.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect - golang.org/x/crypto v0.36.0 // indirect - golang.org/x/net v0.37.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/text v0.23.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect + golang.org/x/crypto v0.41.0 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/text v0.28.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) replace ( // Use CometBFT v1.0.1 with Mempool lanes and DOG - github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.3 - github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 + github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 + github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 ) diff --git a/store/go.sum b/store/go.sum index 869f3f26cdef..7be0dfe098e6 100644 --- a/store/go.sum +++ b/store/go.sum @@ -7,10 +7,10 @@ cosmossdk.io/math v1.4.0/go.mod h1:O5PkD4apz2jZs4zqFdTr16e1dcaQCc5z6lkEnrrppuk= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3 h1:wVl4vPhyTh6uuwT0BfH3pbF9W0QqEnZYRgB/2IDFXR0= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 h1:uXsmBVeBickTjZ2GqPNYXShoboRw1m2Cq1bKv4QCe0o= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 h1:QIKdpbqWRC38xJDRBmUitpksS0ZfwlvSMMYaesZirms= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6/go.mod h1:U34DYdUTNyEdnB89+eqZy+SO9g7sFRwJQg7La+o/pHk= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 h1:GcV53gW9ajrbSoU2ikuCB+dUWHmhMmtfRKwJngZ+ChM= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= 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= @@ -77,8 +77,8 @@ github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= 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-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -245,8 +245,8 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV 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.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 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/tidwall/btree v1.7.0 h1:L1fkJH/AuEh5zBnnBbmTwQ5Lt+bRJ5A8EWecslvo9iI= @@ -257,24 +257,24 @@ github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9dec github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= -go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= 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.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 h1:yqrTHse8TCMW1M1ZCP+VAR/l0kKxwaAIqN/il7x4voA= golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8/go.mod h1:tujkw807nyEEAamNbDrEGzRav+ilXA7PCRAd6xsmwiU= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= @@ -292,8 +292,8 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b 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.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= 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= @@ -301,8 +301,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ 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.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= 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= @@ -333,16 +333,16 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 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/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.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.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 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= @@ -354,10 +354,12 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T 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/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= -google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= +google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= +google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= 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= @@ -366,8 +368,8 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= 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.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= 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-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/tests/go.mod b/tests/go.mod index 2e1990b56dff..f7b5979cd088 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -55,7 +55,6 @@ require ( github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/chenzhuoyu/iasm v0.9.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect github.com/cockroachdb/errors v1.11.3 // indirect @@ -235,6 +234,6 @@ replace ( replace ( // Use CometBFT v1.0.1 with Mempool lanes and DOG - github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.3 - github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 + github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 + github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 ) diff --git a/tests/go.sum b/tests/go.sum index 64a40d7b77fa..6acd8bdf6759 100644 --- a/tests/go.sum +++ b/tests/go.sum @@ -211,10 +211,10 @@ github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dX github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3 h1:wVl4vPhyTh6uuwT0BfH3pbF9W0QqEnZYRgB/2IDFXR0= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 h1:uXsmBVeBickTjZ2GqPNYXShoboRw1m2Cq1bKv4QCe0o= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 h1:QIKdpbqWRC38xJDRBmUitpksS0ZfwlvSMMYaesZirms= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6/go.mod h1:U34DYdUTNyEdnB89+eqZy+SO9g7sFRwJQg7La+o/pHk= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 h1:GcV53gW9ajrbSoU2ikuCB+dUWHmhMmtfRKwJngZ+ChM= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 h1:zvIV7ifNcH2Dvl0RrXd2qYRkaDSc+iP0hqaAhfS85MY= github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8/go.mod h1:fdW28eWh1Ace92UW2TzINdJVaVP7whCmHKkGQZHsxGI= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= @@ -733,7 +733,6 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02 github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= -github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -1727,7 +1726,6 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= -nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/tests/integration/gov/keeper/keeper_test.go b/tests/integration/gov/keeper/keeper_test.go index 02ee04b14bbb..c470968ed288 100644 --- a/tests/integration/gov/keeper/keeper_test.go +++ b/tests/integration/gov/keeper/keeper_test.go @@ -153,7 +153,7 @@ func initFixture(t testing.TB) *fixture { sdkCtx := sdk.UnwrapSDKContext(integrationApp.Context()) msgSrvr := keeper.NewMsgServerImpl(govKeeper) - legacyMsgSrvr := keeper.NewLegacyMsgServerImpl(authority.String(), msgSrvr) + legacyMsgSrvr := keeper.NewLegacyMsgServerImpl(authority.String(), govKeeper, msgSrvr) // Register MsgServer and QueryServer v1.RegisterMsgServer(router, msgSrvr) diff --git a/testutil/network/util.go b/testutil/network/util.go index f206fff7d4ad..e25f50786382 100644 --- a/testutil/network/util.go +++ b/testutil/network/util.go @@ -78,6 +78,7 @@ func startInProcess(cfg Config, val *Validator) error { cmtcfg.DefaultDBProvider, node.DefaultMetricsProvider(cmtCfg.Instrumentation), servercmtlog.CometLoggerWrapper{Logger: logger.With("module", val.Moniker)}, + nil, ) if err != nil { return err diff --git a/x/auth/keeper/account.go b/x/auth/keeper/account.go index 62b32099fd22..df6049abebc6 100644 --- a/x/auth/keeper/account.go +++ b/x/auth/keeper/account.go @@ -11,18 +11,26 @@ import ( // NewAccountWithAddress implements AccountKeeperI. func (ak AccountKeeper) NewAccountWithAddress(ctx context.Context, addr sdk.AccAddress) sdk.AccountI { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "NewAccountWithAddress")(&err) + acc := ak.proto() - err := acc.SetAddress(addr) + err = acc.SetAddress(addr) if err != nil { panic(err) } - return ak.NewAccount(ctx, acc) + return ak.NewAccount(sdkCtx, acc) } // NewAccount sets the next account number to a given account interface func (ak AccountKeeper) NewAccount(ctx context.Context, acc sdk.AccountI) sdk.AccountI { - if err := acc.SetAccountNumber(ak.NextAccountNumber(ctx)); err != nil { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "NewAccount")(&err) + + if err = acc.SetAccountNumber(ak.NextAccountNumber(sdkCtx)); err != nil { panic(err) } @@ -31,13 +39,20 @@ func (ak AccountKeeper) NewAccount(ctx context.Context, acc sdk.AccountI) sdk.Ac // HasAccount implements AccountKeeperI. func (ak AccountKeeper) HasAccount(ctx context.Context, addr sdk.AccAddress) bool { - has, _ := ak.Accounts.Has(ctx, addr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "HasAccount")() + + has, _ := ak.Accounts.Has(sdkCtx, addr) return has } // GetAccount implements AccountKeeperI. func (ak AccountKeeper) GetAccount(ctx context.Context, addr sdk.AccAddress) sdk.AccountI { - acc, err := ak.Accounts.Get(ctx, addr) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "GetAccount")(&err) + + acc, err := ak.Accounts.Get(sdkCtx, addr) if err != nil && !errors.Is(err, collections.ErrNotFound) { panic(err) } @@ -46,7 +61,10 @@ func (ak AccountKeeper) GetAccount(ctx context.Context, addr sdk.AccAddress) sdk // GetAllAccounts returns all accounts in the accountKeeper. func (ak AccountKeeper) GetAllAccounts(ctx context.Context) (accounts []sdk.AccountI) { - ak.IterateAccounts(ctx, func(acc sdk.AccountI) (stop bool) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "GetAllAccounts")() + + ak.IterateAccounts(sdkCtx, func(acc sdk.AccountI) (stop bool) { accounts = append(accounts, acc) return false }) @@ -56,7 +74,11 @@ func (ak AccountKeeper) GetAllAccounts(ctx context.Context) (accounts []sdk.Acco // SetAccount implements AccountKeeperI. func (ak AccountKeeper) SetAccount(ctx context.Context, acc sdk.AccountI) { - err := ak.Accounts.Set(ctx, acc.GetAddress(), acc) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "SetAccount")(&err) + + err = ak.Accounts.Set(sdkCtx, acc.GetAddress(), acc) if err != nil { panic(err) } @@ -65,7 +87,11 @@ func (ak AccountKeeper) SetAccount(ctx context.Context, acc sdk.AccountI) { // RemoveAccount removes an account for the account mapper store. // NOTE: this will cause supply invariant violation if called func (ak AccountKeeper) RemoveAccount(ctx context.Context, acc sdk.AccountI) { - err := ak.Accounts.Remove(ctx, acc.GetAddress()) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "RemoveAccount")(&err) + + err = ak.Accounts.Remove(sdkCtx, acc.GetAddress()) if err != nil { panic(err) } @@ -74,7 +100,11 @@ func (ak AccountKeeper) RemoveAccount(ctx context.Context, acc sdk.AccountI) { // IterateAccounts iterates over all the stored accounts and performs a callback function. // Stops iteration when callback returns true. func (ak AccountKeeper) IterateAccounts(ctx context.Context, cb func(account sdk.AccountI) (stop bool)) { - err := ak.Accounts.Walk(ctx, nil, func(_ sdk.AccAddress, value sdk.AccountI) (bool, error) { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "IterateAccounts")(&err) + + err = ak.Accounts.Walk(sdkCtx, nil, func(_ sdk.AccAddress, value sdk.AccountI) (bool, error) { return cb(value), nil }) if err != nil { diff --git a/x/auth/keeper/genesis.go b/x/auth/keeper/genesis.go index 555e9f3566de..9528b121e02a 100644 --- a/x/auth/keeper/genesis.go +++ b/x/auth/keeper/genesis.go @@ -10,7 +10,10 @@ import ( // CONTRACT: old coins from the FeeCollectionKeeper need to be transferred through // a genesis port script to the new fee collector account func (ak AccountKeeper) InitGenesis(ctx sdk.Context, data types.GenesisState) { - if err := ak.Params.Set(ctx, data.Params); err != nil { + var err error + defer ak.Meter(ctx).FuncTiming(&ctx, "InitGenesis")(&err) + + if err = ak.Params.Set(ctx, data.Params); err != nil { panic(err) } @@ -36,6 +39,8 @@ func (ak AccountKeeper) InitGenesis(ctx sdk.Context, data types.GenesisState) { // ExportGenesis returns a GenesisState for a given context and keeper func (ak AccountKeeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + defer ak.Meter(ctx).FuncTiming(&ctx, "ExportGenesis")() + params := ak.GetParams(ctx) var genAccounts types.GenesisAccounts diff --git a/x/auth/keeper/grpc_query.go b/x/auth/keeper/grpc_query.go index f480bb0a87d2..899bcadcdb5c 100644 --- a/x/auth/keeper/grpc_query.go +++ b/x/auth/keeper/grpc_query.go @@ -23,7 +23,10 @@ func NewQueryServer(k AccountKeeper) types.QueryServer { type queryServer struct{ k AccountKeeper } -func (s queryServer) AccountAddressByID(ctx context.Context, req *types.QueryAccountAddressByIDRequest) (*types.QueryAccountAddressByIDResponse, error) { +func (s queryServer) AccountAddressByID(ctx context.Context, req *types.QueryAccountAddressByIDRequest) (meterResult *types.QueryAccountAddressByIDResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer s.k.Meter(ctx).FuncTiming(&sdkCtx, "AccountAddressByID")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -34,7 +37,7 @@ func (s queryServer) AccountAddressByID(ctx context.Context, req *types.QueryAcc accID := req.AccountId - address, err := s.k.Accounts.Indexes.Number.MatchExact(ctx, accID) + address, err := s.k.Accounts.Indexes.Number.MatchExact(sdkCtx, accID) if err != nil { return nil, status.Errorf(codes.NotFound, "account address not found with account number %d", accID) } @@ -42,13 +45,16 @@ func (s queryServer) AccountAddressByID(ctx context.Context, req *types.QueryAcc return &types.QueryAccountAddressByIDResponse{AccountAddress: address.String()}, nil } -func (s queryServer) Accounts(ctx context.Context, req *types.QueryAccountsRequest) (*types.QueryAccountsResponse, error) { +func (s queryServer) Accounts(ctx context.Context, req *types.QueryAccountsRequest) (meterResult *types.QueryAccountsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer s.k.Meter(ctx).FuncTiming(&sdkCtx, "Accounts")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } accounts, pageRes, err := query.CollectionPaginate( - ctx, + sdkCtx, s.k.Accounts, req.Pagination, func(_ sdk.AccAddress, value sdk.AccountI) (*codectypes.Any, error) { @@ -60,7 +66,10 @@ func (s queryServer) Accounts(ctx context.Context, req *types.QueryAccountsReque } // Account returns account details based on address -func (s queryServer) Account(ctx context.Context, req *types.QueryAccountRequest) (*types.QueryAccountResponse, error) { +func (s queryServer) Account(ctx context.Context, req *types.QueryAccountRequest) (meterResult *types.QueryAccountResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer s.k.Meter(ctx).FuncTiming(&sdkCtx, "Account")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -73,7 +82,7 @@ func (s queryServer) Account(ctx context.Context, req *types.QueryAccountRequest if err != nil { return nil, err } - account := s.k.GetAccount(ctx, addr) + account := s.k.GetAccount(sdkCtx, addr) if account == nil { return nil, status.Errorf(codes.NotFound, "account %s not found", req.Address) } @@ -87,24 +96,28 @@ func (s queryServer) Account(ctx context.Context, req *types.QueryAccountRequest } // Params returns parameters of auth module -func (s queryServer) Params(c context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (s queryServer) Params(c context.Context, req *types.QueryParamsRequest) (meterResult *types.QueryParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer s.k.Meter(c).FuncTiming(&sdkCtx, "Params")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } - ctx := sdk.UnwrapSDKContext(c) - params := s.k.GetParams(ctx) + + params := s.k.GetParams(sdkCtx) return &types.QueryParamsResponse{Params: params}, nil } // ModuleAccounts returns all the existing Module Accounts -func (s queryServer) ModuleAccounts(c context.Context, req *types.QueryModuleAccountsRequest) (*types.QueryModuleAccountsResponse, error) { +func (s queryServer) ModuleAccounts(c context.Context, req *types.QueryModuleAccountsRequest) (meterResult *types.QueryModuleAccountsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer s.k.Meter(c).FuncTiming(&sdkCtx, "ModuleAccounts")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } - ctx := sdk.UnwrapSDKContext(c) - // For deterministic output, sort the permAddrs by module name. sortedPermAddrs := make([]string, 0, len(s.k.permAddrs)) for moduleName := range s.k.permAddrs { @@ -115,7 +128,7 @@ func (s queryServer) ModuleAccounts(c context.Context, req *types.QueryModuleAcc modAccounts := make([]*codectypes.Any, 0, len(s.k.permAddrs)) for _, moduleName := range sortedPermAddrs { - account := s.k.GetModuleAccount(ctx, moduleName) + account := s.k.GetModuleAccount(sdkCtx, moduleName) if account == nil { return nil, status.Errorf(codes.NotFound, "account %s not found", moduleName) } @@ -130,7 +143,10 @@ func (s queryServer) ModuleAccounts(c context.Context, req *types.QueryModuleAcc } // ModuleAccountByName returns module account by module name -func (s queryServer) ModuleAccountByName(c context.Context, req *types.QueryModuleAccountByNameRequest) (*types.QueryModuleAccountByNameResponse, error) { +func (s queryServer) ModuleAccountByName(c context.Context, req *types.QueryModuleAccountByNameRequest) (meterResult *types.QueryModuleAccountByNameResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer s.k.Meter(c).FuncTiming(&sdkCtx, "ModuleAccountByName")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -139,10 +155,9 @@ func (s queryServer) ModuleAccountByName(c context.Context, req *types.QueryModu return nil, status.Error(codes.InvalidArgument, "module name is empty") } - ctx := sdk.UnwrapSDKContext(c) moduleName := req.Name - account := s.k.GetModuleAccount(ctx, moduleName) + account := s.k.GetModuleAccount(sdkCtx, moduleName) if account == nil { return nil, status.Errorf(codes.NotFound, "account %s not found", moduleName) } @@ -155,7 +170,10 @@ func (s queryServer) ModuleAccountByName(c context.Context, req *types.QueryModu } // Bech32Prefix returns the keeper internally stored bech32 prefix. -func (s queryServer) Bech32Prefix(ctx context.Context, req *types.Bech32PrefixRequest) (*types.Bech32PrefixResponse, error) { +func (s queryServer) Bech32Prefix(ctx context.Context, req *types.Bech32PrefixRequest) (meterResult *types.Bech32PrefixResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer s.k.Meter(ctx).FuncTiming(&sdkCtx, "Bech32Prefix")(&err) + bech32Prefix, err := s.k.getBech32Prefix() if err != nil { return nil, err @@ -170,7 +188,10 @@ func (s queryServer) Bech32Prefix(ctx context.Context, req *types.Bech32PrefixRe // AddressBytesToString converts an address from bytes to string, using the // keeper's bech32 prefix. -func (s queryServer) AddressBytesToString(ctx context.Context, req *types.AddressBytesToStringRequest) (*types.AddressBytesToStringResponse, error) { +func (s queryServer) AddressBytesToString(ctx context.Context, req *types.AddressBytesToStringRequest) (meterResult *types.AddressBytesToStringResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer s.k.Meter(ctx).FuncTiming(&sdkCtx, "AddressBytesToString")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -189,7 +210,10 @@ func (s queryServer) AddressBytesToString(ctx context.Context, req *types.Addres // AddressStringToBytes converts an address from string to bytes, using the // keeper's bech32 prefix. -func (s queryServer) AddressStringToBytes(ctx context.Context, req *types.AddressStringToBytesRequest) (*types.AddressStringToBytesResponse, error) { +func (s queryServer) AddressStringToBytes(ctx context.Context, req *types.AddressStringToBytesRequest) (meterResult *types.AddressStringToBytesResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer s.k.Meter(ctx).FuncTiming(&sdkCtx, "AddressStringToBytes")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -207,7 +231,10 @@ func (s queryServer) AddressStringToBytes(ctx context.Context, req *types.Addres } // AccountInfo implements the AccountInfo query. -func (s queryServer) AccountInfo(ctx context.Context, req *types.QueryAccountInfoRequest) (*types.QueryAccountInfoResponse, error) { +func (s queryServer) AccountInfo(ctx context.Context, req *types.QueryAccountInfoRequest) (meterResult *types.QueryAccountInfoResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer s.k.Meter(ctx).FuncTiming(&sdkCtx, "AccountInfo")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -221,7 +248,7 @@ func (s queryServer) AccountInfo(ctx context.Context, req *types.QueryAccountInf return nil, err } - account := s.k.GetAccount(ctx, addr) + account := s.k.GetAccount(sdkCtx, addr) if account == nil { return nil, status.Errorf(codes.NotFound, "account %s not found", req.Address) } diff --git a/x/auth/keeper/keeper.go b/x/auth/keeper/keeper.go index 393ed99907d3..ec50d729139f 100644 --- a/x/auth/keeper/keeper.go +++ b/x/auth/keeper/keeper.go @@ -11,6 +11,7 @@ import ( "cosmossdk.io/core/store" errorsmod "cosmossdk.io/errors" "cosmossdk.io/log" + "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -102,6 +103,8 @@ type AccountKeeper struct { Params collections.Item[types.Params] AccountNumber collections.Sequence Accounts *collections.IndexedMap[sdk.AccAddress, sdk.AccountI, AccountsIndexes] + + meter metrics.Meter } var _ AccountKeeperI = &AccountKeeper{} @@ -160,8 +163,11 @@ func (ak AccountKeeper) Logger(ctx context.Context) log.Logger { } // GetPubKey Returns the PubKey of the account at address -func (ak AccountKeeper) GetPubKey(ctx context.Context, addr sdk.AccAddress) (cryptotypes.PubKey, error) { - acc := ak.GetAccount(ctx, addr) +func (ak AccountKeeper) GetPubKey(ctx context.Context, addr sdk.AccAddress) (meterResult cryptotypes.PubKey, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "GetPubKey")(&err) + + acc := ak.GetAccount(sdkCtx, addr) if acc == nil { return nil, errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "account %s does not exist", addr) } @@ -170,8 +176,11 @@ func (ak AccountKeeper) GetPubKey(ctx context.Context, addr sdk.AccAddress) (cry } // GetSequence Returns the Sequence of the account at address -func (ak AccountKeeper) GetSequence(ctx context.Context, addr sdk.AccAddress) (uint64, error) { - acc := ak.GetAccount(ctx, addr) +func (ak AccountKeeper) GetSequence(ctx context.Context, addr sdk.AccAddress) (meterResult uint64, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "GetSequence")(&err) + + acc := ak.GetAccount(sdkCtx, addr) if acc == nil { return 0, errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "account %s does not exist", addr) } @@ -182,7 +191,11 @@ func (ak AccountKeeper) GetSequence(ctx context.Context, addr sdk.AccAddress) (u // NextAccountNumber returns and increments the global account number counter. // If the global account number is not set, it initializes it with value 0. func (ak AccountKeeper) NextAccountNumber(ctx context.Context) uint64 { - n, err := ak.AccountNumber.Next(ctx) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "NextAccountNumber")(&err) + + n, err := ak.AccountNumber.Next(sdkCtx) if err != nil { panic(err) } @@ -230,12 +243,16 @@ func (ak AccountKeeper) GetModuleAddressAndPermissions(moduleName string) (addr // GetModuleAccountAndPermissions gets the module account from the auth account store and its // registered permissions func (ak AccountKeeper) GetModuleAccountAndPermissions(ctx context.Context, moduleName string) (sdk.ModuleAccountI, []string) { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "GetModuleAccountAndPermissions")(&err) + addr, perms := ak.GetModuleAddressAndPermissions(moduleName) if addr == nil { return nil, []string{} } - acc := ak.GetAccount(ctx, addr) + acc := ak.GetAccount(sdkCtx, addr) if acc != nil { macc, ok := acc.(sdk.ModuleAccountI) if !ok { @@ -246,8 +263,8 @@ func (ak AccountKeeper) GetModuleAccountAndPermissions(ctx context.Context, modu // create a new module account macc := types.NewEmptyModuleAccount(moduleName, perms...) - maccI := (ak.NewAccount(ctx, macc)).(sdk.ModuleAccountI) // set the account number - ak.SetModuleAccount(ctx, maccI) + maccI := (ak.NewAccount(sdkCtx, macc)).(sdk.ModuleAccountI) // set the account number + ak.SetModuleAccount(sdkCtx, maccI) return maccI, perms } @@ -255,13 +272,19 @@ func (ak AccountKeeper) GetModuleAccountAndPermissions(ctx context.Context, modu // GetModuleAccount gets the module account from the auth account store, if the account does not // exist in the AccountKeeper, then it is created. func (ak AccountKeeper) GetModuleAccount(ctx context.Context, moduleName string) sdk.ModuleAccountI { - acc, _ := ak.GetModuleAccountAndPermissions(ctx, moduleName) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "GetModuleAccount")() + + acc, _ := ak.GetModuleAccountAndPermissions(sdkCtx, moduleName) return acc } // SetModuleAccount sets the module account to the auth account store func (ak AccountKeeper) SetModuleAccount(ctx context.Context, macc sdk.ModuleAccountI) { - ak.SetAccount(ctx, macc) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "SetModuleAccount")() + + ak.SetAccount(sdkCtx, macc) } // add getter for bech32Prefix @@ -271,9 +294,21 @@ func (ak AccountKeeper) getBech32Prefix() (string, error) { // GetParams gets the auth module's parameters. func (ak AccountKeeper) GetParams(ctx context.Context) (params types.Params) { - params, err := ak.Params.Get(ctx) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ak.Meter(ctx).FuncTiming(&sdkCtx, "GetParams")(&err) + + params, err = ak.Params.Get(sdkCtx) if err != nil && !errors.Is(err, collections.ErrNotFound) { panic(err) } return params } + +func (ak *AccountKeeper) Meter(ctx context.Context) metrics.Meter { + if ak.meter == nil { + ak.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return ak.meter +} diff --git a/x/auth/keeper/msg_server.go b/x/auth/keeper/msg_server.go index cee9af2633e6..3942637640a1 100644 --- a/x/auth/keeper/msg_server.go +++ b/x/auth/keeper/msg_server.go @@ -21,19 +21,21 @@ func NewMsgServerImpl(ak AccountKeeper) types.MsgServer { } } -func (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { +func (ms msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (meterResult *types.MsgUpdateParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer ms.ak.Meter(goCtx).FuncTiming(&sdkCtx, "UpdateParams")(&err) + if ms.ak.authority != msg.Authority { return nil, fmt.Errorf( "expected gov account as only signer for proposal message; invalid authority; expected %s, got %s", ms.ak.authority, msg.Authority) } - if err := msg.Params.Validate(); err != nil { + if err = msg.Params.Validate(); err != nil { return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) - if err := ms.ak.Params.Set(ctx, msg.Params); err != nil { + if err = ms.ak.Params.Set(sdkCtx, msg.Params); err != nil { return nil, err } diff --git a/x/authz/keeper/genesis.go b/x/authz/keeper/genesis.go index 08b84b8ed682..4eee3b4fcbc1 100644 --- a/x/authz/keeper/genesis.go +++ b/x/authz/keeper/genesis.go @@ -7,6 +7,9 @@ import ( // InitGenesis initializes new authz genesis func (k Keeper) InitGenesis(ctx sdk.Context, data *authz.GenesisState) { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "InitGenesis")(&err) + now := ctx.BlockTime() for _, entry := range data.Authorization { // ignore expired authorizations @@ -37,6 +40,8 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data *authz.GenesisState) { // ExportGenesis returns a GenesisState for a given context. func (k Keeper) ExportGenesis(ctx sdk.Context) *authz.GenesisState { + defer k.Meter(ctx).FuncTiming(&ctx, "ExportGenesis")() + var entries []authz.GrantAuthorization k.IterateGrants(ctx, func(granter, grantee sdk.AccAddress, grant authz.Grant) bool { entries = append(entries, authz.GrantAuthorization{ diff --git a/x/authz/keeper/grpc_query.go b/x/authz/keeper/grpc_query.go index de4cd060d026..841b495dd46b 100644 --- a/x/authz/keeper/grpc_query.go +++ b/x/authz/keeper/grpc_query.go @@ -12,6 +12,7 @@ import ( codectypes "github.com/cosmos/cosmos-sdk/codec/types" "github.com/cosmos/cosmos-sdk/runtime" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" "github.com/cosmos/cosmos-sdk/x/authz" ) @@ -20,7 +21,10 @@ var _ authz.QueryServer = Keeper{} // Grants implements the Query/Grants gRPC method. // It returns grants for a granter-grantee pair. If msg type URL is set, it returns grants only for that msg type. -func (k Keeper) Grants(ctx context.Context, req *authz.QueryGrantsRequest) (*authz.QueryGrantsResponse, error) { +func (k Keeper) Grants(ctx context.Context, req *authz.QueryGrantsRequest) (meterResult *authz.QueryGrantsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Grants")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -36,7 +40,7 @@ func (k Keeper) Grants(ctx context.Context, req *authz.QueryGrantsRequest) (*aut } if req.MsgTypeUrl != "" { - grant, found := k.getGrant(ctx, grantStoreKey(grantee, granter, req.MsgTypeUrl)) + grant, found := k.getGrant(sdkCtx, grantStoreKey(grantee, granter, req.MsgTypeUrl)) if !found { return nil, errors.Wrapf(authz.ErrNoAuthorizationFound, "authorization not found for %s type", req.MsgTypeUrl) } @@ -58,7 +62,7 @@ func (k Keeper) Grants(ctx context.Context, req *authz.QueryGrantsRequest) (*aut }, nil } - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) key := grantStoreKey(grantee, granter, "") grantsStore := prefix.NewStore(store, key) @@ -90,7 +94,10 @@ func (k Keeper) Grants(ctx context.Context, req *authz.QueryGrantsRequest) (*aut } // GranterGrants implements the Query/GranterGrants gRPC method. -func (k Keeper) GranterGrants(ctx context.Context, req *authz.QueryGranterGrantsRequest) (*authz.QueryGranterGrantsResponse, error) { +func (k Keeper) GranterGrants(ctx context.Context, req *authz.QueryGranterGrantsRequest) (meterResult *authz.QueryGranterGrantsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GranterGrants")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -100,7 +107,7 @@ func (k Keeper) GranterGrants(ctx context.Context, req *authz.QueryGranterGrants return nil, err } - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) authzStore := prefix.NewStore(store, grantStoreKey(nil, granter, "")) grants, pageRes, err := query.GenericFilteredPaginate(k.cdc, authzStore, req.Pagination, func(key []byte, auth *authz.Grant) (*authz.GrantAuthorization, error) { @@ -135,7 +142,10 @@ func (k Keeper) GranterGrants(ctx context.Context, req *authz.QueryGranterGrants } // GranteeGrants implements the Query/GranteeGrants gRPC method. -func (k Keeper) GranteeGrants(ctx context.Context, req *authz.QueryGranteeGrantsRequest) (*authz.QueryGranteeGrantsResponse, error) { +func (k Keeper) GranteeGrants(ctx context.Context, req *authz.QueryGranteeGrantsRequest) (meterResult *authz.QueryGranteeGrantsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GranteeGrants")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -145,7 +155,7 @@ func (k Keeper) GranteeGrants(ctx context.Context, req *authz.QueryGranteeGrants return nil, err } - store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)), GrantKey) + store := prefix.NewStore(runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)), GrantKey) authorizations, pageRes, err := query.GenericFilteredPaginate(k.cdc, store, req.Pagination, func(key []byte, auth *authz.Grant) (*authz.GrantAuthorization, error) { auth1, err := auth.GetAuthorization() diff --git a/x/authz/keeper/keeper.go b/x/authz/keeper/keeper.go index 6b144fcd57d2..9fe5e6071a3b 100644 --- a/x/authz/keeper/keeper.go +++ b/x/authz/keeper/keeper.go @@ -23,6 +23,8 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/authz" banktypes "github.com/cosmos/cosmos-sdk/x/bank/types" + + "github.com/InjectiveLabs/metrics/v2" ) // TODO: Revisit this once we have propoer gas fee framework. @@ -37,6 +39,7 @@ type Keeper struct { authKeeper authz.AccountKeeper bankKeeper authz.BankKeeper permissionsKeeper authz.PermissionsKeeper + meter metrics.Meter } // NewKeeper constructs a message authorization Keeper @@ -68,7 +71,11 @@ func (k Keeper) Logger(ctx context.Context) log.Logger { // getGrant returns grant stored at skey. func (k Keeper) getGrant(ctx context.Context, skey []byte) (grant authz.Grant, found bool) { - store := k.storeService.OpenKVStore(ctx) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getGrant")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(skey) if err != nil { @@ -82,9 +89,12 @@ func (k Keeper) getGrant(ctx context.Context, skey []byte) (grant authz.Grant, f return grant, true } -func (k Keeper) update(ctx context.Context, grantee, granter sdk.AccAddress, updated authz.Authorization) error { +func (k Keeper) update(ctx context.Context, grantee, granter sdk.AccAddress, updated authz.Authorization) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "update")(&err) + skey := grantStoreKey(grantee, granter, updated.MsgTypeURL()) - grant, found := k.getGrant(ctx, skey) + grant, found := k.getGrant(sdkCtx, skey) if !found { return authz.ErrNoAuthorizationFound } @@ -100,7 +110,7 @@ func (k Keeper) update(ctx context.Context, grantee, granter sdk.AccAddress, upd } grant.Authorization = any - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) store.Set(skey, k.cdc.MustMarshal(&grant)) return nil @@ -108,9 +118,11 @@ func (k Keeper) update(ctx context.Context, grantee, granter sdk.AccAddress, upd // DispatchActions attempts to execute the provided messages via authorization // grants from the message signer to the grantee. -func (k Keeper) DispatchActions(ctx context.Context, grantee sdk.AccAddress, msgs []sdk.Msg) ([][]byte, error) { - results := make([][]byte, len(msgs)) +func (k Keeper) DispatchActions(ctx context.Context, grantee sdk.AccAddress, msgs []sdk.Msg) (meterResult [][]byte, err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DispatchActions")(&err) + + results := make([][]byte, len(msgs)) now := sdkCtx.BlockTime() for i, msg := range msgs { @@ -130,7 +142,7 @@ func (k Keeper) DispatchActions(ctx context.Context, grantee sdk.AccAddress, msg if !bytes.Equal(granter, grantee) { skey := grantStoreKey(grantee, granter, sdk.MsgTypeURL(msg)) - grant, found := k.getGrant(ctx, skey) + grant, found := k.getGrant(sdkCtx, skey) if !found { return nil, errorsmod.Wrapf(authz.ErrNoAuthorizationFound, "failed to get grant with given granter: %s, grantee: %s & msgType: %s ", sdk.AccAddress(granter), grantee, sdk.MsgTypeURL(msg)) @@ -151,9 +163,9 @@ func (k Keeper) DispatchActions(ctx context.Context, grantee sdk.AccAddress, msg } if resp.Delete { - err = k.DeleteGrant(ctx, grantee, granter, sdk.MsgTypeURL(msg)) + err = k.DeleteGrant(sdkCtx, grantee, granter, sdk.MsgTypeURL(msg)) } else if resp.Updated != nil { - err = k.update(ctx, grantee, granter, resp.Updated) + err = k.update(sdkCtx, grantee, granter, resp.Updated) } if err != nil { return nil, err @@ -195,10 +207,11 @@ func (k Keeper) DispatchActions(ctx context.Context, grantee sdk.AccAddress, msg // SaveGrant method grants the provided authorization to the grantee on the granter's account // with the provided expiration time and insert authorization key into the grants queue. If there is an existing authorization grant for the // same `sdk.Msg` type, this grant overwrites that. -func (k Keeper) SaveGrant(ctx context.Context, grantee, granter sdk.AccAddress, authorization authz.Authorization, expiration *time.Time) error { +func (k Keeper) SaveGrant(ctx context.Context, grantee, granter sdk.AccAddress, authorization authz.Authorization, expiration *time.Time) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SaveGrant")(&err) msgType := authorization.MsgTypeURL() - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) skey := grantStoreKey(grantee, granter, msgType) grant, err := authz.NewGrant(sdkCtx.BlockTime(), authorization, expiration) @@ -207,19 +220,19 @@ func (k Keeper) SaveGrant(ctx context.Context, grantee, granter sdk.AccAddress, } var oldExp *time.Time - if oldGrant, found := k.getGrant(ctx, skey); found { + if oldGrant, found := k.getGrant(sdkCtx, skey); found { oldExp = oldGrant.Expiration } if oldExp != nil && (expiration == nil || !oldExp.Equal(*expiration)) { - if err = k.removeFromGrantQueue(ctx, skey, granter, grantee, *oldExp); err != nil { + if err = k.removeFromGrantQueue(sdkCtx, skey, granter, grantee, *oldExp); err != nil { return err } } // If the expiration didn't change, then we don't remove it and we should not insert again if expiration != nil && (oldExp == nil || !oldExp.Equal(*expiration)) { - if err = k.insertIntoGrantQueue(ctx, granter, grantee, msgType, *expiration); err != nil { + if err = k.insertIntoGrantQueue(sdkCtx, granter, grantee, msgType, *expiration); err != nil { return err } } @@ -250,16 +263,19 @@ func (k Keeper) SaveGrant(ctx context.Context, grantee, granter sdk.AccAddress, // DeleteGrant revokes any authorization for the provided message type granted to the grantee // by the granter. -func (k Keeper) DeleteGrant(ctx context.Context, grantee, granter sdk.AccAddress, msgType string) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteGrant(ctx context.Context, grantee, granter sdk.AccAddress, msgType string) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteGrant")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) skey := grantStoreKey(grantee, granter, msgType) - grant, found := k.getGrant(ctx, skey) + grant, found := k.getGrant(sdkCtx, skey) if !found { return errorsmod.Wrapf(authz.ErrNoAuthorizationFound, "failed to delete grant with key %s", string(skey)) } if grant.Expiration != nil { - err := k.removeFromGrantQueue(ctx, skey, granter, grantee, *grant.Expiration) + err = k.removeFromGrantQueue(sdkCtx, skey, granter, grantee, *grant.Expiration) if err != nil { return err } @@ -267,17 +283,14 @@ func (k Keeper) DeleteGrant(ctx context.Context, grantee, granter sdk.AccAddress // delete index indexKey := grantsByGranteeAndMsgTypeAndGranterKey(grantee, msgType, granter) - err := store.Delete(indexKey) + err = store.Delete(indexKey) if err != nil { return err } - err = store.Delete(skey) if err != nil { return err } - - sdkCtx := sdk.UnwrapSDKContext(ctx) return sdkCtx.EventManager().EmitTypedEvent(&authz.EventRevoke{ MsgTypeUrl: msgType, Granter: granter.String(), @@ -286,8 +299,11 @@ func (k Keeper) DeleteGrant(ctx context.Context, grantee, granter sdk.AccAddress } // GetAuthorizations Returns list of `Authorizations` granted to the grantee by the granter. -func (k Keeper) GetAuthorizations(ctx context.Context, grantee, granter sdk.AccAddress) ([]authz.Authorization, error) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) +func (k Keeper) GetAuthorizations(ctx context.Context, grantee, granter sdk.AccAddress) (meterResult []authz.Authorization, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAuthorizations")(&err) + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) key := grantStoreKey(grantee, granter, "") iter := storetypes.KVStorePrefixIterator(store, key) defer iter.Close() @@ -295,7 +311,7 @@ func (k Keeper) GetAuthorizations(ctx context.Context, grantee, granter sdk.AccA var authorizations []authz.Authorization for ; iter.Valid(); iter.Next() { var authorization authz.Grant - if err := k.cdc.Unmarshal(iter.Value(), &authorization); err != nil { + if err = k.cdc.Unmarshal(iter.Value(), &authorization); err != nil { return nil, err } @@ -317,7 +333,8 @@ func (k Keeper) GetAuthorizations(ctx context.Context, grantee, granter sdk.AccA // - There was an error getting the authorization from the grant. func (k Keeper) GetAuthorization(ctx context.Context, grantee, granter sdk.AccAddress, msgType string) (authz.Authorization, *time.Time) { sdkCtx := sdk.UnwrapSDKContext(ctx) - grant, found := k.getGrant(ctx, grantStoreKey(grantee, granter, msgType)) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAuthorization")() + grant, found := k.getGrant(sdkCtx, grantStoreKey(grantee, granter, msgType)) if !found || (grant.Expiration != nil && grant.Expiration.Before(sdkCtx.BlockHeader().Time)) { return nil, nil } @@ -337,7 +354,10 @@ func (k Keeper) GetAuthorization(ctx context.Context, grantee, granter sdk.AccAd func (k Keeper) IterateGrants(ctx context.Context, handler func(granterAddr, granteeAddr sdk.AccAddress, grant authz.Grant) bool, ) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateGrants")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, GrantKey) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -350,8 +370,11 @@ func (k Keeper) IterateGrants(ctx context.Context, } } -func (k Keeper) getGrantQueueItem(ctx context.Context, expiration time.Time, granter, grantee sdk.AccAddress) (*authz.GrantQueueItem, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) getGrantQueueItem(ctx context.Context, expiration time.Time, granter, grantee sdk.AccAddress) (meterResult *authz.GrantQueueItem, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getGrantQueueItem")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(GrantQueueKey(expiration, granter, grantee)) if err != nil { return nil, err @@ -362,7 +385,7 @@ func (k Keeper) getGrantQueueItem(ctx context.Context, expiration time.Time, gra } var queueItems authz.GrantQueueItem - if err := k.cdc.Unmarshal(bz, &queueItems); err != nil { + if err = k.cdc.Unmarshal(bz, &queueItems); err != nil { return nil, err } return &queueItems, nil @@ -370,8 +393,11 @@ func (k Keeper) getGrantQueueItem(ctx context.Context, expiration time.Time, gra func (k Keeper) setGrantQueueItem(ctx context.Context, expiration time.Time, granter, grantee sdk.AccAddress, queueItems *authz.GrantQueueItem, -) error { - store := k.storeService.OpenKVStore(ctx) +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "setGrantQueueItem")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.cdc.Marshal(queueItems) if err != nil { return err @@ -380,19 +406,25 @@ func (k Keeper) setGrantQueueItem(ctx context.Context, expiration time.Time, } // insertIntoGrantQueue inserts a grant key into the grant queue -func (k Keeper) insertIntoGrantQueue(ctx context.Context, granter, grantee sdk.AccAddress, msgType string, expiration time.Time) error { - queueItems, err := k.getGrantQueueItem(ctx, expiration, granter, grantee) +func (k Keeper) insertIntoGrantQueue(ctx context.Context, granter, grantee sdk.AccAddress, msgType string, expiration time.Time) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "insertIntoGrantQueue")(&err) + + queueItems, err := k.getGrantQueueItem(sdkCtx, expiration, granter, grantee) if err != nil { return err } queueItems.MsgTypeUrls = append(queueItems.MsgTypeUrls, msgType) - return k.setGrantQueueItem(ctx, expiration, granter, grantee, queueItems) + return k.setGrantQueueItem(sdkCtx, expiration, granter, grantee, queueItems) } // removeFromGrantQueue removes a grant key from the grant queue -func (k Keeper) removeFromGrantQueue(ctx context.Context, grantKey []byte, granter, grantee sdk.AccAddress, expiration time.Time) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) removeFromGrantQueue(ctx context.Context, grantKey []byte, granter, grantee sdk.AccAddress, expiration time.Time) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "removeFromGrantQueue")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) key := GrantQueueKey(expiration, granter, grantee) bz, err := store.Get(key) if err != nil { @@ -404,14 +436,13 @@ func (k Keeper) removeFromGrantQueue(ctx context.Context, grantKey []byte, grant } var queueItem authz.GrantQueueItem - if err := k.cdc.Unmarshal(bz, &queueItem); err != nil { + if err = k.cdc.Unmarshal(bz, &queueItem); err != nil { return err } _, _, msgType := parseGrantStoreKey(grantKey) queueItems := queueItem.MsgTypeUrls - sdkCtx := sdk.UnwrapSDKContext(ctx) for index, typeURL := range queueItems { sdkCtx.GasMeter().ConsumeGas(gasCostPerIteration, "grant queue") @@ -420,7 +451,7 @@ func (k Keeper) removeFromGrantQueue(ctx context.Context, grantKey []byte, grant queueItems[index] = queueItems[end] queueItems = queueItems[:end] - if err := k.setGrantQueueItem(ctx, expiration, granter, grantee, &authz.GrantQueueItem{ + if err = k.setGrantQueueItem(sdkCtx, expiration, granter, grantee, &authz.GrantQueueItem{ MsgTypeUrls: queueItems, }); err != nil { return err @@ -433,9 +464,11 @@ func (k Keeper) removeFromGrantQueue(ctx context.Context, grantKey []byte, grant } // DequeueAndDeleteExpiredGrants deletes expired grants from the state and grant queue. -func (k Keeper) DequeueAndDeleteExpiredGrants(ctx context.Context) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DequeueAndDeleteExpiredGrants(ctx context.Context) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DequeueAndDeleteExpiredGrants")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) iterator, err := store.Iterator(GrantQueuePrefix, storetypes.InclusiveEndBytes(GrantQueueTimePrefix(sdkCtx.BlockTime()))) if err != nil { @@ -445,7 +478,7 @@ func (k Keeper) DequeueAndDeleteExpiredGrants(ctx context.Context) error { for ; iterator.Valid(); iterator.Next() { var queueItem authz.GrantQueueItem - if err := k.cdc.Unmarshal(iterator.Value(), &queueItem); err != nil { + if err = k.cdc.Unmarshal(iterator.Value(), &queueItem); err != nil { return err } @@ -526,7 +559,9 @@ func (k Keeper) getGrantersOfGranteeForMsgType(c context.Context, grantee sdk.Ac // OnEnforcedRestrictionRemoveAuthorizations removes bank send authorization issued by userAddr as granter, // and to userAddr as a grantee. To be used in callbacks for handling blacklisting by permissions module. -func (k Keeper) OnEnforcedRestrictionRemoveAuthorizations(ctx sdk.Context, userAddr sdk.AccAddress) error { +func (k Keeper) OnEnforcedRestrictionRemoveAuthorizations(ctx sdk.Context, userAddr sdk.AccAddress) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "OnEnforcedRestrictionRemoveAuthorizations")(&err) + msgTypeURL := banktypes.SendAuthorization{}.MsgTypeURL() // delete user as granter authorization @@ -554,3 +589,11 @@ func (k Keeper) OnEnforcedRestrictionRemoveAuthorizations(ctx sdk.Context, userA return nil } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(authz.ModuleName, metrics.Tag("svc", authz.ModuleName)) + } + + return k.meter +} diff --git a/x/authz/keeper/msg_server.go b/x/authz/keeper/msg_server.go index 9f95a843160c..47c6c1c6d9ed 100644 --- a/x/authz/keeper/msg_server.go +++ b/x/authz/keeper/msg_server.go @@ -17,7 +17,10 @@ import ( var _ authz.MsgServer = Keeper{} // Grant implements the MsgServer.Grant method to create a new grant. -func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGrantResponse, error) { +func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (meterResult *authz.MsgGrantResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Grant")(&err) + if strings.EqualFold(msg.Grantee, msg.Granter) { return nil, authz.ErrGranteeIsGranter } @@ -32,20 +35,20 @@ func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGra return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid granter address: %s", err) } - if err := msg.Grant.ValidateBasic(); err != nil { + if err = msg.Grant.ValidateBasic(); err != nil { return nil, err } // create the account if it is not in account state - ctx := sdk.UnwrapSDKContext(goCtx) - granteeAcc := k.authKeeper.GetAccount(ctx, grantee) + + granteeAcc := k.authKeeper.GetAccount(sdkCtx, grantee) if granteeAcc == nil { if k.bankKeeper.BlockedAddr(grantee) { return nil, sdkerrors.ErrUnauthorized.Wrapf("%s is not allowed to receive funds", grantee) } - granteeAcc = k.authKeeper.NewAccountWithAddress(ctx, grantee) - k.authKeeper.SetAccount(ctx, granteeAcc) + granteeAcc = k.authKeeper.NewAccountWithAddress(sdkCtx, grantee) + k.authKeeper.SetAccount(sdkCtx, granteeAcc) } authorization, err := msg.GetAuthorization() @@ -61,16 +64,16 @@ func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGra // check if granter or grantee are blacklisted for enforced restrictions denoms if sendAuth, ok := authorization.(*banktypes.SendAuthorization); k.permissionsKeeper != nil && ok { for _, denom := range sendAuth.SpendLimit.Denoms() { - if k.permissionsKeeper.IsEnforcedRestrictionsDenom(ctx, denom) { + if k.permissionsKeeper.IsEnforcedRestrictionsDenom(sdkCtx, denom) { fakeAmount := sdk.NewCoin(denom, math.ZeroInt()) - if _, err := k.permissionsKeeper.SendRestrictionFn(ctx, granter, grantee, fakeAmount); err != nil { + if _, err := k.permissionsKeeper.SendRestrictionFn(sdkCtx, granter, grantee, fakeAmount); err != nil { return nil, sdkerrors.ErrUnauthorized.Wrapf("permissions check failed for enforced denom %s: %s", denom, err.Error()) } } } } - err = k.SaveGrant(ctx, grantee, granter, authorization, msg.Grant.Expiration) + err = k.SaveGrant(sdkCtx, grantee, granter, authorization, msg.Grant.Expiration) if err != nil { return nil, err } @@ -79,7 +82,10 @@ func (k Keeper) Grant(goCtx context.Context, msg *authz.MsgGrant) (*authz.MsgGra } // Revoke implements the MsgServer.Revoke method. -func (k Keeper) Revoke(goCtx context.Context, msg *authz.MsgRevoke) (*authz.MsgRevokeResponse, error) { +func (k Keeper) Revoke(goCtx context.Context, msg *authz.MsgRevoke) (meterResult *authz.MsgRevokeResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Revoke")(&err) + if strings.EqualFold(msg.Grantee, msg.Granter) { return nil, authz.ErrGranteeIsGranter } @@ -98,8 +104,7 @@ func (k Keeper) Revoke(goCtx context.Context, msg *authz.MsgRevoke) (*authz.MsgR return nil, sdkerrors.ErrInvalidRequest.Wrap("missing msg method name") } - ctx := sdk.UnwrapSDKContext(goCtx) - if err = k.DeleteGrant(ctx, grantee, granter, msg.MsgTypeUrl); err != nil { + if err = k.DeleteGrant(sdkCtx, grantee, granter, msg.MsgTypeUrl); err != nil { return nil, err } @@ -107,8 +112,10 @@ func (k Keeper) Revoke(goCtx context.Context, msg *authz.MsgRevoke) (*authz.MsgR } // Exec implements the MsgServer.Exec method. -func (k Keeper) Exec(goCtx context.Context, msg *authz.MsgExec) (*authz.MsgExecResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) Exec(goCtx context.Context, msg *authz.MsgExec) (meterResult *authz.MsgExecResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Exec")(&err) + if msg.Grantee == "" { return nil, errors.New("empty address string is not allowed") } @@ -127,11 +134,11 @@ func (k Keeper) Exec(goCtx context.Context, msg *authz.MsgExec) (*authz.MsgExecR return nil, err } - if err := validateMsgs(msgs); err != nil { + if err = validateMsgs(msgs); err != nil { return nil, err } - results, err := k.DispatchActions(ctx, grantee, msgs) + results, err := k.DispatchActions(sdkCtx, grantee, msgs) if err != nil { return nil, err } @@ -156,6 +163,9 @@ func validateMsgs(msgs []sdk.Msg) error { // ExecCompat implements the MsgServer.ExecCompat method. // Deprecated: This method is deprecated and disabled. It will be removed in a future version. -func (k Keeper) ExecCompat(goCtx context.Context, msg *authz.MsgExecCompat) (*authz.MsgExecCompatResponse, error) { +func (k Keeper) ExecCompat(goCtx context.Context, msg *authz.MsgExecCompat) (meterResult *authz.MsgExecCompatResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "ExecCompat")(&err) + return nil, sdkerrors.ErrInvalidRequest.Wrap("MsgExecCompat is deprecated and has been disabled") } diff --git a/x/authz/module/abci.go b/x/authz/module/abci.go index fc405bb8f06f..6533a111bb43 100644 --- a/x/authz/module/abci.go +++ b/x/authz/module/abci.go @@ -6,7 +6,8 @@ import ( ) // BeginBlocker is called at the beginning of every block -func BeginBlocker(ctx sdk.Context, keeper keeper.Keeper) error { +func BeginBlocker(ctx sdk.Context, keeper keeper.Keeper) (err error) { + defer keeper.Meter(ctx).FuncTiming(&ctx, "BeginBlocker")(&err) // delete all the mature grants return keeper.DequeueAndDeleteExpiredGrants(ctx) } diff --git a/x/bank/keeper/genesis.go b/x/bank/keeper/genesis.go index cb208b22d33b..df49c44ff3f0 100644 --- a/x/bank/keeper/genesis.go +++ b/x/bank/keeper/genesis.go @@ -13,12 +13,16 @@ import ( // InitGenesis initializes the bank module's state from a given genesis state. func (k BaseKeeper) InitGenesis(ctx context.Context, genState *types.GenesisState) { - if err := k.SetParams(ctx, genState.Params); err != nil { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "InitGenesis")(&err) + + if err = k.SetParams(sdkCtx, genState.Params); err != nil { panic(err) } for _, se := range genState.GetAllSendEnabled() { - k.SetSendEnabled(ctx, se.Denom, se.Enabled) + k.SetSendEnabled(sdkCtx, se.Denom, se.Enabled) } totalSupplyMap := sdk.NewMapCoins(sdk.Coins{}) @@ -32,7 +36,7 @@ func (k BaseKeeper) InitGenesis(ctx context.Context, genState *types.GenesisStat } for _, coin := range balance.Coins { - err := k.Balances.Set(ctx, collections.Join(sdk.AccAddress(bz), coin.Denom), coin.Amount) + err = k.Balances.Set(sdkCtx, collections.Join(sdk.AccAddress(bz), coin.Denom), coin.Amount) if err != nil { panic(err) } @@ -43,31 +47,37 @@ func (k BaseKeeper) InitGenesis(ctx context.Context, genState *types.GenesisStat totalSupply := totalSupplyMap.ToCoins() if !genState.Supply.Empty() && !genState.Supply.Equal(totalSupply) { - panic(fmt.Errorf("genesis supply is incorrect, expected %v, got %v", genState.Supply, totalSupply)) + err = fmt.Errorf("genesis supply is incorrect, expected %v, got %v", genState.Supply, totalSupply) + panic(err) } for _, supply := range totalSupply { - k.setSupply(ctx, supply) + k.setSupply(sdkCtx, supply) } for _, meta := range genState.DenomMetadata { - k.SetDenomMetaData(ctx, meta) + k.SetDenomMetaData(sdkCtx, meta) } } // ExportGenesis returns the bank module's genesis state. func (k BaseKeeper) ExportGenesis(ctx context.Context) *types.GenesisState { - totalSupply, _, err := k.GetPaginatedTotalSupply(ctx, &query.PageRequest{Limit: query.PaginationMaxLimit}) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ExportGenesis")(&err) + + totalSupply, _, err := k.GetPaginatedTotalSupply(sdkCtx, &query.PageRequest{Limit: query.PaginationMaxLimit}) if err != nil { - panic(fmt.Errorf("unable to fetch total supply %v", err)) + err = fmt.Errorf("unable to fetch total supply %v", err) + panic(err) } rv := types.NewGenesisState( - k.GetParams(ctx), - k.GetAccountsBalances(ctx), + k.GetParams(sdkCtx), + k.GetAccountsBalances(sdkCtx), totalSupply, - k.GetAllDenomMetaData(ctx), - k.GetAllSendEnabledEntries(ctx), + k.GetAllDenomMetaData(sdkCtx), + k.GetAllSendEnabledEntries(sdkCtx), ) return rv } diff --git a/x/bank/keeper/grpc_query.go b/x/bank/keeper/grpc_query.go index c172fb24e649..2e495a44199c 100644 --- a/x/bank/keeper/grpc_query.go +++ b/x/bank/keeper/grpc_query.go @@ -27,16 +27,18 @@ func NewQuerier(keeper *BaseKeeper) Querier { } // Balance implements the Query/Balance gRPC method -func (k BaseKeeper) Balance(ctx context.Context, req *types.QueryBalanceRequest) (*types.QueryBalanceResponse, error) { +func (k BaseKeeper) Balance(ctx context.Context, req *types.QueryBalanceRequest) (meterResult *types.QueryBalanceResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Balance")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } - if err := sdk.ValidateDenom(req.Denom); err != nil { + if err = sdk.ValidateDenom(req.Denom); err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) } - sdkCtx := sdk.UnwrapSDKContext(ctx) address, err := k.ak.AddressCodec().StringToBytes(req.Address) if err != nil { return nil, status.Errorf(codes.InvalidArgument, "invalid address: %s", err.Error()) @@ -48,7 +50,10 @@ func (k BaseKeeper) Balance(ctx context.Context, req *types.QueryBalanceRequest) } // AllBalances implements the Query/AllBalances gRPC method -func (k BaseKeeper) AllBalances(ctx context.Context, req *types.QueryAllBalancesRequest) (*types.QueryAllBalancesResponse, error) { +func (k BaseKeeper) AllBalances(ctx context.Context, req *types.QueryAllBalancesRequest) (meterResult *types.QueryAllBalancesResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "AllBalances")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -58,9 +63,8 @@ func (k BaseKeeper) AllBalances(ctx context.Context, req *types.QueryAllBalances return nil, status.Errorf(codes.InvalidArgument, "invalid address: %s", err.Error()) } - sdkCtx := sdk.UnwrapSDKContext(ctx) balances, pageRes, err := query.CollectionPaginate( - ctx, + sdkCtx, k.Balances, req.Pagination, func(key collections.Pair[sdk.AccAddress, string], value math.Int) (sdk.Coin, error) { @@ -82,7 +86,10 @@ func (k BaseKeeper) AllBalances(ctx context.Context, req *types.QueryAllBalances // SpendableBalances implements a gRPC query handler for retrieving an account's // spendable balances. -func (k BaseKeeper) SpendableBalances(ctx context.Context, req *types.QuerySpendableBalancesRequest) (*types.QuerySpendableBalancesResponse, error) { +func (k BaseKeeper) SpendableBalances(ctx context.Context, req *types.QuerySpendableBalancesRequest) (meterResult *types.QuerySpendableBalancesResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SpendableBalances")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -92,11 +99,9 @@ func (k BaseKeeper) SpendableBalances(ctx context.Context, req *types.QuerySpend return nil, status.Errorf(codes.InvalidArgument, "invalid address: %s", err.Error()) } - sdkCtx := sdk.UnwrapSDKContext(ctx) - zeroAmt := math.ZeroInt() - balances, pageRes, err := query.CollectionPaginate(ctx, k.Balances, req.Pagination, func(key collections.Pair[sdk.AccAddress, string], _ math.Int) (coin sdk.Coin, err error) { + balances, pageRes, err := query.CollectionPaginate(sdkCtx, k.Balances, req.Pagination, func(key collections.Pair[sdk.AccAddress, string], _ math.Int) (coin sdk.Coin, err error) { return sdk.NewCoin(key.K2(), zeroAmt), nil }, query.WithCollectionPaginationPairPrefix[sdk.AccAddress, string](addr)) if err != nil { @@ -115,7 +120,10 @@ func (k BaseKeeper) SpendableBalances(ctx context.Context, req *types.QuerySpend // SpendableBalanceByDenom implements a gRPC query handler for retrieving an account's // spendable balance for a specific denom. -func (k BaseKeeper) SpendableBalanceByDenom(ctx context.Context, req *types.QuerySpendableBalanceByDenomRequest) (*types.QuerySpendableBalanceByDenomResponse, error) { +func (k BaseKeeper) SpendableBalanceByDenom(ctx context.Context, req *types.QuerySpendableBalanceByDenomRequest) (meterResult *types.QuerySpendableBalanceByDenomResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SpendableBalanceByDenom")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -125,20 +133,20 @@ func (k BaseKeeper) SpendableBalanceByDenom(ctx context.Context, req *types.Quer return nil, status.Errorf(codes.InvalidArgument, "invalid address: %s", err.Error()) } - if err := sdk.ValidateDenom(req.Denom); err != nil { + if err = sdk.ValidateDenom(req.Denom); err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) } - sdkCtx := sdk.UnwrapSDKContext(ctx) - spendable := k.SpendableCoin(sdkCtx, addr, req.Denom) return &types.QuerySpendableBalanceByDenomResponse{Balance: &spendable}, nil } // TotalSupply implements the Query/TotalSupply gRPC method -func (k BaseKeeper) TotalSupply(ctx context.Context, req *types.QueryTotalSupplyRequest) (*types.QueryTotalSupplyResponse, error) { +func (k BaseKeeper) TotalSupply(ctx context.Context, req *types.QueryTotalSupplyRequest) (meterResult *types.QueryTotalSupplyResponse, err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "TotalSupply")(&err) + totalSupply, pageRes, err := k.GetPaginatedTotalSupply(sdkCtx, req.Pagination) if err != nil { return nil, status.Error(codes.Internal, err.Error()) @@ -148,39 +156,46 @@ func (k BaseKeeper) TotalSupply(ctx context.Context, req *types.QueryTotalSupply } // SupplyOf implements the Query/SupplyOf gRPC method -func (k BaseKeeper) SupplyOf(c context.Context, req *types.QuerySupplyOfRequest) (*types.QuerySupplyOfResponse, error) { +func (k BaseKeeper) SupplyOf(c context.Context, req *types.QuerySupplyOfRequest) (meterResult *types.QuerySupplyOfResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.Meter(c).FuncTiming(&sdkCtx, "SupplyOf")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } - if err := sdk.ValidateDenom(req.Denom); err != nil { + if err = sdk.ValidateDenom(req.Denom); err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) } - ctx := sdk.UnwrapSDKContext(c) - supply := k.GetSupply(ctx, req.Denom) + supply := k.GetSupply(sdkCtx, req.Denom) return &types.QuerySupplyOfResponse{Amount: sdk.NewCoin(req.Denom, supply.Amount)}, nil } // Params implements the gRPC service handler for querying x/bank parameters. -func (k BaseKeeper) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (k BaseKeeper) Params(ctx context.Context, req *types.QueryParamsRequest) (meterResult *types.QueryParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Params")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - sdkCtx := sdk.UnwrapSDKContext(ctx) params := k.GetParams(sdkCtx) return &types.QueryParamsResponse{Params: params}, nil } // DenomsMetadata implements Query/DenomsMetadata gRPC method. -func (k BaseKeeper) DenomsMetadata(c context.Context, req *types.QueryDenomsMetadataRequest) (*types.QueryDenomsMetadataResponse, error) { +func (k BaseKeeper) DenomsMetadata(c context.Context, req *types.QueryDenomsMetadataRequest) (meterResult *types.QueryDenomsMetadataResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.Meter(c).FuncTiming(&sdkCtx, "DenomsMetadata")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - kvStore := runtime.KVStoreAdapter(k.storeService.OpenKVStore(c)) + kvStore := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) store := prefix.NewStore(kvStore, types.DenomMetadataPrefix) metadatas := []types.Metadata{} @@ -202,18 +217,19 @@ func (k BaseKeeper) DenomsMetadata(c context.Context, req *types.QueryDenomsMeta } // DenomMetadata implements Query/DenomMetadata gRPC method. -func (k BaseKeeper) DenomMetadata(c context.Context, req *types.QueryDenomMetadataRequest) (*types.QueryDenomMetadataResponse, error) { +func (k BaseKeeper) DenomMetadata(c context.Context, req *types.QueryDenomMetadataRequest) (meterResult *types.QueryDenomMetadataResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.Meter(c).FuncTiming(&sdkCtx, "DenomMetadata")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - if err := sdk.ValidateDenom(req.Denom); err != nil { + if err = sdk.ValidateDenom(req.Denom); err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) } - ctx := sdk.UnwrapSDKContext(c) - - metadata, found := k.GetDenomMetaData(ctx, req.Denom) + metadata, found := k.GetDenomMetaData(sdkCtx, req.Denom) if !found { return nil, status.Errorf(codes.NotFound, "client metadata for denom %s", req.Denom) } @@ -224,12 +240,15 @@ func (k BaseKeeper) DenomMetadata(c context.Context, req *types.QueryDenomMetada } // DenomMetadataByQueryString is identical to DenomMetadata query, but receives request via query string. -func (k BaseKeeper) DenomMetadataByQueryString(c context.Context, req *types.QueryDenomMetadataByQueryStringRequest) (*types.QueryDenomMetadataByQueryStringResponse, error) { +func (k BaseKeeper) DenomMetadataByQueryString(c context.Context, req *types.QueryDenomMetadataByQueryStringRequest) (meterResult *types.QueryDenomMetadataByQueryStringResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.Meter(c).FuncTiming(&sdkCtx, "DenomMetadataByQueryString")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - res, err := k.DenomMetadata(c, &types.QueryDenomMetadataRequest{ + res, err := k.DenomMetadata(sdkCtx, &types.QueryDenomMetadataRequest{ Denom: req.Denom, }) if err != nil { @@ -242,21 +261,24 @@ func (k BaseKeeper) DenomMetadataByQueryString(c context.Context, req *types.Que func (k BaseKeeper) DenomOwners( ctx context.Context, req *types.QueryDenomOwnersRequest, -) (*types.QueryDenomOwnersResponse, error) { +) (meterResult *types.QueryDenomOwnersResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DenomOwners")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - if err := sdk.ValidateDenom(req.Denom); err != nil { + if err = sdk.ValidateDenom(req.Denom); err != nil { return nil, status.Error(codes.InvalidArgument, err.Error()) } denomOwners, pageRes, err := query.CollectionPaginate( - ctx, + sdkCtx, k.Balances.Indexes.Denom, req.Pagination, func(key collections.Pair[string, sdk.AccAddress], value collections.NoValue) (*types.DenomOwner, error) { - amt, err := k.Balances.Get(ctx, collections.Join(key.K2(), req.Denom)) + amt, err := k.Balances.Get(sdkCtx, collections.Join(key.K2(), req.Denom)) if err != nil { return nil, err } @@ -271,21 +293,24 @@ func (k BaseKeeper) DenomOwners( return &types.QueryDenomOwnersResponse{DenomOwners: denomOwners, Pagination: pageRes}, nil } -func (k BaseKeeper) SendEnabled(goCtx context.Context, req *types.QuerySendEnabledRequest) (*types.QuerySendEnabledResponse, error) { +func (k BaseKeeper) SendEnabled(goCtx context.Context, req *types.QuerySendEnabledRequest) (meterResult *types.QuerySendEnabledResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "SendEnabled")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - ctx := sdk.UnwrapSDKContext(goCtx) + resp := &types.QuerySendEnabledResponse{} if len(req.Denoms) > 0 { for _, denom := range req.Denoms { - if se, ok := k.getSendEnabled(ctx, denom); ok { + if se, ok := k.getSendEnabled(sdkCtx, denom); ok { resp.SendEnabled = append(resp.SendEnabled, types.NewSendEnabled(denom, se)) } } } else { results, pageResp, err := query.CollectionPaginate( - ctx, + sdkCtx, k.BaseViewKeeper.SendEnabled, req.Pagination, func(key string, value bool) (*types.SendEnabled, error) { return types.NewSendEnabled(key, value), nil @@ -302,11 +327,14 @@ func (k BaseKeeper) SendEnabled(goCtx context.Context, req *types.QuerySendEnabl } // DenomOwnersByQuery is identical to DenomOwner query, but receives denom values via query string. -func (k BaseKeeper) DenomOwnersByQuery(ctx context.Context, req *types.QueryDenomOwnersByQueryRequest) (*types.QueryDenomOwnersByQueryResponse, error) { +func (k BaseKeeper) DenomOwnersByQuery(ctx context.Context, req *types.QueryDenomOwnersByQueryRequest) (meterResult *types.QueryDenomOwnersByQueryResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DenomOwnersByQuery")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - resp, err := k.DenomOwners(ctx, &types.QueryDenomOwnersRequest{ + resp, err := k.DenomOwners(sdkCtx, &types.QueryDenomOwnersRequest{ Denom: req.Denom, Pagination: req.Pagination, }) diff --git a/x/bank/keeper/keeper.go b/x/bank/keeper/keeper.go index e33a3d7f3748..eb2236541e29 100644 --- a/x/bank/keeper/keeper.go +++ b/x/bank/keeper/keeper.go @@ -72,8 +72,11 @@ type BaseKeeper struct { } // GetPaginatedTotalSupply queries for the supply, ignoring 0 coins, with a given pagination -func (k BaseKeeper) GetPaginatedTotalSupply(ctx context.Context, pagination *query.PageRequest) (sdk.Coins, *query.PageResponse, error) { - coins, pageResp, err := query.CollectionPaginate(ctx, k.Supply, pagination, func(key string, value math.Int) (sdk.Coin, error) { +func (k BaseKeeper) GetPaginatedTotalSupply(ctx context.Context, pagination *query.PageRequest) (meterResult sdk.Coins, meterResult1 *query.PageResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetPaginatedTotalSupply")(&err) + + coins, pageResp, err := query.CollectionPaginate(sdkCtx, k.Supply, pagination, func(key string, value math.Int) (sdk.Coin, error) { return sdk.NewCoin(key, value), nil }) if err != nil { @@ -131,8 +134,11 @@ func (k BaseKeeper) WithMintCoinsRestriction(check types.MintingRestrictionFn) B // vesting and vested coins. The coins are then transferred from the delegator // address to a ModuleAccount address. If any of the delegation amounts are negative, // an error is returned. -func (k BaseKeeper) DelegateCoins(ctx context.Context, delegatorAddr, moduleAccAddr sdk.AccAddress, amt sdk.Coins) error { - moduleAcc := k.ak.GetAccount(ctx, moduleAccAddr) +func (k BaseKeeper) DelegateCoins(ctx context.Context, delegatorAddr, moduleAccAddr sdk.AccAddress, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DelegateCoins")(&err) + + moduleAcc := k.ak.GetAccount(sdkCtx, moduleAccAddr) if moduleAcc == nil { return errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", moduleAccAddr) } @@ -144,7 +150,7 @@ func (k BaseKeeper) DelegateCoins(ctx context.Context, delegatorAddr, moduleAccA balances := sdk.NewCoins() for _, coin := range amt { - balance := k.GetBalance(ctx, delegatorAddr, coin.GetDenom()) + balance := k.GetBalance(sdkCtx, delegatorAddr, coin.GetDenom()) if balance.IsLT(coin) { return errorsmod.Wrapf( sdkerrors.ErrInsufficientFunds, "failed to delegate; %s is smaller than %s", balance, amt, @@ -152,22 +158,21 @@ func (k BaseKeeper) DelegateCoins(ctx context.Context, delegatorAddr, moduleAccA } balances = balances.Add(balance) - err := k.setBalance(ctx, delegatorAddr, balance.Sub(coin)) + err = k.setBalance(sdkCtx, delegatorAddr, balance.Sub(coin)) if err != nil { return err } } - if err := k.trackDelegation(ctx, delegatorAddr, balances, amt); err != nil { + if err = k.trackDelegation(sdkCtx, delegatorAddr, balances, amt); err != nil { return errorsmod.Wrap(err, "failed to track delegation") } // emit coin spent event - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( types.NewCoinSpentEvent(delegatorAddr, amt), ) - err := k.addCoins(ctx, moduleAccAddr, amt) + err = k.addCoins(sdkCtx, moduleAccAddr, amt) if err != nil { return err } @@ -180,8 +185,11 @@ func (k BaseKeeper) DelegateCoins(ctx context.Context, delegatorAddr, moduleAccA // vesting and vested coins. The coins are then transferred from a ModuleAccount // address to the delegator address. If any of the undelegation amounts are // negative, an error is returned. -func (k BaseKeeper) UndelegateCoins(ctx context.Context, moduleAccAddr, delegatorAddr sdk.AccAddress, amt sdk.Coins) error { - moduleAcc := k.ak.GetAccount(ctx, moduleAccAddr) +func (k BaseKeeper) UndelegateCoins(ctx context.Context, moduleAccAddr, delegatorAddr sdk.AccAddress, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UndelegateCoins")(&err) + + moduleAcc := k.ak.GetAccount(sdkCtx, moduleAccAddr) if moduleAcc == nil { return errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", moduleAccAddr) } @@ -190,16 +198,16 @@ func (k BaseKeeper) UndelegateCoins(ctx context.Context, moduleAccAddr, delegato return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, amt.String()) } - err := k.subUnlockedCoins(ctx, moduleAccAddr, amt, false) + err = k.subUnlockedCoins(sdkCtx, moduleAccAddr, amt, false) if err != nil { return err } - if err := k.trackUndelegation(ctx, delegatorAddr, amt); err != nil { + if err = k.trackUndelegation(sdkCtx, delegatorAddr, amt); err != nil { return errorsmod.Wrap(err, "failed to track undelegation") } - err = k.addCoins(ctx, delegatorAddr, amt) + err = k.addCoins(sdkCtx, delegatorAddr, amt) if err != nil { return err } @@ -209,7 +217,10 @@ func (k BaseKeeper) UndelegateCoins(ctx context.Context, moduleAccAddr, delegato // GetSupply retrieves the Supply from store func (k BaseKeeper) GetSupply(ctx context.Context, denom string) sdk.Coin { - amt, err := k.Supply.Get(ctx, denom) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetSupply")() + + amt, err := k.Supply.Get(sdkCtx, denom) if err != nil { return sdk.NewCoin(denom, math.ZeroInt()) } @@ -218,27 +229,39 @@ func (k BaseKeeper) GetSupply(ctx context.Context, denom string) sdk.Coin { // HasSupply checks if the supply coin exists in store. func (k BaseKeeper) HasSupply(ctx context.Context, denom string) bool { - has, err := k.Supply.Has(ctx, denom) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HasSupply")() + + has, err := k.Supply.Has(sdkCtx, denom) return has && err == nil } // GetDenomMetaData retrieves the denomination metadata. returns the metadata and true if the denom exists, // false otherwise. func (k BaseKeeper) GetDenomMetaData(ctx context.Context, denom string) (types.Metadata, bool) { - m, err := k.BaseViewKeeper.DenomMetadata.Get(ctx, denom) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDenomMetaData")() + + m, err := k.BaseViewKeeper.DenomMetadata.Get(sdkCtx, denom) return m, err == nil } // HasDenomMetaData checks if the denomination metadata exists in store. func (k BaseKeeper) HasDenomMetaData(ctx context.Context, denom string) bool { - has, err := k.BaseViewKeeper.DenomMetadata.Has(ctx, denom) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HasDenomMetaData")() + + has, err := k.BaseViewKeeper.DenomMetadata.Has(sdkCtx, denom) return has && err == nil } // GetAllDenomMetaData retrieves all denominations metadata func (k BaseKeeper) GetAllDenomMetaData(ctx context.Context) []types.Metadata { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllDenomMetaData")() + denomMetaData := make([]types.Metadata, 0) - k.IterateAllDenomMetaData(ctx, func(metadata types.Metadata) bool { + k.IterateAllDenomMetaData(sdkCtx, func(metadata types.Metadata) bool { denomMetaData = append(denomMetaData, metadata) return false }) @@ -250,7 +273,11 @@ func (k BaseKeeper) GetAllDenomMetaData(ctx context.Context) []types.Metadata { // provides the metadata to a callback. If true is returned from the // callback, iteration is halted. func (k BaseKeeper) IterateAllDenomMetaData(ctx context.Context, cb func(types.Metadata) bool) { - err := k.BaseViewKeeper.DenomMetadata.Walk(ctx, nil, func(_ string, metadata types.Metadata) (stop bool, err error) { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateAllDenomMetaData")(&err) + + err = k.BaseViewKeeper.DenomMetadata.Walk(sdkCtx, nil, func(_ string, metadata types.Metadata) (stop bool, err error) { return cb(metadata), nil }) if err != nil { @@ -281,7 +308,10 @@ func (k BaseKeeper) IterateDenomsWithMetaData(ctx context.Context, ranger collec // SetDenomMetaData sets the denominations metadata func (k BaseKeeper) SetDenomMetaData(ctx context.Context, denomMetaData types.Metadata) { - _ = k.BaseViewKeeper.DenomMetadata.Set(ctx, denomMetaData.Base, denomMetaData) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetDenomMetaData")() + + _ = k.BaseViewKeeper.DenomMetadata.Set(sdkCtx, denomMetaData.Base, denomMetaData) } // SendCoinsFromModuleToAccount transfers coins from a ModuleAccount to an AccAddress. @@ -289,7 +319,10 @@ func (k BaseKeeper) SetDenomMetaData(ctx context.Context, denomMetaData types.Me // the recipient address is black-listed or if sending the tokens fails. func (k BaseKeeper) SendCoinsFromModuleToAccount( ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins, -) error { +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SendCoinsFromModuleToAccount")(&err) + senderAddr := k.ak.GetModuleAddress(senderModule) if senderAddr == nil { panic(errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", senderModule)) @@ -299,38 +332,44 @@ func (k BaseKeeper) SendCoinsFromModuleToAccount( return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", recipientAddr) } - return k.SendCoins(ctx, senderAddr, recipientAddr, amt) + return k.SendCoins(sdkCtx, senderAddr, recipientAddr, amt) } // SendCoinsFromModuleToModule transfers coins from a ModuleAccount to another. // It will panic if either module account does not exist. func (k BaseKeeper) SendCoinsFromModuleToModule( ctx context.Context, senderModule, recipientModule string, amt sdk.Coins, -) error { +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SendCoinsFromModuleToModule")(&err) + senderAddr := k.ak.GetModuleAddress(senderModule) if senderAddr == nil { panic(errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", senderModule)) } - recipientAcc := k.ak.GetModuleAccount(ctx, recipientModule) + recipientAcc := k.ak.GetModuleAccount(sdkCtx, recipientModule) if recipientAcc == nil { panic(errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", recipientModule)) } - return k.SendCoins(ctx, senderAddr, recipientAcc.GetAddress(), amt) + return k.SendCoins(sdkCtx, senderAddr, recipientAcc.GetAddress(), amt) } // SendCoinsFromAccountToModule transfers coins from an AccAddress to a ModuleAccount. // It will panic if the module account does not exist. func (k BaseKeeper) SendCoinsFromAccountToModule( ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins, -) error { - recipientAcc := k.ak.GetModuleAccount(ctx, recipientModule) +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SendCoinsFromAccountToModule")(&err) + + recipientAcc := k.ak.GetModuleAccount(sdkCtx, recipientModule) if recipientAcc == nil { panic(errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", recipientModule)) } - return k.SendCoins(ctx, senderAddr, recipientAcc.GetAddress(), amt) + return k.SendCoins(sdkCtx, senderAddr, recipientAcc.GetAddress(), amt) } // DelegateCoinsFromAccountToModule delegates coins and transfers them from a @@ -338,8 +377,11 @@ func (k BaseKeeper) SendCoinsFromAccountToModule( // does not exist or is unauthorized. func (k BaseKeeper) DelegateCoinsFromAccountToModule( ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins, -) error { - recipientAcc := k.ak.GetModuleAccount(ctx, recipientModule) +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DelegateCoinsFromAccountToModule")(&err) + + recipientAcc := k.ak.GetModuleAccount(sdkCtx, recipientModule) if recipientAcc == nil { panic(errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", recipientModule)) } @@ -348,7 +390,7 @@ func (k BaseKeeper) DelegateCoinsFromAccountToModule( panic(errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "module account %s does not have permissions to receive delegated coins", recipientModule)) } - return k.DelegateCoins(ctx, senderAddr, recipientAcc.GetAddress(), amt) + return k.DelegateCoins(sdkCtx, senderAddr, recipientAcc.GetAddress(), amt) } // UndelegateCoinsFromModuleToAccount undelegates the unbonding coins and transfers @@ -356,8 +398,11 @@ func (k BaseKeeper) DelegateCoinsFromAccountToModule( // module account does not exist or is unauthorized. func (k BaseKeeper) UndelegateCoinsFromModuleToAccount( ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins, -) error { - acc := k.ak.GetModuleAccount(ctx, senderModule) +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UndelegateCoinsFromModuleToAccount")(&err) + + acc := k.ak.GetModuleAccount(sdkCtx, senderModule) if acc == nil { panic(errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", senderModule)) } @@ -366,20 +411,21 @@ func (k BaseKeeper) UndelegateCoinsFromModuleToAccount( panic(errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "module account %s does not have permissions to undelegate coins", senderModule)) } - return k.UndelegateCoins(ctx, acc.GetAddress(), recipientAddr, amt) + return k.UndelegateCoins(sdkCtx, acc.GetAddress(), recipientAddr, amt) } // MintCoins creates new coins from thin air and adds it to the module account. // It will panic if the module account does not exist or is unauthorized. -func (k BaseKeeper) MintCoins(ctx context.Context, moduleName string, amounts sdk.Coins) error { +func (k BaseKeeper) MintCoins(ctx context.Context, moduleName string, amounts sdk.Coins) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "MintCoins")(&err) - err := k.mintCoinsRestrictionFn(ctx, amounts) + err = k.mintCoinsRestrictionFn(sdkCtx, amounts) if err != nil { k.logger.Error(fmt.Sprintf("Module %q attempted to mint coins %s it doesn't have permission for, error %v", moduleName, amounts, err)) return err } - acc := k.ak.GetModuleAccount(ctx, moduleName) + acc := k.ak.GetModuleAccount(sdkCtx, moduleName) if acc == nil { panic(errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", moduleName)) } @@ -388,15 +434,15 @@ func (k BaseKeeper) MintCoins(ctx context.Context, moduleName string, amounts sd panic(errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "module account %s does not have permissions to mint tokens", moduleName)) } - err = k.addCoins(ctx, acc.GetAddress(), amounts) + err = k.addCoins(sdkCtx, acc.GetAddress(), amounts) if err != nil { return err } for _, amount := range amounts { - supply := k.GetSupply(ctx, amount.GetDenom()) + supply := k.GetSupply(sdkCtx, amount.GetDenom()) supply = supply.Add(amount) - k.setSupply(ctx, supply) + k.setSupply(sdkCtx, supply) } k.logger.Debug("minted coins from module account", "amount", amounts.String(), "from", moduleName) @@ -411,8 +457,11 @@ func (k BaseKeeper) MintCoins(ctx context.Context, moduleName string, amounts sd // BurnCoins burns coins deletes coins from the balance of the module account. // It will panic if the module account does not exist or is unauthorized. -func (k BaseKeeper) BurnCoins(ctx context.Context, moduleName string, amounts sdk.Coins) error { - acc := k.ak.GetModuleAccount(ctx, moduleName) +func (k BaseKeeper) BurnCoins(ctx context.Context, moduleName string, amounts sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BurnCoins")(&err) + + acc := k.ak.GetModuleAccount(sdkCtx, moduleName) if acc == nil { panic(errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", moduleName)) } @@ -421,21 +470,20 @@ func (k BaseKeeper) BurnCoins(ctx context.Context, moduleName string, amounts sd panic(errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "module account %s does not have permissions to burn tokens", moduleName)) } - err := k.subUnlockedCoins(ctx, acc.GetAddress(), amounts, false) + err = k.subUnlockedCoins(sdkCtx, acc.GetAddress(), amounts, false) if err != nil { return err } for _, amount := range amounts { - supply := k.GetSupply(ctx, amount.GetDenom()) + supply := k.GetSupply(sdkCtx, amount.GetDenom()) supply = supply.Sub(amount) - k.setSupply(ctx, supply) + k.setSupply(sdkCtx, supply) } k.logger.Debug("burned tokens from module account", "amount", amounts.String(), "from", moduleName) // emit burn event - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( types.NewCoinBurnEvent(acc.GetAddress(), amounts), ) @@ -445,17 +493,23 @@ func (k BaseKeeper) BurnCoins(ctx context.Context, moduleName string, amounts sd // setSupply sets the supply for the given coin func (k BaseKeeper) setSupply(ctx context.Context, coin sdk.Coin) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "setSupply")() + // Bank invariants and IBC requires to remove zero coins. if coin.IsZero() { - _ = k.Supply.Remove(ctx, coin.Denom) + _ = k.Supply.Remove(sdkCtx, coin.Denom) } else { - _ = k.Supply.Set(ctx, coin.Denom, coin.Amount) + _ = k.Supply.Set(sdkCtx, coin.Denom, coin.Amount) } } // trackDelegation tracks the delegation of the given account if it is a vesting account -func (k BaseKeeper) trackDelegation(ctx context.Context, addr sdk.AccAddress, balance, amt sdk.Coins) error { - acc := k.ak.GetAccount(ctx, addr) +func (k BaseKeeper) trackDelegation(ctx context.Context, addr sdk.AccAddress, balance, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "trackDelegation")(&err) + + acc := k.ak.GetAccount(sdkCtx, addr) if acc == nil { return errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "account %s does not exist", addr) } @@ -463,17 +517,19 @@ func (k BaseKeeper) trackDelegation(ctx context.Context, addr sdk.AccAddress, ba vacc, ok := acc.(types.VestingAccount) if ok { // TODO: return error on account.TrackDelegation - sdkCtx := sdk.UnwrapSDKContext(ctx) vacc.TrackDelegation(sdkCtx.BlockHeader().Time, balance, amt) - k.ak.SetAccount(ctx, acc) + k.ak.SetAccount(sdkCtx, acc) } return nil } // trackUndelegation trakcs undelegation of the given account if it is a vesting account -func (k BaseKeeper) trackUndelegation(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins) error { - acc := k.ak.GetAccount(ctx, addr) +func (k BaseKeeper) trackUndelegation(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "trackUndelegation")(&err) + + acc := k.ak.GetAccount(sdkCtx, addr) if acc == nil { return errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "account %s does not exist", addr) } @@ -482,7 +538,7 @@ func (k BaseKeeper) trackUndelegation(ctx context.Context, addr sdk.AccAddress, if ok { // TODO: return error on account.TrackUndelegation vacc.TrackUndelegation(amt) - k.ak.SetAccount(ctx, acc) + k.ak.SetAccount(sdkCtx, acc) } return nil @@ -492,7 +548,11 @@ func (k BaseKeeper) trackUndelegation(ctx context.Context, addr sdk.AccAddress, // with the balance of each coin. // The iteration stops if the callback returns true. func (k BaseViewKeeper) IterateTotalSupply(ctx context.Context, cb func(sdk.Coin) bool) { - err := k.Supply.Walk(ctx, nil, func(s string, m math.Int) (bool, error) { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateTotalSupply")(&err) + + err = k.Supply.Walk(sdkCtx, nil, func(s string, m math.Int) (bool, error) { return cb(sdk.NewCoin(s, m)), nil }) if err != nil { diff --git a/x/bank/keeper/msg_server.go b/x/bank/keeper/msg_server.go index 781b0796d8b8..08865563419e 100644 --- a/x/bank/keeper/msg_server.go +++ b/x/bank/keeper/msg_server.go @@ -26,24 +26,28 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { return &msgServer{Keeper: keeper} } -func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSendResponse, error) { +func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (meterResult *types.MsgSendResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + var ( + base BaseKeeper from, to []byte - err error ) - if base, ok := k.Keeper.(BaseKeeper); ok { - from, err = base.ak.AddressCodec().StringToBytes(msg.FromAddress) - if err != nil { - return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid from address: %s", err) - } - to, err = base.ak.AddressCodec().StringToBytes(msg.ToAddress) - if err != nil { - return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid to address: %s", err) - } - } else { + var ok bool + if base, ok = k.Keeper.(BaseKeeper); !ok { return nil, sdkerrors.ErrInvalidRequest.Wrapf("invalid keeper type: %T", k.Keeper) } + defer base.Meter(goCtx).FuncTiming(&sdkCtx, "Send")(&err) + + from, err = base.ak.AddressCodec().StringToBytes(msg.FromAddress) + if err != nil { + return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid from address: %s", err) + } + to, err = base.ak.AddressCodec().StringToBytes(msg.ToAddress) + if err != nil { + return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid to address: %s", err) + } if !msg.Amount.IsValid() { return nil, errorsmod.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String()) @@ -53,8 +57,7 @@ func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSe return nil, errorsmod.Wrap(sdkerrors.ErrInvalidCoins, msg.Amount.String()) } - ctx := sdk.UnwrapSDKContext(goCtx) - if err := k.IsSendEnabledCoins(ctx, msg.Amount...); err != nil { + if err = k.IsSendEnabledCoins(sdkCtx, msg.Amount...); err != nil { return nil, err } @@ -62,7 +65,7 @@ func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSe return nil, errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", msg.ToAddress) } - err = k.SendCoins(ctx, from, to, msg.Amount) + err = k.SendCoins(sdkCtx, from, to, msg.Amount) if err != nil { return nil, err } @@ -82,7 +85,14 @@ func (k msgServer) Send(goCtx context.Context, msg *types.MsgSend) (*types.MsgSe return &types.MsgSendResponse{}, nil } -func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*types.MsgMultiSendResponse, error) { +func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (meterResult *types.MsgMultiSendResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + base, ok := k.Keeper.(BaseKeeper) + if !ok { + return nil, sdkerrors.ErrInvalidRequest.Wrapf("invalid keeper type: %T", k.Keeper) + } + defer base.Meter(goCtx).FuncTiming(&sdkCtx, "MultiSend")(&err) + if len(msg.Inputs) == 0 { return nil, types.ErrNoInputs } @@ -95,35 +105,29 @@ func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*t return nil, types.ErrNoOutputs } - if err := types.ValidateInputOutputs(msg.Inputs[0], msg.Outputs); err != nil { + if err = types.ValidateInputOutputs(msg.Inputs[0], msg.Outputs); err != nil { return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) - // NOTE: totalIn == totalOut should already have been checked for _, in := range msg.Inputs { - if err := k.IsSendEnabledCoins(ctx, in.Coins...); err != nil { + if err = k.IsSendEnabledCoins(sdkCtx, in.Coins...); err != nil { return nil, err } } for _, out := range msg.Outputs { - if base, ok := k.Keeper.(BaseKeeper); ok { - accAddr, err := base.ak.AddressCodec().StringToBytes(out.Address) - if err != nil { - return nil, err - } + accAddr, err := base.ak.AddressCodec().StringToBytes(out.Address) + if err != nil { + return nil, err + } - if k.BlockedAddr(accAddr) { - return nil, errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", out.Address) - } - } else { - return nil, sdkerrors.ErrInvalidRequest.Wrapf("invalid keeper type: %T", k.Keeper) + if k.BlockedAddr(accAddr) { + return nil, errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", out.Address) } } - err := k.InputOutputCoins(ctx, msg.Inputs[0], msg.Outputs) + err = k.InputOutputCoins(sdkCtx, msg.Inputs[0], msg.Outputs) if err != nil { return nil, err } @@ -131,24 +135,37 @@ func (k msgServer) MultiSend(goCtx context.Context, msg *types.MsgMultiSend) (*t return &types.MsgMultiSendResponse{}, nil } -func (k msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { +func (k msgServer) UpdateParams(goCtx context.Context, req *types.MsgUpdateParams) (meterResult *types.MsgUpdateParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + base, ok := k.Keeper.(BaseKeeper) + if !ok { + return nil, sdkerrors.ErrInvalidRequest.Wrapf("invalid keeper type: %T", k.Keeper) + } + defer base.Meter(goCtx).FuncTiming(&sdkCtx, "UpdateParams")(&err) + if k.GetAuthority() != req.Authority { return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), req.Authority) } - if err := req.Params.Validate(); err != nil { + if err = req.Params.Validate(); err != nil { return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) - if err := k.SetParams(ctx, req.Params); err != nil { + if err = k.SetParams(sdkCtx, req.Params); err != nil { return nil, err } return &types.MsgUpdateParamsResponse{}, nil } -func (k msgServer) SetSendEnabled(goCtx context.Context, msg *types.MsgSetSendEnabled) (*types.MsgSetSendEnabledResponse, error) { +func (k msgServer) SetSendEnabled(goCtx context.Context, msg *types.MsgSetSendEnabled) (meterResult *types.MsgSetSendEnabledResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + base, ok := k.Keeper.(BaseKeeper) + if !ok { + return nil, sdkerrors.ErrInvalidRequest.Wrapf("invalid keeper type: %T", k.Keeper) + } + defer base.Meter(goCtx).FuncTiming(&sdkCtx, "SetSendEnabled")(&err) + if k.GetAuthority() != msg.Authority { return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), msg.Authority) } @@ -161,23 +178,22 @@ func (k msgServer) SetSendEnabled(goCtx context.Context, msg *types.MsgSetSendEn seen[se.Denom] = true - if err := se.Validate(); err != nil { + if err = se.Validate(); err != nil { return nil, sdkerrors.ErrInvalidRequest.Wrapf("invalid SendEnabled denom %q: %s", se.Denom, err) } } for _, denom := range msg.UseDefaultFor { - if err := sdk.ValidateDenom(denom); err != nil { + if err = sdk.ValidateDenom(denom); err != nil { return nil, sdkerrors.ErrInvalidRequest.Wrapf("invalid UseDefaultFor denom %q: %s", denom, err) } } - ctx := sdk.UnwrapSDKContext(goCtx) if len(msg.SendEnabled) > 0 { - k.SetAllSendEnabled(ctx, msg.SendEnabled) + k.SetAllSendEnabled(sdkCtx, msg.SendEnabled) } if len(msg.UseDefaultFor) > 0 { - k.DeleteSendEnabled(ctx, msg.UseDefaultFor...) + k.DeleteSendEnabled(sdkCtx, msg.UseDefaultFor...) } return &types.MsgSetSendEnabledResponse{}, nil diff --git a/x/bank/keeper/send.go b/x/bank/keeper/send.go index c50a3d8038b0..d2723a970bf4 100644 --- a/x/bank/keeper/send.go +++ b/x/bank/keeper/send.go @@ -122,33 +122,42 @@ func (k BaseSendKeeper) GetAuthority() string { // GetParams returns the total set of bank parameters. func (k BaseSendKeeper) GetParams(ctx context.Context) (params types.Params) { - p, _ := k.Params.Get(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetParams")() + + p, _ := k.Params.Get(sdkCtx) return p } // SetParams sets the total set of bank parameters. // // Note: params.SendEnabled is deprecated but it should be here regardless. -func (k BaseSendKeeper) SetParams(ctx context.Context, params types.Params) error { +func (k BaseSendKeeper) SetParams(ctx context.Context, params types.Params) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetParams")(&err) + // Normally SendEnabled is deprecated but we still support it for backwards // compatibility. Using params.Validate() would fail due to the SendEnabled // deprecation. if len(params.SendEnabled) > 0 { //nolint:staticcheck // SA1019: params.SendEnabled is deprecated - k.SetAllSendEnabled(ctx, params.SendEnabled) //nolint:staticcheck // SA1019: params.SendEnabled is deprecated + k.SetAllSendEnabled(sdkCtx, params.SendEnabled) //nolint:staticcheck // SA1019: params.SendEnabled is deprecated // override params without SendEnabled params = types.NewParams(params.DefaultSendEnabled) } - return k.Params.Set(ctx, params) + return k.Params.Set(sdkCtx, params) } // InputOutputCoins performs multi-send functionality. It accepts an // input that corresponds to a series of outputs. It returns an error if the // input and outputs don't line up or if any single transfer of tokens fails. -func (k BaseSendKeeper) InputOutputCoins(ctx context.Context, input types.Input, outputs []types.Output) error { +func (k BaseSendKeeper) InputOutputCoins(ctx context.Context, input types.Input, outputs []types.Output) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "InputOutputCoins")(&err) + // Safety check ensuring that when sending coins the keeper must maintain the // Check supply invariant and validity of Coins. - if err := types.ValidateInputOutputs(input, outputs); err != nil { + if err = types.ValidateInputOutputs(input, outputs); err != nil { return err } @@ -157,7 +166,7 @@ func (k BaseSendKeeper) InputOutputCoins(ctx context.Context, input types.Input, return err } - if err := k.validateCoinsBeforeSend(ctx, inAddress, input.Coins); err != nil { + if err = k.validateCoinsBeforeSend(sdkCtx, inAddress, input.Coins); err != nil { return err } @@ -168,19 +177,18 @@ func (k BaseSendKeeper) InputOutputCoins(ctx context.Context, input types.Input, } for _, coin := range out.Coins { - newOutAddress, err := k.sendRestriction.apply(ctx, inAddress, outAddress, coin) + newOutAddress, err := k.sendRestriction.apply(sdkCtx, inAddress, outAddress, coin) if err != nil { return err } - err = k.sendCoins(ctx, inAddress, newOutAddress, sdk.NewCoins(coin)) + err = k.sendCoins(sdkCtx, inAddress, newOutAddress, sdk.NewCoins(coin)) if err != nil { return err } } } - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( sdk.EventTypeMessage, @@ -193,24 +201,26 @@ func (k BaseSendKeeper) InputOutputCoins(ctx context.Context, input types.Input, // SendCoins transfers amt coins from a sending account to a receiving account. // An error is returned upon failure. -func (k BaseSendKeeper) SendCoins(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) error { - if err := k.validateCoinsBeforeSend(ctx, fromAddr, amt); err != nil { +func (k BaseSendKeeper) SendCoins(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SendCoins")(&err) + + if err = k.validateCoinsBeforeSend(sdkCtx, fromAddr, amt); err != nil { return err } for _, coin := range amt { - newToAddr, err := k.sendRestriction.apply(ctx, fromAddr, toAddr, coin) + newToAddr, err := k.sendRestriction.apply(sdkCtx, fromAddr, toAddr, coin) if err != nil { return err } - err = k.sendCoins(ctx, fromAddr, newToAddr, sdk.NewCoins(coin)) + err = k.sendCoins(sdkCtx, fromAddr, newToAddr, sdk.NewCoins(coin)) if err != nil { return err } } - sdkCtx := sdk.UnwrapSDKContext(ctx) // bech32 encoding is expensive! Only do it once for fromAddr fromAddrString := fromAddr.String() sdkCtx.EventManager().EmitEvent(sdk.NewEvent( @@ -221,36 +231,44 @@ func (k BaseSendKeeper) SendCoins(ctx context.Context, fromAddr, toAddr sdk.AccA return nil } -func (k BaseSendKeeper) sendCoins(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) error { - err := k.subUnlockedCoins(ctx, fromAddr, amt, true) // only sub this coin +func (k BaseSendKeeper) sendCoins(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "sendCoins")(&err) + + err = k.subUnlockedCoins(sdkCtx, fromAddr, amt, true) // only sub this coin if err != nil { return err } - err = k.addCoins(ctx, toAddr, amt) + err = k.addCoins(sdkCtx, toAddr, amt) if err != nil { return err } - k.ensureAccountCreated(ctx, toAddr) - k.emitSendCoinsEvents(ctx, fromAddr, toAddr, amt) + k.ensureAccountCreated(sdkCtx, toAddr) + k.emitSendCoinsEvents(sdkCtx, fromAddr, toAddr, amt) return nil } func (k BaseSendKeeper) ensureAccountCreated(ctx context.Context, toAddr sdk.AccAddress) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ensureAccountCreated")() + // Create account if recipient does not exist. // // NOTE: This should ultimately be removed in favor a more flexible approach // such as delegated fee messages. - accExists := k.ak.HasAccount(ctx, toAddr) + accExists := k.ak.HasAccount(sdkCtx, toAddr) if !accExists { defer telemetry.IncrCounter(1, "new", "account") - k.ak.SetAccount(ctx, k.ak.NewAccountWithAddress(ctx, toAddr)) + k.ak.SetAccount(sdkCtx, k.ak.NewAccountWithAddress(sdkCtx, toAddr)) } } func (k BaseSendKeeper) emitSendCoinsEvents(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "emitSendCoinsEvents")() + sdkCtx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeTransfer, @@ -262,15 +280,18 @@ func (k BaseSendKeeper) emitSendCoinsEvents(ctx context.Context, fromAddr, toAdd } // validateCoinsBeforeSend is checks extracted from subUnlockedCoins to be run before sendRestrictionFn inside SendCoins -func (k BaseSendKeeper) validateCoinsBeforeSend(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins) error { +func (k BaseSendKeeper) validateCoinsBeforeSend(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "validateCoinsBeforeSend")(&err) + if !amt.IsValid() { return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, amt.String()) } - lockedCoins := k.LockedCoins(ctx, addr) + lockedCoins := k.LockedCoins(sdkCtx, addr) for _, coin := range amt { - balance := k.GetBalance(ctx, addr, coin.Denom) + balance := k.GetBalance(sdkCtx, addr, coin.Denom) locked := sdk.NewCoin(coin.Denom, lockedCoins.AmountOf(coin.Denom)) spendable, hasNeg := sdk.Coins{balance}.SafeSub(locked) @@ -297,25 +318,27 @@ func (k BaseSendKeeper) validateCoinsBeforeSend(ctx context.Context, addr sdk.Ac // subUnlockedCoins removes the unlocked amt coins of the given account. An error is // returned if the resulting balance is negative or the initial amount is invalid. // A coin_spent event is emitted after. -func (k BaseSendKeeper) subUnlockedCoins(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins, skipValidation bool) error { +func (k BaseSendKeeper) subUnlockedCoins(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins, skipValidation bool) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "subUnlockedCoins")(&err) + if !skipValidation { - err := k.validateCoinsBeforeSend(ctx, addr, amt) + err = k.validateCoinsBeforeSend(sdkCtx, addr, amt) if err != nil { return err } } for _, coin := range amt { - balance := k.GetBalance(ctx, addr, coin.Denom) + balance := k.GetBalance(sdkCtx, addr, coin.Denom) newBalance := balance.Sub(coin) - if err := k.setBalance(ctx, addr, newBalance); err != nil { + if err = k.setBalance(sdkCtx, addr, newBalance); err != nil { return err } } - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( types.NewCoinSpentEvent(addr, amt), ) @@ -325,23 +348,25 @@ func (k BaseSendKeeper) subUnlockedCoins(ctx context.Context, addr sdk.AccAddres // addCoins increase the addr balance by the given amt. Fails if the provided // amt is invalid. It emits a coin received event. -func (k BaseSendKeeper) addCoins(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins) error { +func (k BaseSendKeeper) addCoins(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "addCoins")(&err) + if !amt.IsValid() { return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, amt.String()) } for _, coin := range amt { - balance := k.GetBalance(ctx, addr, coin.Denom) + balance := k.GetBalance(sdkCtx, addr, coin.Denom) newBalance := balance.Add(coin) - err := k.setBalance(ctx, addr, newBalance) + err = k.setBalance(sdkCtx, addr, newBalance) if err != nil { return err } } // emit coin received event - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( types.NewCoinReceivedEvent(addr, amt), ) @@ -350,40 +375,46 @@ func (k BaseSendKeeper) addCoins(ctx context.Context, addr sdk.AccAddress, amt s } // setBalance sets the coin balance for an account by address. -func (k BaseSendKeeper) setBalance(ctx context.Context, addr sdk.AccAddress, balance sdk.Coin) error { +func (k BaseSendKeeper) setBalance(ctx context.Context, addr sdk.AccAddress, balance sdk.Coin) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "setBalance")(&err) + if !balance.IsValid() { return errorsmod.Wrap(sdkerrors.ErrInvalidCoins, balance.String()) } // x/bank invariants prohibit persistence of zero balances if balance.IsZero() { - err := k.Balances.Remove(ctx, collections.Join(addr, balance.Denom)) + err = k.Balances.Remove(sdkCtx, collections.Join(addr, balance.Denom)) if err != nil { return err } // set transient balance which will be emitted in the Endblocker - k.setTransientBalance(sdk.UnwrapSDKContext(ctx), addr, balance) + k.setTransientBalance(sdkCtx, addr, balance) return nil } // set transient balance which will be emitted in the Endblocker - k.setTransientBalance(sdk.UnwrapSDKContext(ctx), addr, balance) + k.setTransientBalance(sdkCtx, addr, balance) - return k.Balances.Set(ctx, collections.Join(addr, balance.Denom), balance.Amount) + return k.Balances.Set(sdkCtx, collections.Join(addr, balance.Denom), balance.Amount) } // IsSendEnabledCoins checks the coins provided and returns an ErrSendDisabled // if any of the coins are not configured for sending. Returns nil if sending is // enabled for all provided coins. -func (k BaseSendKeeper) IsSendEnabledCoins(ctx context.Context, coins ...sdk.Coin) error { +func (k BaseSendKeeper) IsSendEnabledCoins(ctx context.Context, coins ...sdk.Coin) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IsSendEnabledCoins")(&err) + if len(coins) == 0 { return nil } - defaultVal := k.GetParams(ctx).DefaultSendEnabled + defaultVal := k.GetParams(sdkCtx).DefaultSendEnabled for _, coin := range coins { - if !k.getSendEnabledOrDefault(ctx, coin.Denom, defaultVal) { + if !k.getSendEnabledOrDefault(sdkCtx, coin.Denom, defaultVal) { return types.ErrSendDisabled.Wrapf("%s transfers are currently disabled", coin.Denom) } } @@ -393,7 +424,10 @@ func (k BaseSendKeeper) IsSendEnabledCoins(ctx context.Context, coins ...sdk.Coi // IsSendEnabledCoin returns the current SendEnabled status of the provided coin's denom func (k BaseSendKeeper) IsSendEnabledCoin(ctx context.Context, coin sdk.Coin) bool { - return k.IsSendEnabledDenom(ctx, coin.Denom) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IsSendEnabledCoin")() + + return k.IsSendEnabledDenom(sdkCtx, coin.Denom) } // BlockedAddr checks if a given address is restricted from @@ -409,13 +443,19 @@ func (k BaseSendKeeper) GetBlockedAddresses() map[string]bool { // IsSendEnabledDenom returns the current SendEnabled status of the provided denom. func (k BaseSendKeeper) IsSendEnabledDenom(ctx context.Context, denom string) bool { - return k.getSendEnabledOrDefault(ctx, denom, k.GetParams(ctx).DefaultSendEnabled) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IsSendEnabledDenom")() + + return k.getSendEnabledOrDefault(sdkCtx, denom, k.GetParams(sdkCtx).DefaultSendEnabled) } // GetSendEnabledEntry gets a SendEnabled entry for the given denom. // The second return argument is true iff a specific entry exists for the given denom. func (k BaseSendKeeper) GetSendEnabledEntry(ctx context.Context, denom string) (types.SendEnabled, bool) { - sendEnabled, found := k.getSendEnabled(ctx, denom) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetSendEnabledEntry")() + + sendEnabled, found := k.getSendEnabled(sdkCtx, denom) if !found { return types.SendEnabled{}, false } @@ -425,27 +465,40 @@ func (k BaseSendKeeper) GetSendEnabledEntry(ctx context.Context, denom string) ( // SetSendEnabled sets the SendEnabled flag for a denom to the provided value. func (k BaseSendKeeper) SetSendEnabled(ctx context.Context, denom string, value bool) { - _ = k.SendEnabled.Set(ctx, denom, value) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetSendEnabled")() + + _ = k.SendEnabled.Set(sdkCtx, denom, value) } // SetAllSendEnabled sets all the provided SendEnabled entries in the bank store. func (k BaseSendKeeper) SetAllSendEnabled(ctx context.Context, entries []*types.SendEnabled) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetAllSendEnabled")() + for _, entry := range entries { - _ = k.SendEnabled.Set(ctx, entry.Denom, entry.Enabled) + _ = k.SendEnabled.Set(sdkCtx, entry.Denom, entry.Enabled) } } // DeleteSendEnabled deletes the SendEnabled flags for one or more denoms. // If a denom is provided that doesn't have a SendEnabled entry, it is ignored. func (k BaseSendKeeper) DeleteSendEnabled(ctx context.Context, denoms ...string) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteSendEnabled")() + for _, denom := range denoms { - _ = k.SendEnabled.Remove(ctx, denom) + _ = k.SendEnabled.Remove(sdkCtx, denom) } } // IterateSendEnabledEntries iterates over all the SendEnabled entries. func (k BaseSendKeeper) IterateSendEnabledEntries(ctx context.Context, cb func(denom string, sendEnabled bool) bool) { - err := k.SendEnabled.Walk(ctx, nil, func(key string, value bool) (stop bool, err error) { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateSendEnabledEntries")(&err) + + err = k.SendEnabled.Walk(sdkCtx, nil, func(key string, value bool) (stop bool, err error) { return cb(key, value), nil }) if err != nil { @@ -456,8 +509,11 @@ func (k BaseSendKeeper) IterateSendEnabledEntries(ctx context.Context, cb func(d // GetAllSendEnabledEntries gets all the SendEnabled entries that are stored. // Any denominations not returned use the default value (set in Params). func (k BaseSendKeeper) GetAllSendEnabledEntries(ctx context.Context) []types.SendEnabled { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllSendEnabledEntries")() + var rv []types.SendEnabled - k.IterateSendEnabledEntries(ctx, func(denom string, sendEnabled bool) bool { + k.IterateSendEnabledEntries(sdkCtx, func(denom string, sendEnabled bool) bool { rv = append(rv, types.SendEnabled{Denom: denom, Enabled: sendEnabled}) return false }) @@ -476,12 +532,15 @@ func (k BaseSendKeeper) GetAllSendEnabledEntries(ctx context.Context) []types.Se // sendEnabled = DefaultSendEnabled // } func (k BaseSendKeeper) getSendEnabled(ctx context.Context, denom string) (bool, bool) { - has, err := k.SendEnabled.Has(ctx, denom) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getSendEnabled")() + + has, err := k.SendEnabled.Has(sdkCtx, denom) if err != nil || !has { return false, false } - v, err := k.SendEnabled.Get(ctx, denom) + v, err := k.SendEnabled.Get(sdkCtx, denom) if err != nil { return false, false } @@ -492,7 +551,10 @@ func (k BaseSendKeeper) getSendEnabled(ctx context.Context, denom string) (bool, // getSendEnabledOrDefault gets the SendEnabled value for a denom. If it's not // in the store, this will return defaultVal. func (k BaseSendKeeper) getSendEnabledOrDefault(ctx context.Context, denom string, defaultVal bool) bool { - sendEnabled, found := k.getSendEnabled(ctx, denom) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getSendEnabledOrDefault")() + + sendEnabled, found := k.getSendEnabled(sdkCtx, denom) if found { return sendEnabled } diff --git a/x/bank/keeper/transient_balances.go b/x/bank/keeper/transient_balances.go index 1fe7dbae72cd..25515d85dac6 100644 --- a/x/bank/keeper/transient_balances.go +++ b/x/bank/keeper/transient_balances.go @@ -14,22 +14,30 @@ import ( // getTransientAccountStore gets the transient account store of the given address. func (k BaseViewKeeper) getTransientAccountStore(ctx context.Context, addr sdk.AccAddress) prefix.Store { - store := k.tStoreService.OpenTransientStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getTransientAccountStore")() + + store := k.tStoreService.OpenTransientStore(sdkCtx) return prefix.NewStore(runtime.KVStoreAdapter(store), createAccountBalancesPrefix(addr)) } // setTransientBalance sets the transient coin balance for an account by address. func (k BaseSendKeeper) setTransientBalance(ctx context.Context, addr sdk.AccAddress, balance sdk.Coin) { - accountStore := k.getTransientAccountStore(ctx, addr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "setTransientBalance")() + + accountStore := k.getTransientAccountStore(sdkCtx, addr) bz := k.cdc.MustMarshal(&balance) accountStore.Set([]byte(balance.Denom), bz) } func (k BaseKeeper) EmitAllTransientBalances(ctx context.Context) { - balanceUpdates := k.GetAllTransientAccountBalanceUpdates(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "EmitAllTransientBalances")() + + balanceUpdates := k.GetAllTransientAccountBalanceUpdates(sdkCtx) if len(balanceUpdates) > 0 { - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitTypedEvent(&types.EventSetBalances{ BalanceUpdates: balanceUpdates, }) @@ -38,9 +46,12 @@ func (k BaseKeeper) EmitAllTransientBalances(ctx context.Context) { // GetAllTransientAccountBalanceUpdates returns all the transient accounts balances from the transient store. func (k BaseViewKeeper) GetAllTransientAccountBalanceUpdates(ctx context.Context) []*types.BalanceUpdate { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllTransientAccountBalanceUpdates")() + balanceUpdates := make([]*types.BalanceUpdate, 0) - k.IterateAllTransientBalances(ctx, func(addr sdk.AccAddress, balance sdk.Coin) bool { + k.IterateAllTransientBalances(sdkCtx, func(addr sdk.AccAddress, balance sdk.Coin) bool { balanceUpdate := &types.BalanceUpdate{ Addr: addr.Bytes(), Denom: []byte(balance.Denom), @@ -57,7 +68,10 @@ func (k BaseViewKeeper) GetAllTransientAccountBalanceUpdates(ctx context.Context // denominations that are provided to a callback. If true is returned from the // callback, iteration is halted. func (k BaseViewKeeper) IterateAllTransientBalances(ctx context.Context, cb func(sdk.AccAddress, sdk.Coin) bool) { - store := k.tStoreService.OpenTransientStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateAllTransientBalances")() + + store := k.tStoreService.OpenTransientStore(sdkCtx) balancesStore := prefix.NewStore(runtime.KVStoreAdapter(store), types.BalancesPrefix) iterator := balancesStore.Iterator(nil, nil) diff --git a/x/bank/keeper/view.go b/x/bank/keeper/view.go index 7aeca0009681..0ad43fb20584 100644 --- a/x/bank/keeper/view.go +++ b/x/bank/keeper/view.go @@ -10,6 +10,7 @@ import ( errorsmod "cosmossdk.io/errors" "cosmossdk.io/log" "cosmossdk.io/math" + "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -68,6 +69,8 @@ type BaseViewKeeper struct { SendEnabled collections.Map[string, bool] Balances *collections.IndexedMap[collections.Pair[sdk.AccAddress, string], math.Int, BalancesIndexes] Params collections.Item[types.Params] + + meter metrics.Meter } // NewBaseViewKeeper returns a new BaseViewKeeper. @@ -96,7 +99,10 @@ func NewBaseViewKeeper(cdc codec.BinaryCodec, storeService store.KVStoreService, // HasBalance returns whether or not an account has at least amt balance. func (k BaseViewKeeper) HasBalance(ctx context.Context, addr sdk.AccAddress, amt sdk.Coin) bool { - return k.GetBalance(ctx, addr, amt.Denom).IsGTE(amt) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HasBalance")() + + return k.GetBalance(sdkCtx, addr, amt.Denom).IsGTE(amt) } // Logger returns a module-specific logger. @@ -106,8 +112,11 @@ func (k BaseViewKeeper) Logger() log.Logger { // GetAllBalances returns all the account balances for the given account address. func (k BaseViewKeeper) GetAllBalances(ctx context.Context, addr sdk.AccAddress) sdk.Coins { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllBalances")() + balances := sdk.NewCoins() - k.IterateAccountBalances(ctx, addr, func(balance sdk.Coin) bool { + k.IterateAccountBalances(sdkCtx, addr, func(balance sdk.Coin) bool { balances = balances.Add(balance) return false }) @@ -117,10 +126,13 @@ func (k BaseViewKeeper) GetAllBalances(ctx context.Context, addr sdk.AccAddress) // GetAccountsBalances returns all the accounts balances from the store. func (k BaseViewKeeper) GetAccountsBalances(ctx context.Context) []types.Balance { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAccountsBalances")() + balances := make([]types.Balance, 0) mapAddressToBalancesIdx := make(map[string]int) - k.IterateAllBalances(ctx, func(addr sdk.AccAddress, balance sdk.Coin) bool { + k.IterateAllBalances(sdkCtx, func(addr sdk.AccAddress, balance sdk.Coin) bool { idx, ok := mapAddressToBalancesIdx[addr.String()] if ok { // address is already on the set of accounts balances @@ -144,7 +156,10 @@ func (k BaseViewKeeper) GetAccountsBalances(ctx context.Context) []types.Balance // GetBalance returns the balance of a specific denomination for a given account // by address. func (k BaseViewKeeper) GetBalance(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin { - amt, err := k.Balances.Get(ctx, collections.Join(addr, denom)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetBalance")() + + amt, err := k.Balances.Get(sdkCtx, collections.Join(addr, denom)) if err != nil { return sdk.NewCoin(denom, math.ZeroInt()) } @@ -155,7 +170,11 @@ func (k BaseViewKeeper) GetBalance(ctx context.Context, addr sdk.AccAddress, den // provides the token balance to a callback. If true is returned from the // callback, iteration is halted. func (k BaseViewKeeper) IterateAccountBalances(ctx context.Context, addr sdk.AccAddress, cb func(sdk.Coin) bool) { - err := k.Balances.Walk(ctx, collections.NewPrefixedPairRange[sdk.AccAddress, string](addr), func(key collections.Pair[sdk.AccAddress, string], value math.Int) (stop bool, err error) { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateAccountBalances")(&err) + + err = k.Balances.Walk(sdkCtx, collections.NewPrefixedPairRange[sdk.AccAddress, string](addr), func(key collections.Pair[sdk.AccAddress, string], value math.Int) (stop bool, err error) { return cb(sdk.NewCoin(key.K2(), value)), nil }) if err != nil { @@ -167,7 +186,11 @@ func (k BaseViewKeeper) IterateAccountBalances(ctx context.Context, addr sdk.Acc // denominations that are provided to a callback. If true is returned from the // callback, iteration is halted. func (k BaseViewKeeper) IterateAllBalances(ctx context.Context, cb func(sdk.AccAddress, sdk.Coin) bool) { - err := k.Balances.Walk(ctx, nil, func(key collections.Pair[sdk.AccAddress, string], value math.Int) (stop bool, err error) { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateAllBalances")(&err) + + err = k.Balances.Walk(sdkCtx, nil, func(key collections.Pair[sdk.AccAddress, string], value math.Int) (stop bool, err error) { return cb(key.K1(), sdk.NewCoin(key.K2(), value)), nil }) if err != nil { @@ -180,11 +203,13 @@ func (k BaseViewKeeper) IterateAllBalances(ctx context.Context, cb func(sdk.AccA // For vesting accounts, LockedCoins is delegated to the concrete vesting account // type. func (k BaseViewKeeper) LockedCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins { - acc := k.ak.GetAccount(ctx, addr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "LockedCoins")() + + acc := k.ak.GetAccount(sdkCtx, addr) if acc != nil { vacc, ok := acc.(types.VestingAccount) if ok { - sdkCtx := sdk.UnwrapSDKContext(ctx) return vacc.LockedCoins(sdkCtx.BlockTime()) } } @@ -196,7 +221,10 @@ func (k BaseViewKeeper) LockedCoins(ctx context.Context, addr sdk.AccAddress) sd // by address. If the account has no spendable coins, an empty Coins slice is // returned. func (k BaseViewKeeper) SpendableCoins(ctx context.Context, addr sdk.AccAddress) sdk.Coins { - spendable, _ := k.spendableCoins(ctx, addr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SpendableCoins")() + + spendable, _ := k.spendableCoins(sdkCtx, addr) return spendable } @@ -204,16 +232,22 @@ func (k BaseViewKeeper) SpendableCoins(ctx context.Context, addr sdk.AccAddress) // for an account by address. If the account has no spendable coin, a zero Coin // is returned. func (k BaseViewKeeper) SpendableCoin(ctx context.Context, addr sdk.AccAddress, denom string) sdk.Coin { - balance := k.GetBalance(ctx, addr, denom) - locked := k.LockedCoins(ctx, addr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SpendableCoin")() + + balance := k.GetBalance(sdkCtx, addr, denom) + locked := k.LockedCoins(sdkCtx, addr) return balance.SubAmount(locked.AmountOf(denom)) } // spendableCoins returns the coins the given address can spend alongside the total amount of coins it holds. // It exists for gas efficiency, in order to avoid to have to get balance multiple times. func (k BaseViewKeeper) spendableCoins(ctx context.Context, addr sdk.AccAddress) (spendable, total sdk.Coins) { - total = k.GetAllBalances(ctx, addr) - locked := k.LockedCoins(ctx, addr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "spendableCoins")() + + total = k.GetAllBalances(sdkCtx, addr) + locked := k.LockedCoins(sdkCtx, addr) spendable, hasNeg := total.SafeSub(locked...) if hasNeg { @@ -231,13 +265,16 @@ func (k BaseViewKeeper) spendableCoins(ctx context.Context, addr sdk.AccAddress) // CONTRACT: ValidateBalance should only be called upon genesis state. In the // case of vesting accounts, balances may change in a valid manner that would // otherwise yield an error from this call. -func (k BaseViewKeeper) ValidateBalance(ctx context.Context, addr sdk.AccAddress) error { - acc := k.ak.GetAccount(ctx, addr) +func (k BaseViewKeeper) ValidateBalance(ctx context.Context, addr sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ValidateBalance")(&err) + + acc := k.ak.GetAccount(sdkCtx, addr) if acc == nil { return errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "account %s does not exist", addr) } - balances := k.GetAllBalances(ctx, addr) + balances := k.GetAllBalances(sdkCtx, addr) if !balances.IsValid() { return fmt.Errorf("account balance of %s is invalid", balances) } @@ -252,3 +289,11 @@ func (k BaseViewKeeper) ValidateBalance(ctx context.Context, addr sdk.AccAddress return nil } + +func (k *BaseViewKeeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter +} diff --git a/x/bank/keeper/virtual_balances.go b/x/bank/keeper/virtual_balances.go index 9ee4681eb7f2..e380a436f5e5 100644 --- a/x/bank/keeper/virtual_balances.go +++ b/x/bank/keeper/virtual_balances.go @@ -15,19 +15,25 @@ import ( // SendCoinsFromAccountToModuleVirtual sends coins from account to a virtual module account. func (k BaseSendKeeper) SendCoinsFromAccountToModuleVirtual( ctx context.Context, senderAddr sdk.AccAddress, recipientModule string, amt sdk.Coins, -) error { - recipientAcc := k.ak.GetModuleAccount(ctx, recipientModule) +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SendCoinsFromAccountToModuleVirtual")(&err) + + recipientAcc := k.ak.GetModuleAccount(sdkCtx, recipientModule) if recipientAcc == nil { panic(errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", recipientModule)) } - return k.SendCoinsToVirtual(ctx, senderAddr, recipientAcc.GetAddress(), amt) + return k.SendCoinsToVirtual(sdkCtx, senderAddr, recipientAcc.GetAddress(), amt) } // SendCoinsFromModuleToAccountVirtual sends coins from virtual module to a recipient account. func (k BaseSendKeeper) SendCoinsFromModuleToAccountVirtual( ctx context.Context, senderModule string, recipientAddr sdk.AccAddress, amt sdk.Coins, -) error { +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SendCoinsFromModuleToAccountVirtual")(&err) + senderAddr := k.ak.GetModuleAddress(senderModule) if senderAddr == nil { panic(errorsmod.Wrapf(sdkerrors.ErrUnknownAddress, "module account %s does not exist", senderModule)) @@ -37,57 +43,65 @@ func (k BaseSendKeeper) SendCoinsFromModuleToAccountVirtual( return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", recipientAddr) } - return k.SendCoinsFromVirtual(ctx, senderAddr, recipientAddr, amt) + return k.SendCoinsFromVirtual(sdkCtx, senderAddr, recipientAddr, amt) } // SendCoinsToVirtual accumulate the recipient's coins in a per-transaction transient state, // which are sumed up and added to the real account at the end of block. // Events are emitted the same as normal send. -func (k BaseSendKeeper) SendCoinsToVirtual(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) error { - err := k.subUnlockedCoins(ctx, fromAddr, amt, false) +func (k BaseSendKeeper) SendCoinsToVirtual(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SendCoinsToVirtual")(&err) + + err = k.subUnlockedCoins(sdkCtx, fromAddr, amt, false) if err != nil { return err } for _, coin := range amt { - newToAddr, err := k.sendRestriction.apply(ctx, fromAddr, toAddr, coin) + newToAddr, err := k.sendRestriction.apply(sdkCtx, fromAddr, toAddr, coin) if err != nil { return err } - k.addVirtualCoins(ctx, newToAddr, sdk.NewCoins(coin)) + k.addVirtualCoins(sdkCtx, newToAddr, sdk.NewCoins(coin)) } - k.emitSendCoinsEvents(ctx, fromAddr, toAddr, amt) + k.emitSendCoinsEvents(sdkCtx, fromAddr, toAddr, amt) return nil } // SendCoinsFromVirtual deduct coins from virtual from account and send to recipient account. -func (k BaseSendKeeper) SendCoinsFromVirtual(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) error { - err := k.subVirtualCoins(ctx, fromAddr, amt) +func (k BaseSendKeeper) SendCoinsFromVirtual(ctx context.Context, fromAddr, toAddr sdk.AccAddress, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SendCoinsFromVirtual")(&err) + + err = k.subVirtualCoins(sdkCtx, fromAddr, amt) if err != nil { return err } for _, coin := range amt { - newToAddr, err := k.sendRestriction.apply(ctx, fromAddr, toAddr, coin) + newToAddr, err := k.sendRestriction.apply(sdkCtx, fromAddr, toAddr, coin) if err != nil { return err } - err = k.addCoins(ctx, newToAddr, sdk.NewCoins(coin)) + err = k.addCoins(sdkCtx, newToAddr, sdk.NewCoins(coin)) if err != nil { return err } } - k.ensureAccountCreated(ctx, toAddr) - k.emitSendCoinsEvents(ctx, fromAddr, toAddr, amt) + k.ensureAccountCreated(sdkCtx, toAddr) + k.emitSendCoinsEvents(sdkCtx, fromAddr, toAddr, amt) return nil } func (k BaseSendKeeper) addVirtualCoins(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "addVirtualCoins")() + store := sdkCtx.ObjectStore(k.objStoreKey) key := make([]byte, len(addr)+8) @@ -103,8 +117,10 @@ func (k BaseSendKeeper) addVirtualCoins(ctx context.Context, addr sdk.AccAddress store.Set(key, coins) } -func (k BaseSendKeeper) subVirtualCoins(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins) error { +func (k BaseSendKeeper) subVirtualCoins(ctx context.Context, addr sdk.AccAddress, amt sdk.Coins) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "subVirtualCoins")(&err) + store := sdkCtx.ObjectStore(k.objStoreKey) key := make([]byte, len(addr)+8) @@ -139,8 +155,11 @@ func (k BaseSendKeeper) subVirtualCoins(ctx context.Context, addr sdk.AccAddress // CreditVirtualAccounts sum up the transient coins and add them to the real account, // should be called at end blocker. -func (k BaseSendKeeper) CreditVirtualAccounts(ctx context.Context) error { - store := sdk.UnwrapSDKContext(ctx).ObjectStore(k.objStoreKey) +func (k BaseSendKeeper) CreditVirtualAccounts(ctx context.Context) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "CreditVirtualAccounts")(&err) + + store := sdkCtx.ObjectStore(k.objStoreKey) var toAddr sdk.AccAddress sum := sdk.NewMapCoins(nil) @@ -150,12 +169,12 @@ func (k BaseSendKeeper) CreditVirtualAccounts(ctx context.Context) error { return nil } - if err := k.addCoins(ctx, toAddr, sum.ToCoins()); err != nil { + if err = k.addCoins(sdkCtx, toAddr, sum.ToCoins()); err != nil { return err } clear(sum) - k.ensureAccountCreated(ctx, toAddr) + k.ensureAccountCreated(sdkCtx, toAddr) return nil } @@ -168,7 +187,7 @@ func (k BaseSendKeeper) CreditVirtualAccounts(ctx context.Context) error { addr := it.Key()[:len(it.Key())-8] if !bytes.Equal(toAddr, addr) { - if err := flushCurrentAddr(); err != nil { + if err = flushCurrentAddr(); err != nil { return err } toAddr = addr diff --git a/x/bank/module.go b/x/bank/module.go index fae1b50f787b..9b5fa3c53079 100644 --- a/x/bank/module.go +++ b/x/bank/module.go @@ -177,7 +177,16 @@ func (am AppModule) BeginBlock(ctx sdk.Context) { // EndBlock returns the end blocker for the bank module. It returns no validator // updates. -func (am AppModule) EndBlock(ctx context.Context) error { +func (am AppModule) EndBlock(ctx context.Context) (err error) { + switch k := am.keeper.(type) { + case keeper.BaseKeeper: + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "EndBlocker")(&err) + case *keeper.BaseKeeper: + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "EndBlocker")(&err) + } + am.keeper.EmitAllTransientBalances(ctx) return am.keeper.CreditVirtualAccounts(ctx) } diff --git a/x/circuit/go.mod b/x/circuit/go.mod index c3f7bbc42c5a..b7eab3ee00ca 100644 --- a/x/circuit/go.mod +++ b/x/circuit/go.mod @@ -1,8 +1,6 @@ module cosmossdk.io/x/circuit -go 1.23.5 - -toolchain go1.23.8 +go 1.23.9 require ( cosmossdk.io/api v0.7.6 @@ -11,6 +9,7 @@ require ( cosmossdk.io/depinject v1.1.0 cosmossdk.io/errors v1.0.1 cosmossdk.io/store v1.1.1 + github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 github.com/cockroachdb/errors v1.11.3 github.com/cometbft/cometbft v0.38.12 github.com/cometbft/cometbft/api v1.0.0 @@ -18,9 +17,9 @@ require ( github.com/cosmos/gogoproto v1.7.0 github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/stretchr/testify v1.10.0 - google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 - google.golang.org/grpc v1.71.0 + github.com/stretchr/testify v1.11.1 + google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 + google.golang.org/grpc v1.75.0 ) require ( @@ -32,23 +31,15 @@ require ( filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect - github.com/DataDog/appsec-internal-go v1.5.0 // indirect - github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0 // indirect - github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1 // indirect github.com/DataDog/datadog-go v3.2.0+incompatible // indirect - github.com/DataDog/datadog-go/v5 v5.3.0 // indirect - github.com/DataDog/go-libddwaf/v2 v2.3.2 // indirect - github.com/DataDog/go-tuf v1.0.2-0.5.2 // indirect - github.com/DataDog/sketches-go v1.4.2 // indirect github.com/DataDog/zstd v1.5.6 // indirect - github.com/InjectiveLabs/metrics v0.0.10 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/alexcesaro/statsd v2.0.0+incompatible // 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.4 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect github.com/cockroachdb/pebble v1.1.4 // indirect @@ -71,21 +62,22 @@ require ( github.com/dgraph-io/ristretto/v2 v2.1.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/ebitengine/purego v0.6.0-alpha.5 // indirect github.com/emicklei/dot v1.6.2 // indirect - github.com/fatih/color v1.15.0 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/getsentry/sentry-go v0.31.1 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/mock v1.6.0 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/btree v1.1.3 // indirect github.com/google/flatbuffers v25.2.10+incompatible // indirect github.com/google/go-cmp v0.7.0 // indirect @@ -95,12 +87,11 @@ require ( github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-metrics v0.5.3 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.5.2 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect @@ -115,6 +106,7 @@ require ( github.com/klauspost/compress v1.18.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect + github.com/leodido/go-urn v1.2.4 // indirect github.com/lib/pq v1.10.9 // indirect github.com/linxGnu/grocksdb v1.9.8 // indirect github.com/magiconair/properties v1.8.7 // indirect @@ -127,10 +119,8 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect - github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect - github.com/philhofer/fwd v1.1.2 // 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.21.1 // indirect @@ -144,7 +134,6 @@ require ( 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.5 // indirect - github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.1 // indirect @@ -156,29 +145,31 @@ require ( 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/tinylib/msgp v1.1.8 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.4.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/otel v1.34.0 // indirect - go.opentelemetry.io/otel/metric v1.34.0 // indirect - go.opentelemetry.io/otel/trace v1.34.0 // indirect - go.uber.org/atomic v1.11.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect + go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.36.0 // indirect + golang.org/x/crypto v0.41.0 // indirect golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect - golang.org/x/net v0.37.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect - golang.org/x/time v0.5.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/term v0.34.0 // indirect + golang.org/x/text v0.28.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect - google.golang.org/protobuf v1.36.5 // indirect - gopkg.in/DataDog/dd-trace-go.v1 v1.62.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect + google.golang.org/protobuf v1.36.8 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -202,6 +193,6 @@ replace ( replace ( // Use CometBFT v1.0.1 with Mempool lanes and DOG - github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.3 - github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 + github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 + github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 ) diff --git a/x/circuit/go.sum b/x/circuit/go.sum index d015899d0ad0..280244047d78 100644 --- a/x/circuit/go.sum +++ b/x/circuit/go.sum @@ -25,34 +25,17 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 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/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/appsec-internal-go v1.5.0 h1:8kS5zSx5T49uZ8dZTdT19QVAvC/B8ByyZdhQKYQWHno= -github.com/DataDog/appsec-internal-go v1.5.0/go.mod h1:pEp8gjfNLtEOmz+iZqC8bXhu0h4k7NUsW/qiQb34k1U= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0 h1:bUMSNsw1iofWiju9yc1f+kBd33E3hMJtq9GuU602Iy8= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0/go.mod h1:HzySONXnAgSmIQfL6gOv9hWprKJkx8CicuXuUbmgWfo= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1 h1:5nE6N3JSs2IG3xzMthNFhXfOaXlrsdgqmJ73lndFf8c= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1/go.mod h1:Vc+snp0Bey4MrrJyiV2tVxxJb6BmLomPvN1RgAvjGaQ= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/datadog-go/v5 v5.3.0 h1:2q2qjFOb3RwAZNU+ez27ZVDwErJv5/VpbBPprz7Z+s8= -github.com/DataDog/datadog-go/v5 v5.3.0/go.mod h1:XRDJk1pTc00gm+ZDiBKsjh7oOOtJfYfglVCmFb8C2+Q= -github.com/DataDog/go-libddwaf/v2 v2.3.2 h1:pdi9xjWW57IpOpTeOyPuNveEDFLmmInsHDeuZk3TY34= -github.com/DataDog/go-libddwaf/v2 v2.3.2/go.mod h1:gsCdoijYQfj8ce/T2bEDNPZFIYnmHluAgVDpuQOWMZE= -github.com/DataDog/go-tuf v1.0.2-0.5.2 h1:EeZr937eKAWPxJ26IykAdWA4A0jQXJgkhUjqEI/w7+I= -github.com/DataDog/go-tuf v1.0.2-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/gostackparse v0.7.0 h1:i7dLkXHvYzHV308hnkvVGDL3BR4FWl7IsXNPz/IGQh4= -github.com/DataDog/gostackparse v0.7.0/go.mod h1:lTfqcJKqS9KnXQGnyQMCugq3u1FP6UZMfWR0aitKFMM= -github.com/DataDog/sketches-go v1.4.2 h1:gppNudE9d19cQ98RYABOetxIhpTCl4m7CnbRZjvVA/o= -github.com/DataDog/sketches-go v1.4.2/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3 h1:wVl4vPhyTh6uuwT0BfH3pbF9W0QqEnZYRgB/2IDFXR0= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 h1:uXsmBVeBickTjZ2GqPNYXShoboRw1m2Cq1bKv4QCe0o= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= -github.com/InjectiveLabs/metrics v0.0.10 h1:BoOwXnCtRRIPmq06jcI20pXZYE758eusaCI5jDOoN4U= -github.com/InjectiveLabs/metrics v0.0.10/go.mod h1:eYu++0DVUjk/jjV9WgvCo8gQU+16Yoyhp1iu+ghKNME= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 h1:QIKdpbqWRC38xJDRBmUitpksS0ZfwlvSMMYaesZirms= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6/go.mod h1:U34DYdUTNyEdnB89+eqZy+SO9g7sFRwJQg7La+o/pHk= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 h1:GcV53gW9ajrbSoU2ikuCB+dUWHmhMmtfRKwJngZ+ChM= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= +github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 h1:zvIV7ifNcH2Dvl0RrXd2qYRkaDSc+iP0hqaAhfS85MY= +github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8/go.mod h1:fdW28eWh1Ace92UW2TzINdJVaVP7whCmHKkGQZHsxGI= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= @@ -68,8 +51,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexcesaro/statsd v2.0.0+incompatible h1:HG17k1Qk8V1F4UOoq6tx+IUoAbOcI5PHzzEUGeDD72w= -github.com/alexcesaro/statsd v2.0.0+incompatible/go.mod h1:vNepIbQAiyLe1j480173M6NYYaAsGwEcvuDTU3OCUGY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -88,14 +69,16 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= 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/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= -github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.17.0 h1:1X2TS7aHz1ELcC0yU1y2stUs/0ig5oMU6STFZGrhvHI= +github.com/bits-and-blooms/bitset v1.17.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.0 h1:qtNZduETEIWJVIyDl01BeNxur2rW9OwTQ/yBqFRkKEk= github.com/bytedance/sonic v1.10.0/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -104,10 +87,14 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= 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/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo= @@ -194,7 +181,6 @@ github.com/dgraph-io/badger/v4 v4.6.0/go.mod h1:KSJ5VTuZNC3Sd+YhvVjk2nYua9UZnnTr github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I= github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -202,7 +188,6 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh 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 v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -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= @@ -210,8 +195,6 @@ github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/ebitengine/purego v0.6.0-alpha.5 h1:EYID3JOAdmQ4SNZYJHu9V6IqOeRQDBYxqKAg9PyoHFY= -github.com/ebitengine/purego v0.6.0-alpha.5/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= 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= @@ -225,8 +208,8 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -266,8 +249,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG 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-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -289,8 +272,8 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= +github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= 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= @@ -329,8 +312,9 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= @@ -354,8 +338,6 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ 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/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBBos92HalKpaGKHrp+3Uo6yTodo= -github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -381,13 +363,13 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= 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/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= @@ -399,8 +381,6 @@ github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYS github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= @@ -469,8 +449,10 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -584,16 +566,12 @@ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= 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/outcaste-io/ristretto v0.2.3 h1:AK4zt/fJ76kjlYObOeNwh4T3asEuaCmp26pOvUOL9w0= -github.com/outcaste-io/ristretto v0.2.3/go.mod h1:W8HywhmtlopSB1jeMg3JtdIhf+DYkLAr0VN/s4+MHac= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -604,8 +582,6 @@ github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= -github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= @@ -655,8 +631,6 @@ github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoG github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= 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/richardartoul/molecule v1.0.1-0.20221107223329-32cfee06a052 h1:Qp27Idfgi6ACvFQat5+VJvlYToylpM/hcyLBI3WaKPA= -github.com/richardartoul/molecule v1.0.1-0.20221107223329-32cfee06a052/go.mod h1:uvX/8buq8uVeiZiFht+0lqSLBHF+uGV8BrTv8W/SIwk= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -680,8 +654,6 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg= -github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -695,8 +667,6 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= 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/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 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.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= @@ -729,10 +699,11 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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.2/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/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 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.14 h1:xNMoHRJOTwMn63ip6qoWJ2Ymgvj7E2b9jY2FAwY+qRo= @@ -743,13 +714,10 @@ github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2l 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/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= -github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= @@ -760,7 +728,6 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 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= @@ -774,26 +741,29 @@ go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= -go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 h1:vl9obrcoWVKp/lwl8tRE33853I8Xru9HFbw/skNeLs8= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0/go.mod h1:GAXRxmLJcVM3u22IjTg74zWBrRCKq8BnOqUVLodpcpw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= +go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= @@ -806,6 +776,7 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.4.0 h1:A8WCeEWhLwPBKNbFi5Wv5UTCBx5zzubnXDlMOFAzFMc= golang.org/x/arch v0.4.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -816,9 +787,8 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U 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.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= @@ -838,8 +808,6 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -862,16 +830,13 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 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-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -883,10 +848,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ 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.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -921,7 +884,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210124154548-22da62e12c0c/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= @@ -936,33 +898,26 @@ 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-20220627191245-f75cf1eec38b/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-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/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.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 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.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.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.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -984,17 +939,15 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY 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.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= 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= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1012,10 +965,10 @@ google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6D 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-20250106144421-5f5ef82da422 h1:GVIKPyP/kLIyVOgOnTwFOrvQaQUzOzGMCxgFUOEmm24= -google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422/go.mod h1:b6h1vNKhxaSoEI+5jc3PJUCustfli/mRab7295pY7rw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1033,8 +986,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp 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.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= +google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= 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= @@ -1048,15 +1001,10 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba 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.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/DataDog/dd-trace-go.v1 v1.62.0 h1:jeZxE4ZlfAc+R0zO5TEmJBwOLet3NThsOfYJeSQg1x0= -gopkg.in/DataDog/dd-trace-go.v1 v1.62.0/go.mod h1:YTvYkk3PTsfw0OWrRFxV/IQ5Gy4nZ5TRvxTAP3JcIzs= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= -gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= 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= @@ -1088,16 +1036,16 @@ 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/gotraceui v0.2.0 h1:dmNsfQ9Vl3GwbiVD7Z8d/osC6WtGGrasyrC2suc4ZIQ= -honnef.co/go/gotraceui v0.2.0/go.mod h1:qHo4/W75cA3bX0QQoSvDjbJa4R8mAyyFjbWAj63XElc= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= 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/x/circuit/keeper/genesis.go b/x/circuit/keeper/genesis.go index d6747d442908..20ff0b73b736 100644 --- a/x/circuit/keeper/genesis.go +++ b/x/circuit/keeper/genesis.go @@ -4,15 +4,21 @@ import ( context "context" "cosmossdk.io/x/circuit/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) func (k *Keeper) ExportGenesis(ctx context.Context) (data *types.GenesisState) { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ExportGenesis")(&err) + var ( permissions []*types.GenesisAccountPermissions disabledMsgs []string ) - err := k.Permissions.Walk(ctx, nil, func(address []byte, perm types.Permissions) (stop bool, err error) { + err = k.Permissions.Walk(sdkCtx, nil, func(address []byte, perm types.Permissions) (stop bool, err error) { add, err := k.addressCodec.BytesToString(address) if err != nil { return true, err @@ -29,7 +35,7 @@ func (k *Keeper) ExportGenesis(ctx context.Context) (data *types.GenesisState) { panic(err) } - err = k.DisableList.Walk(ctx, nil, func(msgUrl string) (stop bool, err error) { + err = k.DisableList.Walk(sdkCtx, nil, func(msgUrl string) (stop bool, err error) { disabledMsgs = append(disabledMsgs, msgUrl) return false, nil }) @@ -45,6 +51,10 @@ func (k *Keeper) ExportGenesis(ctx context.Context) (data *types.GenesisState) { // InitGenesis initializes the circuit module's state from a given genesis state. func (k *Keeper) InitGenesis(ctx context.Context, genState *types.GenesisState) { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "InitGenesis")(&err) + for _, accounts := range genState.AccountPermissions { add, err := k.addressCodec.StringToBytes(accounts.Address) if err != nil { @@ -52,13 +62,13 @@ func (k *Keeper) InitGenesis(ctx context.Context, genState *types.GenesisState) } // Set the permissions for the account - if err := k.Permissions.Set(ctx, add, *accounts.Permissions); err != nil { + if err = k.Permissions.Set(sdkCtx, add, *accounts.Permissions); err != nil { panic(err) } } for _, url := range genState.DisabledTypeUrls { // Set the disabled type urls - if err := k.DisableList.Set(ctx, url); err != nil { + if err = k.DisableList.Set(sdkCtx, url); err != nil { panic(err) } } diff --git a/x/circuit/keeper/keeper.go b/x/circuit/keeper/keeper.go index 25513991f8c1..f5c20eae99ef 100644 --- a/x/circuit/keeper/keeper.go +++ b/x/circuit/keeper/keeper.go @@ -7,12 +7,15 @@ import ( "cosmossdk.io/core/address" "cosmossdk.io/core/store" "cosmossdk.io/x/circuit/types" + "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" ) // Keeper defines the circuit module's keeper. type Keeper struct { + meter metrics.Meter cdc codec.BinaryCodec storeService store.KVStoreService @@ -70,7 +73,18 @@ func (k *Keeper) GetAuthority() []byte { } // IsAllowed returns true when msg URL is not found in the DisableList for given context, else false. -func (k *Keeper) IsAllowed(ctx context.Context, msgURL string) (bool, error) { - has, err := k.DisableList.Has(ctx, msgURL) +func (k *Keeper) IsAllowed(ctx context.Context, msgURL string) (meterResult bool, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IsAllowed")(&err) + + has, err := k.DisableList.Has(sdkCtx, msgURL) return !has, err } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter +} diff --git a/x/circuit/keeper/msg_server.go b/x/circuit/keeper/msg_server.go index 0c6bb07cbc40..9721e3a80fae 100644 --- a/x/circuit/keeper/msg_server.go +++ b/x/circuit/keeper/msg_server.go @@ -26,7 +26,10 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { return &msgServer{Keeper: keeper} } -func (srv msgServer) AuthorizeCircuitBreaker(ctx context.Context, msg *types.MsgAuthorizeCircuitBreaker) (*types.MsgAuthorizeCircuitBreakerResponse, error) { +func (srv msgServer) AuthorizeCircuitBreaker(ctx context.Context, msg *types.MsgAuthorizeCircuitBreaker) (meterResult *types.MsgAuthorizeCircuitBreakerResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer srv.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "AuthorizeCircuitBreaker")(&err) + address, err := srv.addressCodec.StringToBytes(msg.Granter) if err != nil { return nil, err @@ -35,7 +38,7 @@ func (srv msgServer) AuthorizeCircuitBreaker(ctx context.Context, msg *types.Msg // if the granter is the module authority no need to check perms if !bytes.Equal(address, srv.GetAuthority()) { // Check that the authorizer has the permission level of "super admin" - perms, err := srv.Permissions.Get(ctx, address) + perms, err := srv.Permissions.Get(sdkCtx, address) if err != nil { if errorsmod.IsOf(err, collections.ErrNotFound) { return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "only super admins can authorize users") @@ -59,11 +62,10 @@ func (srv msgServer) AuthorizeCircuitBreaker(ctx context.Context, msg *types.Msg } // Append the account in the msg to the store's set of authorized super admins - if err = srv.Permissions.Set(ctx, grantee, *msg.Permissions); err != nil { + if err = srv.Permissions.Set(sdkCtx, grantee, *msg.Permissions); err != nil { return nil, err } - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( "authorize_circuit_breaker", @@ -78,21 +80,24 @@ func (srv msgServer) AuthorizeCircuitBreaker(ctx context.Context, msg *types.Msg }, nil } -func (srv msgServer) TripCircuitBreaker(ctx context.Context, msg *types.MsgTripCircuitBreaker) (*types.MsgTripCircuitBreakerResponse, error) { +func (srv msgServer) TripCircuitBreaker(ctx context.Context, msg *types.MsgTripCircuitBreaker) (meterResult *types.MsgTripCircuitBreakerResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer srv.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "TripCircuitBreaker")(&err) + address, err := srv.addressCodec.StringToBytes(msg.Authority) if err != nil { return nil, err } // Check that the account has the permissions - perms, err := srv.Permissions.Get(ctx, address) + perms, err := srv.Permissions.Get(sdkCtx, address) if err != nil && !errorsmod.IsOf(err, collections.ErrNotFound) { return nil, err } for _, msgTypeURL := range msg.MsgTypeUrls { // check if the message is in the list of allowed messages - isAllowed, err := srv.IsAllowed(ctx, msgTypeURL) + isAllowed, err := srv.IsAllowed(sdkCtx, msgTypeURL) if err != nil { return nil, err } @@ -113,7 +118,7 @@ func (srv msgServer) TripCircuitBreaker(ctx context.Context, msg *types.MsgTripC return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "account does not have permission to trip circuit breaker") } - if err = srv.DisableList.Set(ctx, msgTypeURL); err != nil { + if err = srv.DisableList.Set(sdkCtx, msgTypeURL); err != nil { return nil, err } @@ -121,7 +126,6 @@ func (srv msgServer) TripCircuitBreaker(ctx context.Context, msg *types.MsgTripC urls := strings.Join(msg.GetMsgTypeUrls(), ",") - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( "trip_circuit_breaker", @@ -137,7 +141,10 @@ func (srv msgServer) TripCircuitBreaker(ctx context.Context, msg *types.MsgTripC // ResetCircuitBreaker resumes processing of Msg's in the state machine that // have been been paused using TripCircuitBreaker. -func (srv msgServer) ResetCircuitBreaker(ctx context.Context, msg *types.MsgResetCircuitBreaker) (*types.MsgResetCircuitBreakerResponse, error) { +func (srv msgServer) ResetCircuitBreaker(ctx context.Context, msg *types.MsgResetCircuitBreaker) (meterResult *types.MsgResetCircuitBreakerResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer srv.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "ResetCircuitBreaker")(&err) + keeper := srv.Keeper address, err := srv.addressCodec.StringToBytes(msg.Authority) if err != nil { @@ -145,14 +152,14 @@ func (srv msgServer) ResetCircuitBreaker(ctx context.Context, msg *types.MsgRese } // Get the permissions for the account specified in the msg.Authority field - perms, err := keeper.Permissions.Get(ctx, address) + perms, err := keeper.Permissions.Get(sdkCtx, address) if err != nil && !errorsmod.IsOf(err, collections.ErrNotFound) { return nil, err } for _, msgTypeURL := range msg.MsgTypeUrls { // check if the message is in the list of allowed messages - isAllowed, err := srv.IsAllowed(ctx, msgTypeURL) + isAllowed, err := srv.IsAllowed(sdkCtx, msgTypeURL) if err != nil { return nil, err } @@ -173,14 +180,13 @@ func (srv msgServer) ResetCircuitBreaker(ctx context.Context, msg *types.MsgRese return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "account does not have permission to reset circuit breaker") } - if err = srv.DisableList.Remove(ctx, msgTypeURL); err != nil { + if err = srv.DisableList.Remove(sdkCtx, msgTypeURL); err != nil { return nil, err } } urls := strings.Join(msg.GetMsgTypeUrls(), ",") - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( "reset_circuit_breaker", diff --git a/x/circuit/keeper/query.go b/x/circuit/keeper/query.go index a8b39e4d4a82..76edf73cde5e 100644 --- a/x/circuit/keeper/query.go +++ b/x/circuit/keeper/query.go @@ -5,6 +5,7 @@ import ( "cosmossdk.io/x/circuit/types" + sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/types/query" ) @@ -21,13 +22,16 @@ func NewQueryServer(keeper Keeper) types.QueryServer { } // Account returns account permissions. -func (qs QueryServer) Account(ctx context.Context, req *types.QueryAccountRequest) (*types.AccountResponse, error) { +func (qs QueryServer) Account(ctx context.Context, req *types.QueryAccountRequest) (meterResult *types.AccountResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer qs.keeper.Meter(ctx).FuncTiming(&sdkCtx, "Account")(&err) + add, err := qs.keeper.addressCodec.StringToBytes(req.Address) if err != nil { return nil, err } - perms, err := qs.keeper.Permissions.Get(ctx, add) + perms, err := qs.keeper.Permissions.Get(sdkCtx, add) if err != nil { return nil, err } @@ -36,9 +40,12 @@ func (qs QueryServer) Account(ctx context.Context, req *types.QueryAccountReques } // Account returns account permissions. -func (qs QueryServer) Accounts(ctx context.Context, req *types.QueryAccountsRequest) (*types.AccountsResponse, error) { +func (qs QueryServer) Accounts(ctx context.Context, req *types.QueryAccountsRequest) (meterResult *types.AccountsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer qs.keeper.Meter(ctx).FuncTiming(&sdkCtx, "Accounts")(&err) + results, pageRes, err := query.CollectionPaginate( - ctx, + sdkCtx, qs.keeper.Permissions, req.Pagination, func(key []byte, value types.Permissions) (*types.GenesisAccountPermissions, error) { @@ -60,10 +67,13 @@ func (qs QueryServer) Accounts(ctx context.Context, req *types.QueryAccountsRequ } // DisabledList returns a list of disabled message urls -func (qs QueryServer) DisabledList(ctx context.Context, req *types.QueryDisabledListRequest) (*types.DisabledListResponse, error) { +func (qs QueryServer) DisabledList(ctx context.Context, req *types.QueryDisabledListRequest) (meterResult *types.DisabledListResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer qs.keeper.Meter(ctx).FuncTiming(&sdkCtx, "DisabledList")(&err) + // Iterate over disabled list and perform the callback var msgs []string - err := qs.keeper.DisableList.Walk(ctx, nil, func(msgUrl string) (bool, error) { + err = qs.keeper.DisableList.Walk(sdkCtx, nil, func(msgUrl string) (bool, error) { msgs = append(msgs, msgUrl) return false, nil }) diff --git a/x/consensus/keeper/keeper.go b/x/consensus/keeper/keeper.go index 0c8746b806be..a1171e5afcfe 100644 --- a/x/consensus/keeper/keeper.go +++ b/x/consensus/keeper/keeper.go @@ -3,21 +3,21 @@ package keeper import ( "context" - cmtproto "github.com/cometbft/cometbft/api/cometbft/types/v1" - cmttypes "github.com/cometbft/cometbft/types" - "google.golang.org/grpc/codes" - "google.golang.org/grpc/status" - "cosmossdk.io/collections" "cosmossdk.io/core/event" storetypes "cosmossdk.io/core/store" "cosmossdk.io/errors" + "github.com/InjectiveLabs/metrics/v2" + cmtproto "github.com/cometbft/cometbft/api/cometbft/types/v1" + cmttypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/cosmos-sdk/x/consensus/exported" "github.com/cosmos/cosmos-sdk/x/consensus/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + "google.golang.org/grpc/codes" + "google.golang.org/grpc/status" ) var StoreKey = "Consensus" @@ -26,8 +26,11 @@ type Keeper struct { storeService storetypes.KVStoreService event event.Service - authority string + authority string + ParamsStore collections.Item[cmtproto.ConsensusParams] + + meter metrics.Meter } var _ exported.ConsensusParamSetter = Keeper{}.ParamsStore @@ -51,8 +54,11 @@ func (k *Keeper) GetAuthority() string { var _ types.QueryServer = Keeper{} // Params queries params of consensus module -func (k Keeper) Params(ctx context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - params, err := k.ParamsStore.Get(ctx) +func (k Keeper) Params(ctx context.Context, _ *types.QueryParamsRequest) (meterResult *types.QueryParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Params")(&err) + + params, err := k.ParamsStore.Get(sdkCtx) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -64,7 +70,10 @@ func (k Keeper) Params(ctx context.Context, _ *types.QueryParamsRequest) (*types var _ types.MsgServer = Keeper{} -func (k Keeper) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { +func (k Keeper) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (meterResult *types.MsgUpdateParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UpdateParams")(&err) + if k.GetAuthority() != msg.Authority { return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.GetAuthority(), msg.Authority) } @@ -74,7 +83,7 @@ func (k Keeper) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (* return nil, err } - paramsProto, err := k.ParamsStore.Get(ctx) + paramsProto, err := k.ParamsStore.Get(sdkCtx) if err != nil { return nil, err } @@ -88,22 +97,20 @@ func (k Keeper) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (* nextParams := params.Update(&consensusParams) - if err := nextParams.ValidateBasic(); err != nil { + if err = nextParams.ValidateBasic(); err != nil { return nil, err } - sdkCtx := sdk.UnwrapSDKContext(ctx) - - if err := params.ValidateUpdate(&consensusParams, sdkCtx.BlockHeader().Height); err != nil { + if err = params.ValidateUpdate(&consensusParams, sdkCtx.BlockHeader().Height); err != nil { return nil, err } - if err := k.ParamsStore.Set(ctx, nextParams.ToProto()); err != nil { + if err = k.ParamsStore.Set(sdkCtx, nextParams.ToProto()); err != nil { return nil, err } - if err := k.event.EventManager(ctx).EmitKV( - ctx, + if err = k.event.EventManager(sdkCtx).EmitKV( + sdkCtx, "update_consensus_params", event.Attribute{Key: "authority", Value: msg.Authority}, event.Attribute{Key: "parameters", Value: consensusParams.String()}); err != nil { @@ -112,3 +119,11 @@ func (k Keeper) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (* return &types.MsgUpdateParamsResponse{}, nil } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter +} diff --git a/x/crisis/abci.go b/x/crisis/abci.go index 2eacc641c4ad..0decc5780933 100644 --- a/x/crisis/abci.go +++ b/x/crisis/abci.go @@ -11,9 +11,10 @@ import ( // check all registered invariants func EndBlocker(ctx context.Context, k keeper.Keeper) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "EndBlocker")() defer telemetry.ModuleMeasureSince(types.ModuleName, telemetry.Now(), telemetry.MetricKeyEndBlocker) - sdkCtx := sdk.UnwrapSDKContext(ctx) if k.InvCheckPeriod() == 0 || sdkCtx.BlockHeight()%int64(k.InvCheckPeriod()) != 0 { // skip running the invariant check return diff --git a/x/crisis/keeper/genesis.go b/x/crisis/keeper/genesis.go index e68dc05d5872..32dac92222bd 100644 --- a/x/crisis/keeper/genesis.go +++ b/x/crisis/keeper/genesis.go @@ -7,13 +7,19 @@ import ( // new crisis genesis func (k *Keeper) InitGenesis(ctx sdk.Context, data *types.GenesisState) { - if err := k.ConstantFee.Set(ctx, data.ConstantFee); err != nil { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "InitGenesis")(&err) + + if err = k.ConstantFee.Set(ctx, data.ConstantFee); err != nil { panic(err) } } // ExportGenesis returns a GenesisState for a given context and keeper. func (k *Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "ExportGenesis")(&err) + constantFee, err := k.ConstantFee.Get(ctx) if err != nil { panic(err) diff --git a/x/crisis/keeper/keeper.go b/x/crisis/keeper/keeper.go index edf66124301b..963012028dd3 100644 --- a/x/crisis/keeper/keeper.go +++ b/x/crisis/keeper/keeper.go @@ -9,6 +9,7 @@ import ( "cosmossdk.io/core/address" storetypes "cosmossdk.io/core/store" "cosmossdk.io/log" + "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -17,6 +18,7 @@ import ( // Keeper - crisis keeper type Keeper struct { + meter metrics.Meter routes []types.InvarRoute invCheckPeriod uint storeService storetypes.KVStoreService @@ -70,6 +72,8 @@ func (k *Keeper) GetAuthority() string { // Logger returns a module-specific logger. func (k *Keeper) Logger(ctx context.Context) log.Logger { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Logger")() + return sdkCtx.Logger().With("module", "x/"+types.ModuleName) } @@ -96,6 +100,9 @@ func (k *Keeper) Invariants() []sdk.Invariant { // AssertInvariants asserts all registered invariants. If any invariant fails, // the method panics. func (k *Keeper) AssertInvariants(ctx sdk.Context) { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "AssertInvariants")(&err) + logger := k.Logger(ctx) start := time.Now() @@ -122,6 +129,17 @@ func (k *Keeper) AssertInvariants(ctx sdk.Context) { func (k *Keeper) InvCheckPeriod() uint { return k.invCheckPeriod } // SendCoinsFromAccountToFeeCollector transfers amt to the fee collector account. -func (k *Keeper) SendCoinsFromAccountToFeeCollector(ctx context.Context, senderAddr sdk.AccAddress, amt sdk.Coins) error { - return k.supplyKeeper.SendCoinsFromAccountToModule(ctx, senderAddr, k.feeCollectorName, amt) +func (k *Keeper) SendCoinsFromAccountToFeeCollector(ctx context.Context, senderAddr sdk.AccAddress, amt sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SendCoinsFromAccountToFeeCollector")(&err) + + return k.supplyKeeper.SendCoinsFromAccountToModule(sdkCtx, senderAddr, k.feeCollectorName, amt) +} + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter } diff --git a/x/crisis/keeper/msg_server.go b/x/crisis/keeper/msg_server.go index 789306937375..9f8826cfdad0 100644 --- a/x/crisis/keeper/msg_server.go +++ b/x/crisis/keeper/msg_server.go @@ -15,7 +15,10 @@ var _ types.MsgServer = &Keeper{} // VerifyInvariant implements MsgServer.VerifyInvariant method. // It defines a method to verify a particular invariant. -func (k *Keeper) VerifyInvariant(goCtx context.Context, msg *types.MsgVerifyInvariant) (*types.MsgVerifyInvariantResponse, error) { +func (k *Keeper) VerifyInvariant(goCtx context.Context, msg *types.MsgVerifyInvariant) (meterResult *types.MsgVerifyInvariantResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "VerifyInvariant")(&err) + if msg.Sender == "" { return nil, sdkerrors.ErrInvalidAddress.Wrap("empty address string is not allowed") } @@ -24,19 +27,18 @@ func (k *Keeper) VerifyInvariant(goCtx context.Context, msg *types.MsgVerifyInva return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid sender address: %s", err) } - ctx := sdk.UnwrapSDKContext(goCtx) - params, err := k.ConstantFee.Get(goCtx) + params, err := k.ConstantFee.Get(sdkCtx) if err != nil { return nil, err } constantFee := sdk.NewCoins(params) - if err := k.SendCoinsFromAccountToFeeCollector(ctx, sender, constantFee); err != nil { + if err = k.SendCoinsFromAccountToFeeCollector(sdkCtx, sender, constantFee); err != nil { return nil, err } // use a cached context to avoid gas costs during invariants - cacheCtx, _ := ctx.CacheContext() + cacheCtx, _ := sdkCtx.CacheContext() found := false msgFullRoute := msg.FullInvariantRoute() @@ -64,7 +66,7 @@ func (k *Keeper) VerifyInvariant(goCtx context.Context, msg *types.MsgVerifyInva panic(res) } - ctx.EventManager().EmitEvents(sdk.Events{ + sdkCtx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( types.EventTypeInvariant, sdk.NewAttribute(types.AttributeKeyRoute, msg.InvariantRoute), @@ -76,7 +78,10 @@ func (k *Keeper) VerifyInvariant(goCtx context.Context, msg *types.MsgVerifyInva // UpdateParams implements MsgServer.UpdateParams method. // It defines a method to update the x/crisis module parameters. -func (k *Keeper) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { +func (k *Keeper) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (meterResult *types.MsgUpdateParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UpdateParams")(&err) + if k.authority != msg.Authority { return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.authority, msg.Authority) } @@ -89,7 +94,7 @@ func (k *Keeper) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) ( return nil, errors.Wrap(sdkerrors.ErrInvalidCoins, "negative constant fee") } - if err := k.ConstantFee.Set(ctx, msg.ConstantFee); err != nil { + if err = k.ConstantFee.Set(sdkCtx, msg.ConstantFee); err != nil { return nil, err } diff --git a/x/distribution/abci.go b/x/distribution/abci.go index 70fdb7eeb270..68939bdc1c7a 100644 --- a/x/distribution/abci.go +++ b/x/distribution/abci.go @@ -9,7 +9,8 @@ import ( // BeginBlocker sets the proposer for determining distribution during endblock // and distribute rewards for the previous block. -func BeginBlocker(ctx sdk.Context, k keeper.Keeper) error { +func BeginBlocker(ctx sdk.Context, k keeper.Keeper) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "BeginBlocker")(&err) defer telemetry.ModuleMeasureSince(types.ModuleName, telemetry.Now(), telemetry.MetricKeyBeginBlocker) // determine the total power signing the block @@ -21,7 +22,7 @@ func BeginBlocker(ctx sdk.Context, k keeper.Keeper) error { // TODO this is Tendermint-dependent // ref https://github.com/cosmos/cosmos-sdk/issues/3095 if ctx.BlockHeight() > 1 { - if err := k.AllocateTokens(ctx, previousTotalPower, ctx.VoteInfos()); err != nil { + if err = k.AllocateTokens(ctx, previousTotalPower, ctx.VoteInfos()); err != nil { return err } } diff --git a/x/distribution/keeper/alias_functions.go b/x/distribution/keeper/alias_functions.go index 28ea51c0c26c..bee3d0994034 100644 --- a/x/distribution/keeper/alias_functions.go +++ b/x/distribution/keeper/alias_functions.go @@ -8,8 +8,11 @@ import ( ) // get outstanding rewards -func (k Keeper) GetValidatorOutstandingRewardsCoins(ctx context.Context, val sdk.ValAddress) (sdk.DecCoins, error) { - rewards, err := k.GetValidatorOutstandingRewards(ctx, val) +func (k Keeper) GetValidatorOutstandingRewardsCoins(ctx context.Context, val sdk.ValAddress) (meterResult sdk.DecCoins, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorOutstandingRewardsCoins")(&err) + + rewards, err := k.GetValidatorOutstandingRewards(sdkCtx, val) if err != nil { return nil, err } @@ -19,5 +22,8 @@ func (k Keeper) GetValidatorOutstandingRewardsCoins(ctx context.Context, val sdk // GetDistributionAccount returns the distribution ModuleAccount func (k Keeper) GetDistributionAccount(ctx context.Context) sdk.ModuleAccountI { - return k.authKeeper.GetModuleAccount(ctx, types.ModuleName) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDistributionAccount")() + + return k.authKeeper.GetModuleAccount(sdkCtx, types.ModuleName) } diff --git a/x/distribution/keeper/allocation.go b/x/distribution/keeper/allocation.go index 83db0ae72e20..0c71cf85287a 100644 --- a/x/distribution/keeper/allocation.go +++ b/x/distribution/keeper/allocation.go @@ -14,35 +14,38 @@ import ( // AllocateTokens performs reward and fee distribution to all validators based // on the F1 fee distribution specification. -func (k Keeper) AllocateTokens(ctx context.Context, totalPreviousPower int64, bondedVotes []abci.VoteInfo) error { +func (k Keeper) AllocateTokens(ctx context.Context, totalPreviousPower int64, bondedVotes []abci.VoteInfo) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "AllocateTokens")(&err) + // fetch and clear the collected fees for distribution, since this is // called in BeginBlock, collected fees will be from the previous block // (and distributed to the previous proposer) - feeCollector := k.authKeeper.GetModuleAccount(ctx, k.feeCollectorName) - feesCollectedInt := k.bankKeeper.GetAllBalances(ctx, feeCollector.GetAddress()) + feeCollector := k.authKeeper.GetModuleAccount(sdkCtx, k.feeCollectorName) + feesCollectedInt := k.bankKeeper.GetAllBalances(sdkCtx, feeCollector.GetAddress()) feesCollected := sdk.NewDecCoinsFromCoins(feesCollectedInt...) // transfer collected fees to the distribution module account - err := k.bankKeeper.SendCoinsFromModuleToModule(ctx, k.feeCollectorName, types.ModuleName, feesCollectedInt) + err = k.bankKeeper.SendCoinsFromModuleToModule(sdkCtx, k.feeCollectorName, types.ModuleName, feesCollectedInt) if err != nil { return err } // temporary workaround to keep CanWithdrawInvariant happy // general discussions here: https://github.com/cosmos/cosmos-sdk/issues/2906#issuecomment-441867634 - feePool, err := k.FeePool.Get(ctx) + feePool, err := k.FeePool.Get(sdkCtx) if err != nil { return err } if totalPreviousPower == 0 { feePool.CommunityPool = feePool.CommunityPool.Add(feesCollected...) - return k.FeePool.Set(ctx, feePool) + return k.FeePool.Set(sdkCtx, feePool) } // calculate fraction allocated to validators remaining := feesCollected - communityTax, err := k.GetCommunityTax(ctx) + communityTax, err := k.GetCommunityTax(sdkCtx) if err != nil { return err } @@ -56,7 +59,7 @@ func (k Keeper) AllocateTokens(ctx context.Context, totalPreviousPower int64, bo // // Ref: https://github.com/cosmos/cosmos-sdk/pull/3099#discussion_r246276376 for _, vote := range bondedVotes { - validator, err := k.stakingKeeper.ValidatorByConsAddr(ctx, vote.Validator.Address) + validator, err := k.stakingKeeper.ValidatorByConsAddr(sdkCtx, vote.Validator.Address) if err != nil { return err } @@ -67,7 +70,7 @@ func (k Keeper) AllocateTokens(ctx context.Context, totalPreviousPower int64, bo powerFraction := math.LegacyNewDec(vote.Validator.Power).QuoTruncate(math.LegacyNewDec(totalPreviousPower)) reward := feeMultiplier.MulDecTruncate(powerFraction) - err = k.AllocateTokensToValidator(ctx, validator, reward) + err = k.AllocateTokensToValidator(sdkCtx, validator, reward) if err != nil { return err } @@ -77,12 +80,15 @@ func (k Keeper) AllocateTokens(ctx context.Context, totalPreviousPower int64, bo // allocate community funding feePool.CommunityPool = feePool.CommunityPool.Add(remaining...) - return k.FeePool.Set(ctx, feePool) + return k.FeePool.Set(sdkCtx, feePool) } // AllocateTokensToValidator allocate tokens to a particular validator, // splitting according to commission. -func (k Keeper) AllocateTokensToValidator(ctx context.Context, val stakingtypes.ValidatorI, tokens sdk.DecCoins) error { +func (k Keeper) AllocateTokensToValidator(ctx context.Context, val stakingtypes.ValidatorI, tokens sdk.DecCoins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "AllocateTokensToValidator")(&err) + // split tokens between validator and delegators according to commission commission := tokens.MulDec(val.GetCommission()) shared := tokens.Sub(commission) @@ -93,7 +99,6 @@ func (k Keeper) AllocateTokensToValidator(ctx context.Context, val stakingtypes. } // update current commission - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeCommission, @@ -101,25 +106,25 @@ func (k Keeper) AllocateTokensToValidator(ctx context.Context, val stakingtypes. sdk.NewAttribute(types.AttributeKeyValidator, val.GetOperator()), ), ) - currentCommission, err := k.GetValidatorAccumulatedCommission(ctx, valBz) + currentCommission, err := k.GetValidatorAccumulatedCommission(sdkCtx, valBz) if err != nil { return err } currentCommission.Commission = currentCommission.Commission.Add(commission...) - err = k.SetValidatorAccumulatedCommission(ctx, valBz, currentCommission) + err = k.SetValidatorAccumulatedCommission(sdkCtx, valBz, currentCommission) if err != nil { return err } // update current rewards - currentRewards, err := k.GetValidatorCurrentRewards(ctx, valBz) + currentRewards, err := k.GetValidatorCurrentRewards(sdkCtx, valBz) if err != nil { return err } currentRewards.Rewards = currentRewards.Rewards.Add(shared...) - err = k.SetValidatorCurrentRewards(ctx, valBz, currentRewards) + err = k.SetValidatorCurrentRewards(sdkCtx, valBz, currentRewards) if err != nil { return err } @@ -133,11 +138,11 @@ func (k Keeper) AllocateTokensToValidator(ctx context.Context, val stakingtypes. ), ) - outstanding, err := k.GetValidatorOutstandingRewards(ctx, valBz) + outstanding, err := k.GetValidatorOutstandingRewards(sdkCtx, valBz) if err != nil { return err } outstanding.Rewards = outstanding.Rewards.Add(tokens...) - return k.SetValidatorOutstandingRewards(ctx, valBz, outstanding) + return k.SetValidatorOutstandingRewards(sdkCtx, valBz, outstanding) } diff --git a/x/distribution/keeper/delegation.go b/x/distribution/keeper/delegation.go index 2b0e99d390e5..79929af50bb2 100644 --- a/x/distribution/keeper/delegation.go +++ b/x/distribution/keeper/delegation.go @@ -12,26 +12,29 @@ import ( ) // initialize starting info for a new delegation -func (k Keeper) initializeDelegation(ctx context.Context, val sdk.ValAddress, del sdk.AccAddress) error { +func (k Keeper) initializeDelegation(ctx context.Context, val sdk.ValAddress, del sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "initializeDelegation")(&err) + // period has already been incremented - we want to store the period ended by this delegation action - valCurrentRewards, err := k.GetValidatorCurrentRewards(ctx, val) + valCurrentRewards, err := k.GetValidatorCurrentRewards(sdkCtx, val) if err != nil { return err } previousPeriod := valCurrentRewards.Period - 1 // increment reference count for the period we're going to track - err = k.incrementReferenceCount(ctx, val, previousPeriod) + err = k.incrementReferenceCount(sdkCtx, val, previousPeriod) if err != nil { return err } - validator, err := k.stakingKeeper.Validator(ctx, val) + validator, err := k.stakingKeeper.Validator(sdkCtx, val) if err != nil { return err } - delegation, err := k.stakingKeeper.Delegation(ctx, del, val) + delegation, err := k.stakingKeeper.Delegation(sdkCtx, del, val) if err != nil { return err } @@ -40,14 +43,16 @@ func (k Keeper) initializeDelegation(ctx context.Context, val sdk.ValAddress, de // we don't store directly, so multiply delegation shares * (tokens per share) // note: necessary to truncate so we don't allow withdrawing more rewards than owed stake := validator.TokensFromSharesTruncated(delegation.GetShares()) - sdkCtx := sdk.UnwrapSDKContext(ctx) - return k.SetDelegatorStartingInfo(ctx, val, del, types.NewDelegatorStartingInfo(previousPeriod, stake, uint64(sdkCtx.BlockHeight()))) + return k.SetDelegatorStartingInfo(sdkCtx, val, del, types.NewDelegatorStartingInfo(previousPeriod, stake, uint64(sdkCtx.BlockHeight()))) } // calculate the rewards accrued by a delegation between two periods func (k Keeper) calculateDelegationRewardsBetween(ctx context.Context, val stakingtypes.ValidatorI, startingPeriod, endingPeriod uint64, stake math.LegacyDec, -) (sdk.DecCoins, error) { +) (meterResult sdk.DecCoins, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "calculateDelegationRewardsBetween")(&err) + // sanity check if startingPeriod > endingPeriod { panic("startingPeriod cannot be greater than endingPeriod") @@ -64,12 +69,12 @@ func (k Keeper) calculateDelegationRewardsBetween(ctx context.Context, val staki } // return staking * (ending - starting) - starting, err := k.GetValidatorHistoricalRewards(ctx, valBz, startingPeriod) + starting, err := k.GetValidatorHistoricalRewards(sdkCtx, valBz, startingPeriod) if err != nil { return sdk.DecCoins{}, err } - ending, err := k.GetValidatorHistoricalRewards(ctx, valBz, endingPeriod) + ending, err := k.GetValidatorHistoricalRewards(sdkCtx, valBz, endingPeriod) if err != nil { return sdk.DecCoins{}, err } @@ -85,6 +90,9 @@ func (k Keeper) calculateDelegationRewardsBetween(ctx context.Context, val staki // calculate the total rewards accrued by a delegation func (k Keeper) CalculateDelegationRewards(ctx context.Context, val stakingtypes.ValidatorI, del stakingtypes.DelegationI, endingPeriod uint64) (rewards sdk.DecCoins, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "CalculateDelegationRewards")(&err) + addrCodec := k.authKeeper.AddressCodec() delAddr, err := addrCodec.StringToBytes(del.GetDelegatorAddr()) if err != nil { @@ -97,12 +105,11 @@ func (k Keeper) CalculateDelegationRewards(ctx context.Context, val stakingtypes } // fetch starting info for delegation - startingInfo, err := k.GetDelegatorStartingInfo(ctx, sdk.ValAddress(valAddr), sdk.AccAddress(delAddr)) + startingInfo, err := k.GetDelegatorStartingInfo(sdkCtx, sdk.ValAddress(valAddr), sdk.AccAddress(delAddr)) if err != nil { return } - sdkCtx := sdk.UnwrapSDKContext(ctx) if startingInfo.Height == uint64(sdkCtx.BlockHeight()) { // started this height, no rewards yet return @@ -123,11 +130,11 @@ func (k Keeper) CalculateDelegationRewards(ctx context.Context, val stakingtypes // for them for the stake sanity check below. endingHeight := uint64(sdkCtx.BlockHeight()) if endingHeight > startingHeight { - k.IterateValidatorSlashEventsBetween(ctx, valAddr, startingHeight, endingHeight, + k.IterateValidatorSlashEventsBetween(sdkCtx, valAddr, startingHeight, endingHeight, func(height uint64, event types.ValidatorSlashEvent) (stop bool) { endingPeriod := event.ValidatorPeriod if endingPeriod > startingPeriod { - delRewards, err := k.calculateDelegationRewardsBetween(ctx, val, startingPeriod, endingPeriod, stake) + delRewards, err := k.calculateDelegationRewardsBetween(sdkCtx, val, startingPeriod, endingPeriod, stake) if err != nil { panic(err) } @@ -182,7 +189,7 @@ func (k Keeper) CalculateDelegationRewards(ctx context.Context, val stakingtypes } // calculate rewards for final period - delRewards, err := k.calculateDelegationRewardsBetween(ctx, val, startingPeriod, endingPeriod, stake) + delRewards, err := k.calculateDelegationRewardsBetween(sdkCtx, val, startingPeriod, endingPeriod, stake) if err != nil { return sdk.DecCoins{}, err } @@ -191,7 +198,10 @@ func (k Keeper) CalculateDelegationRewards(ctx context.Context, val stakingtypes return rewards, nil } -func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes.ValidatorI, del stakingtypes.DelegationI) (sdk.Coins, error) { +func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes.ValidatorI, del stakingtypes.DelegationI) (meterResult sdk.Coins, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "withdrawDelegationRewards")(&err) + addrCodec := k.authKeeper.AddressCodec() delAddr, err := addrCodec.StringToBytes(del.GetDelegatorAddr()) if err != nil { @@ -204,7 +214,7 @@ func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes. } // check existence of delegator starting info - hasInfo, err := k.HasDelegatorStartingInfo(ctx, sdk.ValAddress(valAddr), sdk.AccAddress(delAddr)) + hasInfo, err := k.HasDelegatorStartingInfo(sdkCtx, sdk.ValAddress(valAddr), sdk.AccAddress(delAddr)) if err != nil { return nil, err } @@ -214,17 +224,17 @@ func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes. } // end current period and calculate rewards - endingPeriod, err := k.IncrementValidatorPeriod(ctx, val) + endingPeriod, err := k.IncrementValidatorPeriod(sdkCtx, val) if err != nil { return nil, err } - rewardsRaw, err := k.CalculateDelegationRewards(ctx, val, del, endingPeriod) + rewardsRaw, err := k.CalculateDelegationRewards(sdkCtx, val, del, endingPeriod) if err != nil { return nil, err } - outstanding, err := k.GetValidatorOutstandingRewardsCoins(ctx, sdk.ValAddress(valAddr)) + outstanding, err := k.GetValidatorOutstandingRewardsCoins(sdkCtx, sdk.ValAddress(valAddr)) if err != nil { return nil, err } @@ -233,7 +243,7 @@ func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes. // of the decCoins due to operation order of the distribution mechanism. rewards := rewardsRaw.Intersect(outstanding) if !rewards.Equal(rewardsRaw) { - logger := k.Logger(ctx) + logger := k.Logger(sdkCtx) logger.Info( "rounding error withdrawing rewards from validator", "delegator", del.GetDelegatorAddr(), @@ -248,12 +258,12 @@ func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes. // add coins to user account if !finalRewards.IsZero() { - withdrawAddr, err := k.GetDelegatorWithdrawAddr(ctx, delAddr) + withdrawAddr, err := k.GetDelegatorWithdrawAddr(sdkCtx, delAddr) if err != nil { return nil, err } - err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, withdrawAddr, finalRewards) + err = k.bankKeeper.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, withdrawAddr, finalRewards) if err != nil { return nil, err } @@ -261,36 +271,36 @@ func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes. // update the outstanding rewards and the community pool only if the // transaction was successful - err = k.SetValidatorOutstandingRewards(ctx, sdk.ValAddress(valAddr), types.ValidatorOutstandingRewards{Rewards: outstanding.Sub(rewards)}) + err = k.SetValidatorOutstandingRewards(sdkCtx, sdk.ValAddress(valAddr), types.ValidatorOutstandingRewards{Rewards: outstanding.Sub(rewards)}) if err != nil { return nil, err } - feePool, err := k.FeePool.Get(ctx) + feePool, err := k.FeePool.Get(sdkCtx) if err != nil { return nil, err } feePool.CommunityPool = feePool.CommunityPool.Add(remainder...) - err = k.FeePool.Set(ctx, feePool) + err = k.FeePool.Set(sdkCtx, feePool) if err != nil { return nil, err } // decrement reference count of starting period - startingInfo, err := k.GetDelegatorStartingInfo(ctx, sdk.ValAddress(valAddr), sdk.AccAddress(delAddr)) + startingInfo, err := k.GetDelegatorStartingInfo(sdkCtx, sdk.ValAddress(valAddr), sdk.AccAddress(delAddr)) if err != nil { return nil, err } startingPeriod := startingInfo.PreviousPeriod - err = k.decrementReferenceCount(ctx, sdk.ValAddress(valAddr), startingPeriod) + err = k.decrementReferenceCount(sdkCtx, sdk.ValAddress(valAddr), startingPeriod) if err != nil { return nil, err } // remove delegator starting info - err = k.DeleteDelegatorStartingInfo(ctx, sdk.ValAddress(valAddr), sdk.AccAddress(delAddr)) + err = k.DeleteDelegatorStartingInfo(sdkCtx, sdk.ValAddress(valAddr), sdk.AccAddress(delAddr)) if err != nil { return nil, err } @@ -306,7 +316,6 @@ func (k Keeper) withdrawDelegationRewards(ctx context.Context, val stakingtypes. finalRewards = sdk.Coins{sdk.NewCoin(baseDenom, math.ZeroInt())} } - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeWithdrawRewards, diff --git a/x/distribution/keeper/fee_pool.go b/x/distribution/keeper/fee_pool.go index 63c66782dedc..4bbf252dcc14 100644 --- a/x/distribution/keeper/fee_pool.go +++ b/x/distribution/keeper/fee_pool.go @@ -9,8 +9,11 @@ import ( // DistributeFromFeePool distributes funds from the distribution module account to // a receiver address while updating the community pool -func (k Keeper) DistributeFromFeePool(ctx context.Context, amount sdk.Coins, receiveAddr sdk.AccAddress) error { - feePool, err := k.FeePool.Get(ctx) +func (k Keeper) DistributeFromFeePool(ctx context.Context, amount sdk.Coins, receiveAddr sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DistributeFromFeePool")(&err) + + feePool, err := k.FeePool.Get(sdkCtx) if err != nil { return err } @@ -25,10 +28,10 @@ func (k Keeper) DistributeFromFeePool(ctx context.Context, amount sdk.Coins, rec feePool.CommunityPool = newPool - err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, receiveAddr, amount) + err = k.bankKeeper.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, receiveAddr, amount) if err != nil { return err } - return k.FeePool.Set(ctx, feePool) + return k.FeePool.Set(sdkCtx, feePool) } diff --git a/x/distribution/keeper/genesis.go b/x/distribution/keeper/genesis.go index 985ad5f481a6..f491a9f951ad 100644 --- a/x/distribution/keeper/genesis.go +++ b/x/distribution/keeper/genesis.go @@ -9,14 +9,17 @@ import ( // InitGenesis sets distribution information for genesis func (k Keeper) InitGenesis(ctx sdk.Context, data types.GenesisState) { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "InitGenesis")(&err) + var moduleHoldings sdk.DecCoins - err := k.FeePool.Set(ctx, data.FeePool) + err = k.FeePool.Set(ctx, data.FeePool) if err != nil { panic(err) } - if err := k.Params.Set(ctx, data.Params); err != nil { + if err = k.Params.Set(ctx, data.Params); err != nil { panic(err) } @@ -37,7 +40,6 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data types.GenesisState) { var previousProposer sdk.ConsAddress if data.PreviousProposer != "" { - var err error previousProposer, err = k.stakingKeeper.ConsensusAddressCodec().StringToBytes(data.PreviousProposer) if err != nil { panic(err) @@ -135,6 +137,9 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data types.GenesisState) { // ExportGenesis returns a GenesisState for a given context and keeper. func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "ExportGenesis")(&err) + feePool, err := k.FeePool.Get(ctx) if err != nil { panic(err) diff --git a/x/distribution/keeper/grpc_query.go b/x/distribution/keeper/grpc_query.go index b80ca323f8fc..27d72e25e0f8 100644 --- a/x/distribution/keeper/grpc_query.go +++ b/x/distribution/keeper/grpc_query.go @@ -27,8 +27,11 @@ func NewQuerier(keeper Keeper) Querier { } // Params queries params of distribution module -func (k Querier) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - params, err := k.Keeper.Params.Get(ctx) +func (k Querier) Params(ctx context.Context, req *types.QueryParamsRequest) (meterResult *types.QueryParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "Params")(&err) + + params, err := k.Keeper.Params.Get(sdkCtx) if err != nil { return nil, err } @@ -37,7 +40,10 @@ func (k Querier) Params(ctx context.Context, req *types.QueryParamsRequest) (*ty } // ValidatorDistributionInfo query validator's commission and self-delegation rewards -func (k Querier) ValidatorDistributionInfo(ctx context.Context, req *types.QueryValidatorDistributionInfoRequest) (*types.QueryValidatorDistributionInfoResponse, error) { +func (k Querier) ValidatorDistributionInfo(ctx context.Context, req *types.QueryValidatorDistributionInfoRequest) (meterResult *types.QueryValidatorDistributionInfoResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "ValidatorDistributionInfo")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -52,7 +58,7 @@ func (k Querier) ValidatorDistributionInfo(ctx context.Context, req *types.Query } // self-delegation rewards - val, err := k.stakingKeeper.Validator(ctx, valAdr) + val, err := k.stakingKeeper.Validator(sdkCtx, valAdr) if err != nil { return nil, err } @@ -63,7 +69,7 @@ func (k Querier) ValidatorDistributionInfo(ctx context.Context, req *types.Query delAdr := sdk.AccAddress(valAdr) - del, err := k.stakingKeeper.Delegation(ctx, delAdr, valAdr) + del, err := k.stakingKeeper.Delegation(sdkCtx, delAdr, valAdr) if err != nil { return nil, err } @@ -72,18 +78,18 @@ func (k Querier) ValidatorDistributionInfo(ctx context.Context, req *types.Query return nil, types.ErrNoDelegationExists } - endingPeriod, err := k.IncrementValidatorPeriod(ctx, val) + endingPeriod, err := k.IncrementValidatorPeriod(sdkCtx, val) if err != nil { return nil, err } - rewards, err := k.CalculateDelegationRewards(ctx, val, del, endingPeriod) + rewards, err := k.CalculateDelegationRewards(sdkCtx, val, del, endingPeriod) if err != nil { return nil, err } // validator's commission - validatorCommission, err := k.GetValidatorAccumulatedCommission(ctx, valAdr) + validatorCommission, err := k.GetValidatorAccumulatedCommission(sdkCtx, valAdr) if err != nil { return nil, err } @@ -96,7 +102,10 @@ func (k Querier) ValidatorDistributionInfo(ctx context.Context, req *types.Query } // ValidatorOutstandingRewards queries rewards of a validator address -func (k Querier) ValidatorOutstandingRewards(ctx context.Context, req *types.QueryValidatorOutstandingRewardsRequest) (*types.QueryValidatorOutstandingRewardsResponse, error) { +func (k Querier) ValidatorOutstandingRewards(ctx context.Context, req *types.QueryValidatorOutstandingRewardsRequest) (meterResult *types.QueryValidatorOutstandingRewardsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "ValidatorOutstandingRewards")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -110,7 +119,7 @@ func (k Querier) ValidatorOutstandingRewards(ctx context.Context, req *types.Que return nil, err } - validator, err := k.stakingKeeper.Validator(ctx, valAdr) + validator, err := k.stakingKeeper.Validator(sdkCtx, valAdr) if err != nil { return nil, err } @@ -119,7 +128,7 @@ func (k Querier) ValidatorOutstandingRewards(ctx context.Context, req *types.Que return nil, errors.Wrapf(types.ErrNoValidatorExists, req.ValidatorAddress) } - rewards, err := k.GetValidatorOutstandingRewards(ctx, valAdr) + rewards, err := k.GetValidatorOutstandingRewards(sdkCtx, valAdr) if err != nil { return nil, err } @@ -128,7 +137,10 @@ func (k Querier) ValidatorOutstandingRewards(ctx context.Context, req *types.Que } // ValidatorCommission queries accumulated commission for a validator -func (k Querier) ValidatorCommission(ctx context.Context, req *types.QueryValidatorCommissionRequest) (*types.QueryValidatorCommissionResponse, error) { +func (k Querier) ValidatorCommission(ctx context.Context, req *types.QueryValidatorCommissionRequest) (meterResult *types.QueryValidatorCommissionResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "ValidatorCommission")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -142,7 +154,7 @@ func (k Querier) ValidatorCommission(ctx context.Context, req *types.QueryValida return nil, err } - validator, err := k.stakingKeeper.Validator(ctx, valAdr) + validator, err := k.stakingKeeper.Validator(sdkCtx, valAdr) if err != nil { return nil, err } @@ -150,7 +162,7 @@ func (k Querier) ValidatorCommission(ctx context.Context, req *types.QueryValida if validator == nil { return nil, errors.Wrapf(types.ErrNoValidatorExists, req.ValidatorAddress) } - commission, err := k.GetValidatorAccumulatedCommission(ctx, valAdr) + commission, err := k.GetValidatorAccumulatedCommission(sdkCtx, valAdr) if err != nil { return nil, err } @@ -159,7 +171,10 @@ func (k Querier) ValidatorCommission(ctx context.Context, req *types.QueryValida } // ValidatorSlashes queries slash events of a validator -func (k Querier) ValidatorSlashes(ctx context.Context, req *types.QueryValidatorSlashesRequest) (*types.QueryValidatorSlashesResponse, error) { +func (k Querier) ValidatorSlashes(ctx context.Context, req *types.QueryValidatorSlashesRequest) (meterResult *types.QueryValidatorSlashesResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "ValidatorSlashes")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -177,7 +192,7 @@ func (k Querier) ValidatorSlashes(ctx context.Context, req *types.QueryValidator return nil, status.Errorf(codes.InvalidArgument, "invalid validator address") } - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) slashesStore := prefix.NewStore(store, types.GetValidatorSlashEventPrefix(valAddr)) events, pageRes, err := query.GenericFilteredPaginate(k.cdc, slashesStore, req.Pagination, func(key []byte, result *types.ValidatorSlashEvent) (*types.ValidatorSlashEvent, error) { @@ -202,7 +217,10 @@ func (k Querier) ValidatorSlashes(ctx context.Context, req *types.QueryValidator } // DelegationRewards the total rewards accrued by a delegation -func (k Querier) DelegationRewards(ctx context.Context, req *types.QueryDelegationRewardsRequest) (*types.QueryDelegationRewardsResponse, error) { +func (k Querier) DelegationRewards(ctx context.Context, req *types.QueryDelegationRewardsRequest) (meterResult *types.QueryDelegationRewardsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "DelegationRewards")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -220,7 +238,7 @@ func (k Querier) DelegationRewards(ctx context.Context, req *types.QueryDelegati return nil, err } - val, err := k.stakingKeeper.Validator(ctx, valAdr) + val, err := k.stakingKeeper.Validator(sdkCtx, valAdr) if err != nil { return nil, err } @@ -233,7 +251,7 @@ func (k Querier) DelegationRewards(ctx context.Context, req *types.QueryDelegati if err != nil { return nil, err } - del, err := k.stakingKeeper.Delegation(ctx, delAdr, valAdr) + del, err := k.stakingKeeper.Delegation(sdkCtx, delAdr, valAdr) if err != nil { return nil, err } @@ -242,12 +260,12 @@ func (k Querier) DelegationRewards(ctx context.Context, req *types.QueryDelegati return nil, types.ErrNoDelegationExists } - endingPeriod, err := k.IncrementValidatorPeriod(ctx, val) + endingPeriod, err := k.IncrementValidatorPeriod(sdkCtx, val) if err != nil { return nil, err } - rewards, err := k.CalculateDelegationRewards(ctx, val, del, endingPeriod) + rewards, err := k.CalculateDelegationRewards(sdkCtx, val, del, endingPeriod) if err != nil { return nil, err } @@ -256,7 +274,10 @@ func (k Querier) DelegationRewards(ctx context.Context, req *types.QueryDelegati } // DelegationTotalRewards the total rewards accrued by a each validator -func (k Querier) DelegationTotalRewards(ctx context.Context, req *types.QueryDelegationTotalRewardsRequest) (*types.QueryDelegationTotalRewardsResponse, error) { +func (k Querier) DelegationTotalRewards(ctx context.Context, req *types.QueryDelegationTotalRewardsRequest) (meterResult *types.QueryDelegationTotalRewardsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "DelegationTotalRewards")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -274,24 +295,24 @@ func (k Querier) DelegationTotalRewards(ctx context.Context, req *types.QueryDel } err = k.stakingKeeper.IterateDelegations( - ctx, delAdr, + sdkCtx, delAdr, func(_ int64, del stakingtypes.DelegationI) (stop bool) { valAddr, err := k.stakingKeeper.ValidatorAddressCodec().StringToBytes(del.GetValidatorAddr()) if err != nil { panic(err) } - val, err := k.stakingKeeper.Validator(ctx, valAddr) + val, err := k.stakingKeeper.Validator(sdkCtx, valAddr) if err != nil { panic(err) } - endingPeriod, err := k.IncrementValidatorPeriod(ctx, val) + endingPeriod, err := k.IncrementValidatorPeriod(sdkCtx, val) if err != nil { panic(err) } - delReward, err := k.CalculateDelegationRewards(ctx, val, del, endingPeriod) + delReward, err := k.CalculateDelegationRewards(sdkCtx, val, del, endingPeriod) if err != nil { panic(err) } @@ -309,7 +330,10 @@ func (k Querier) DelegationTotalRewards(ctx context.Context, req *types.QueryDel } // DelegatorValidators queries the validators list of a delegator -func (k Querier) DelegatorValidators(ctx context.Context, req *types.QueryDelegatorValidatorsRequest) (*types.QueryDelegatorValidatorsResponse, error) { +func (k Querier) DelegatorValidators(ctx context.Context, req *types.QueryDelegatorValidatorsRequest) (meterResult *types.QueryDelegatorValidatorsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "DelegatorValidators")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -325,7 +349,7 @@ func (k Querier) DelegatorValidators(ctx context.Context, req *types.QueryDelega var validators []string err = k.stakingKeeper.IterateDelegations( - ctx, delAdr, + sdkCtx, delAdr, func(_ int64, del stakingtypes.DelegationI) (stop bool) { validators = append(validators, del.GetValidatorAddr()) return false @@ -340,7 +364,10 @@ func (k Querier) DelegatorValidators(ctx context.Context, req *types.QueryDelega } // DelegatorWithdrawAddress queries Query/delegatorWithdrawAddress -func (k Querier) DelegatorWithdrawAddress(ctx context.Context, req *types.QueryDelegatorWithdrawAddressRequest) (*types.QueryDelegatorWithdrawAddressResponse, error) { +func (k Querier) DelegatorWithdrawAddress(ctx context.Context, req *types.QueryDelegatorWithdrawAddressRequest) (meterResult *types.QueryDelegatorWithdrawAddressResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "DelegatorWithdrawAddress")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -353,7 +380,7 @@ func (k Querier) DelegatorWithdrawAddress(ctx context.Context, req *types.QueryD return nil, err } - withdrawAddr, err := k.GetDelegatorWithdrawAddr(ctx, delAdr) + withdrawAddr, err := k.GetDelegatorWithdrawAddr(sdkCtx, delAdr) if err != nil { return nil, err } @@ -362,8 +389,11 @@ func (k Querier) DelegatorWithdrawAddress(ctx context.Context, req *types.QueryD } // CommunityPool queries the community pool coins -func (k Querier) CommunityPool(ctx context.Context, req *types.QueryCommunityPoolRequest) (*types.QueryCommunityPoolResponse, error) { - pool, err := k.FeePool.Get(ctx) +func (k Querier) CommunityPool(ctx context.Context, req *types.QueryCommunityPoolRequest) (meterResult *types.QueryCommunityPoolResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "CommunityPool")(&err) + + pool, err := k.FeePool.Get(sdkCtx) if err != nil { return nil, err } diff --git a/x/distribution/keeper/hooks.go b/x/distribution/keeper/hooks.go index 006f35ed89a8..3cd333cc6e28 100644 --- a/x/distribution/keeper/hooks.go +++ b/x/distribution/keeper/hooks.go @@ -23,24 +23,30 @@ func (k Keeper) Hooks() Hooks { } // initialize validator distribution record -func (h Hooks) AfterValidatorCreated(ctx context.Context, valAddr sdk.ValAddress) error { - val, err := h.k.stakingKeeper.Validator(ctx, valAddr) +func (h Hooks) AfterValidatorCreated(ctx context.Context, valAddr sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer h.k.Meter(ctx).FuncTiming(&sdkCtx, "AfterValidatorCreated")(&err) + + val, err := h.k.stakingKeeper.Validator(sdkCtx, valAddr) if err != nil { return err } - return h.k.initializeValidator(ctx, val) + return h.k.initializeValidator(sdkCtx, val) } // AfterValidatorRemoved performs clean up after a validator is removed -func (h Hooks) AfterValidatorRemoved(ctx context.Context, _ sdk.ConsAddress, valAddr sdk.ValAddress) error { +func (h Hooks) AfterValidatorRemoved(ctx context.Context, _ sdk.ConsAddress, valAddr sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer h.k.Meter(ctx).FuncTiming(&sdkCtx, "AfterValidatorRemoved")(&err) + // fetch outstanding - outstanding, err := h.k.GetValidatorOutstandingRewardsCoins(ctx, valAddr) + outstanding, err := h.k.GetValidatorOutstandingRewardsCoins(sdkCtx, valAddr) if err != nil { return err } // force-withdraw commission - valCommission, err := h.k.GetValidatorAccumulatedCommission(ctx, valAddr) + valCommission, err := h.k.GetValidatorAccumulatedCommission(sdkCtx, valAddr) if err != nil { return err } @@ -55,13 +61,13 @@ func (h Hooks) AfterValidatorRemoved(ctx context.Context, _ sdk.ConsAddress, val coins, remainder := commission.TruncateDecimal() // remainder to community pool - feePool, err := h.k.FeePool.Get(ctx) + feePool, err := h.k.FeePool.Get(sdkCtx) if err != nil { return err } feePool.CommunityPool = feePool.CommunityPool.Add(remainder...) - err = h.k.FeePool.Set(ctx, feePool) + err = h.k.FeePool.Set(sdkCtx, feePool) if err != nil { return err } @@ -69,12 +75,12 @@ func (h Hooks) AfterValidatorRemoved(ctx context.Context, _ sdk.ConsAddress, val // add to validator account if !coins.IsZero() { accAddr := sdk.AccAddress(valAddr) - withdrawAddr, err := h.k.GetDelegatorWithdrawAddr(ctx, accAddr) + withdrawAddr, err := h.k.GetDelegatorWithdrawAddr(sdkCtx, accAddr) if err != nil { return err } - if err := h.k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, withdrawAddr, coins); err != nil { + if err = h.k.bankKeeper.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, withdrawAddr, coins); err != nil { return err } } @@ -83,37 +89,37 @@ func (h Hooks) AfterValidatorRemoved(ctx context.Context, _ sdk.ConsAddress, val // Add outstanding to community pool // The validator is removed only after it has no more delegations. // This operation sends only the remaining dust to the community pool. - feePool, err := h.k.FeePool.Get(ctx) + feePool, err := h.k.FeePool.Get(sdkCtx) if err != nil { return err } feePool.CommunityPool = feePool.CommunityPool.Add(outstanding...) - err = h.k.FeePool.Set(ctx, feePool) + err = h.k.FeePool.Set(sdkCtx, feePool) if err != nil { return err } // delete outstanding - err = h.k.DeleteValidatorOutstandingRewards(ctx, valAddr) + err = h.k.DeleteValidatorOutstandingRewards(sdkCtx, valAddr) if err != nil { return err } // remove commission record - err = h.k.DeleteValidatorAccumulatedCommission(ctx, valAddr) + err = h.k.DeleteValidatorAccumulatedCommission(sdkCtx, valAddr) if err != nil { return err } // clear slashes - h.k.DeleteValidatorSlashEvents(ctx, valAddr) + h.k.DeleteValidatorSlashEvents(sdkCtx, valAddr) // clear historical rewards - h.k.DeleteValidatorHistoricalRewards(ctx, valAddr) + h.k.DeleteValidatorHistoricalRewards(sdkCtx, valAddr) // clear current rewards - err = h.k.DeleteValidatorCurrentRewards(ctx, valAddr) + err = h.k.DeleteValidatorCurrentRewards(sdkCtx, valAddr) if err != nil { return err } @@ -122,29 +128,35 @@ func (h Hooks) AfterValidatorRemoved(ctx context.Context, _ sdk.ConsAddress, val } // increment period -func (h Hooks) BeforeDelegationCreated(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error { - val, err := h.k.stakingKeeper.Validator(ctx, valAddr) +func (h Hooks) BeforeDelegationCreated(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer h.k.Meter(ctx).FuncTiming(&sdkCtx, "BeforeDelegationCreated")(&err) + + val, err := h.k.stakingKeeper.Validator(sdkCtx, valAddr) if err != nil { return err } - _, err = h.k.IncrementValidatorPeriod(ctx, val) + _, err = h.k.IncrementValidatorPeriod(sdkCtx, val) return err } // withdraw delegation rewards (which also increments period) -func (h Hooks) BeforeDelegationSharesModified(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error { - val, err := h.k.stakingKeeper.Validator(ctx, valAddr) +func (h Hooks) BeforeDelegationSharesModified(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer h.k.Meter(ctx).FuncTiming(&sdkCtx, "BeforeDelegationSharesModified")(&err) + + val, err := h.k.stakingKeeper.Validator(sdkCtx, valAddr) if err != nil { return err } - del, err := h.k.stakingKeeper.Delegation(ctx, delAddr, valAddr) + del, err := h.k.stakingKeeper.Delegation(sdkCtx, delAddr, valAddr) if err != nil { return err } - if _, err := h.k.withdrawDelegationRewards(ctx, val, del); err != nil { + if _, err := h.k.withdrawDelegationRewards(sdkCtx, val, del); err != nil { return err } @@ -152,13 +164,19 @@ func (h Hooks) BeforeDelegationSharesModified(ctx context.Context, delAddr sdk.A } // create new delegation period record -func (h Hooks) AfterDelegationModified(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) error { - return h.k.initializeDelegation(ctx, valAddr, delAddr) +func (h Hooks) AfterDelegationModified(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer h.k.Meter(ctx).FuncTiming(&sdkCtx, "AfterDelegationModified")(&err) + + return h.k.initializeDelegation(sdkCtx, valAddr, delAddr) } // record the slash event -func (h Hooks) BeforeValidatorSlashed(ctx context.Context, valAddr sdk.ValAddress, fraction sdkmath.LegacyDec) error { - return h.k.updateValidatorSlashFraction(ctx, valAddr, fraction) +func (h Hooks) BeforeValidatorSlashed(ctx context.Context, valAddr sdk.ValAddress, fraction sdkmath.LegacyDec) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer h.k.Meter(ctx).FuncTiming(&sdkCtx, "BeforeValidatorSlashed")(&err) + + return h.k.updateValidatorSlashFraction(sdkCtx, valAddr, fraction) } func (h Hooks) BeforeValidatorModified(_ context.Context, _ sdk.ValAddress) error { diff --git a/x/distribution/keeper/keeper.go b/x/distribution/keeper/keeper.go index 7bea2017a1b9..080fcb54c098 100644 --- a/x/distribution/keeper/keeper.go +++ b/x/distribution/keeper/keeper.go @@ -8,6 +8,7 @@ import ( "cosmossdk.io/core/store" errorsmod "cosmossdk.io/errors" "cosmossdk.io/log" + "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -26,11 +27,12 @@ type Keeper struct { // should be the x/gov module account. authority string - Schema collections.Schema - Params collections.Item[types.Params] - FeePool collections.Item[types.FeePool] - + Schema collections.Schema + Params collections.Item[types.Params] + FeePool collections.Item[types.FeePool] feeCollectorName string // name of the FeeCollector ModuleAccount + + meter metrics.Meter } // NewKeeper creates a new distribution Keeper instance @@ -73,16 +75,21 @@ func (k Keeper) GetAuthority() string { // Logger returns a module-specific logger. func (k Keeper) Logger(ctx context.Context) log.Logger { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Logger")() + return sdkCtx.Logger().With(log.ModuleKey, "x/"+types.ModuleName) } // SetWithdrawAddr sets a new address that will receive the rewards upon withdrawal -func (k Keeper) SetWithdrawAddr(ctx context.Context, delegatorAddr, withdrawAddr sdk.AccAddress) error { +func (k Keeper) SetWithdrawAddr(ctx context.Context, delegatorAddr, withdrawAddr sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetWithdrawAddr")(&err) + if k.bankKeeper.BlockedAddr(withdrawAddr) { return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive external funds", withdrawAddr) } - withdrawAddrEnabled, err := k.GetWithdrawAddrEnabled(ctx) + withdrawAddrEnabled, err := k.GetWithdrawAddrEnabled(sdkCtx) if err != nil { return err } @@ -91,7 +98,6 @@ func (k Keeper) SetWithdrawAddr(ctx context.Context, delegatorAddr, withdrawAddr return types.ErrSetWithdrawAddrDisabled } - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeSetWithdrawAddress, @@ -99,13 +105,16 @@ func (k Keeper) SetWithdrawAddr(ctx context.Context, delegatorAddr, withdrawAddr ), ) - k.SetDelegatorWithdrawAddr(ctx, delegatorAddr, withdrawAddr) + k.SetDelegatorWithdrawAddr(sdkCtx, delegatorAddr, withdrawAddr) return nil } // withdraw rewards from a delegation -func (k Keeper) WithdrawDelegationRewards(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (sdk.Coins, error) { - val, err := k.stakingKeeper.Validator(ctx, valAddr) +func (k Keeper) WithdrawDelegationRewards(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (meterResult sdk.Coins, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "WithdrawDelegationRewards")(&err) + + val, err := k.stakingKeeper.Validator(sdkCtx, valAddr) if err != nil { return nil, err } @@ -114,7 +123,7 @@ func (k Keeper) WithdrawDelegationRewards(ctx context.Context, delAddr sdk.AccAd return nil, types.ErrNoValidatorDistInfo } - del, err := k.stakingKeeper.Delegation(ctx, delAddr, valAddr) + del, err := k.stakingKeeper.Delegation(sdkCtx, delAddr, valAddr) if err != nil { return nil, err } @@ -124,13 +133,13 @@ func (k Keeper) WithdrawDelegationRewards(ctx context.Context, delAddr sdk.AccAd } // withdraw rewards - rewards, err := k.withdrawDelegationRewards(ctx, val, del) + rewards, err := k.withdrawDelegationRewards(sdkCtx, val, del) if err != nil { return nil, err } // reinitialize the delegation - err = k.initializeDelegation(ctx, valAddr, delAddr) + err = k.initializeDelegation(sdkCtx, valAddr, delAddr) if err != nil { return nil, err } @@ -138,9 +147,12 @@ func (k Keeper) WithdrawDelegationRewards(ctx context.Context, delAddr sdk.AccAd } // withdraw validator commission -func (k Keeper) WithdrawValidatorCommission(ctx context.Context, valAddr sdk.ValAddress) (sdk.Coins, error) { +func (k Keeper) WithdrawValidatorCommission(ctx context.Context, valAddr sdk.ValAddress) (meterResult sdk.Coins, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "WithdrawValidatorCommission")(&err) + // fetch validator accumulated commission - accumCommission, err := k.GetValidatorAccumulatedCommission(ctx, valAddr) + accumCommission, err := k.GetValidatorAccumulatedCommission(sdkCtx, valAddr) if err != nil { return nil, err } @@ -150,33 +162,32 @@ func (k Keeper) WithdrawValidatorCommission(ctx context.Context, valAddr sdk.Val } commission, remainder := accumCommission.Commission.TruncateDecimal() - k.SetValidatorAccumulatedCommission(ctx, valAddr, types.ValidatorAccumulatedCommission{Commission: remainder}) // leave remainder to withdraw later + k.SetValidatorAccumulatedCommission(sdkCtx, valAddr, types.ValidatorAccumulatedCommission{Commission: remainder}) // leave remainder to withdraw later // update outstanding - outstanding, err := k.GetValidatorOutstandingRewards(ctx, valAddr) + outstanding, err := k.GetValidatorOutstandingRewards(sdkCtx, valAddr) if err != nil { return nil, err } - err = k.SetValidatorOutstandingRewards(ctx, valAddr, types.ValidatorOutstandingRewards{Rewards: outstanding.Rewards.Sub(sdk.NewDecCoinsFromCoins(commission...))}) + err = k.SetValidatorOutstandingRewards(sdkCtx, valAddr, types.ValidatorOutstandingRewards{Rewards: outstanding.Rewards.Sub(sdk.NewDecCoinsFromCoins(commission...))}) if err != nil { return nil, err } if !commission.IsZero() { accAddr := sdk.AccAddress(valAddr) - withdrawAddr, err := k.GetDelegatorWithdrawAddr(ctx, accAddr) + withdrawAddr, err := k.GetDelegatorWithdrawAddr(sdkCtx, accAddr) if err != nil { return nil, err } - err = k.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, withdrawAddr, commission) + err = k.bankKeeper.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, withdrawAddr, commission) if err != nil { return nil, err } } - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeWithdrawCommission, @@ -189,7 +200,10 @@ func (k Keeper) WithdrawValidatorCommission(ctx context.Context, valAddr sdk.Val // GetTotalRewards returns the total amount of fee distribution rewards held in the store func (k Keeper) GetTotalRewards(ctx context.Context) (totalRewards sdk.DecCoins) { - k.IterateValidatorOutstandingRewards(ctx, + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetTotalRewards")() + + k.IterateValidatorOutstandingRewards(sdkCtx, func(_ sdk.ValAddress, rewards types.ValidatorOutstandingRewards) (stop bool) { totalRewards = totalRewards.Add(rewards.Rewards...) return false @@ -203,16 +217,27 @@ func (k Keeper) GetTotalRewards(ctx context.Context) (totalRewards sdk.DecCoins) // The amount is first added to the distribution module account and then directly // added to the pool. An error is returned if the amount cannot be sent to the // module account. -func (k Keeper) FundCommunityPool(ctx context.Context, amount sdk.Coins, sender sdk.AccAddress) error { - if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, sender, types.ModuleName, amount); err != nil { +func (k Keeper) FundCommunityPool(ctx context.Context, amount sdk.Coins, sender sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "FundCommunityPool")(&err) + + if err = k.bankKeeper.SendCoinsFromAccountToModule(sdkCtx, sender, types.ModuleName, amount); err != nil { return err } - feePool, err := k.FeePool.Get(ctx) + feePool, err := k.FeePool.Get(sdkCtx) if err != nil { return err } feePool.CommunityPool = feePool.CommunityPool.Add(sdk.NewDecCoinsFromCoins(amount...)...) - return k.FeePool.Set(ctx, feePool) + return k.FeePool.Set(sdkCtx, feePool) +} + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter } diff --git a/x/distribution/keeper/msg_server.go b/x/distribution/keeper/msg_server.go index 93bd941096fa..b4416454076d 100644 --- a/x/distribution/keeper/msg_server.go +++ b/x/distribution/keeper/msg_server.go @@ -27,7 +27,10 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { return &msgServer{Keeper: keeper} } -func (k msgServer) SetWithdrawAddress(ctx context.Context, msg *types.MsgSetWithdrawAddress) (*types.MsgSetWithdrawAddressResponse, error) { +func (k msgServer) SetWithdrawAddress(ctx context.Context, msg *types.MsgSetWithdrawAddress) (meterResult *types.MsgSetWithdrawAddressResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "SetWithdrawAddress")(&err) + delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(msg.DelegatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err) @@ -38,7 +41,7 @@ func (k msgServer) SetWithdrawAddress(ctx context.Context, msg *types.MsgSetWith return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid withdraw address: %s", err) } - err = k.SetWithdrawAddr(ctx, delegatorAddress, withdrawAddress) + err = k.SetWithdrawAddr(sdkCtx, delegatorAddress, withdrawAddress) if err != nil { return nil, err } @@ -46,7 +49,10 @@ func (k msgServer) SetWithdrawAddress(ctx context.Context, msg *types.MsgSetWith return &types.MsgSetWithdrawAddressResponse{}, nil } -func (k msgServer) WithdrawDelegatorReward(ctx context.Context, msg *types.MsgWithdrawDelegatorReward) (*types.MsgWithdrawDelegatorRewardResponse, error) { +func (k msgServer) WithdrawDelegatorReward(ctx context.Context, msg *types.MsgWithdrawDelegatorReward) (meterResult *types.MsgWithdrawDelegatorRewardResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "WithdrawDelegatorReward")(&err) + valAddr, err := k.stakingKeeper.ValidatorAddressCodec().StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) @@ -57,7 +63,7 @@ func (k msgServer) WithdrawDelegatorReward(ctx context.Context, msg *types.MsgWi return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid delegator address: %s", err) } - amount, err := k.WithdrawDelegationRewards(ctx, delegatorAddress, valAddr) + amount, err := k.WithdrawDelegationRewards(sdkCtx, delegatorAddress, valAddr) if err != nil { return nil, err } @@ -77,13 +83,16 @@ func (k msgServer) WithdrawDelegatorReward(ctx context.Context, msg *types.MsgWi return &types.MsgWithdrawDelegatorRewardResponse{Amount: amount}, nil } -func (k msgServer) WithdrawValidatorCommission(ctx context.Context, msg *types.MsgWithdrawValidatorCommission) (*types.MsgWithdrawValidatorCommissionResponse, error) { +func (k msgServer) WithdrawValidatorCommission(ctx context.Context, msg *types.MsgWithdrawValidatorCommission) (meterResult *types.MsgWithdrawValidatorCommissionResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "WithdrawValidatorCommission")(&err) + valAddr, err := k.stakingKeeper.ValidatorAddressCodec().StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) } - amount, err := k.Keeper.WithdrawValidatorCommission(ctx, valAddr) + amount, err := k.Keeper.WithdrawValidatorCommission(sdkCtx, valAddr) if err != nil { return nil, err } @@ -103,25 +112,31 @@ func (k msgServer) WithdrawValidatorCommission(ctx context.Context, msg *types.M return &types.MsgWithdrawValidatorCommissionResponse{Amount: amount}, nil } -func (k msgServer) FundCommunityPool(ctx context.Context, msg *types.MsgFundCommunityPool) (*types.MsgFundCommunityPoolResponse, error) { +func (k msgServer) FundCommunityPool(ctx context.Context, msg *types.MsgFundCommunityPool) (meterResult *types.MsgFundCommunityPoolResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "FundCommunityPool")(&err) + depositor, err := k.authKeeper.AddressCodec().StringToBytes(msg.Depositor) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid depositor address: %s", err) } - if err := validateAmount(msg.Amount); err != nil { + if err = validateAmount(msg.Amount); err != nil { return nil, err } - if err := k.Keeper.FundCommunityPool(ctx, msg.Amount, depositor); err != nil { + if err = k.Keeper.FundCommunityPool(sdkCtx, msg.Amount, depositor); err != nil { return nil, err } return &types.MsgFundCommunityPoolResponse{}, nil } -func (k msgServer) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { - if err := k.validateAuthority(msg.Authority); err != nil { +func (k msgServer) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (meterResult *types.MsgUpdateParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "UpdateParams")(&err) + + if err = k.validateAuthority(msg.Authority); err != nil { return nil, err } @@ -130,23 +145,26 @@ func (k msgServer) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) return nil, errors.Wrapf(sdkerrors.ErrInvalidRequest, "cannot update base or bonus proposer reward because these are deprecated fields") } - if err := msg.Params.ValidateBasic(); err != nil { + if err = msg.Params.ValidateBasic(); err != nil { return nil, err } - if err := k.Params.Set(ctx, msg.Params); err != nil { + if err = k.Params.Set(sdkCtx, msg.Params); err != nil { return nil, err } return &types.MsgUpdateParamsResponse{}, nil } -func (k msgServer) CommunityPoolSpend(ctx context.Context, msg *types.MsgCommunityPoolSpend) (*types.MsgCommunityPoolSpendResponse, error) { - if err := k.validateAuthority(msg.Authority); err != nil { +func (k msgServer) CommunityPoolSpend(ctx context.Context, msg *types.MsgCommunityPoolSpend) (meterResult *types.MsgCommunityPoolSpendResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "CommunityPoolSpend")(&err) + + if err = k.validateAuthority(msg.Authority); err != nil { return nil, err } - if err := validateAmount(msg.Amount); err != nil { + if err = validateAmount(msg.Amount); err != nil { return nil, err } @@ -159,23 +177,26 @@ func (k msgServer) CommunityPoolSpend(ctx context.Context, msg *types.MsgCommuni return nil, errors.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive external funds", msg.Recipient) } - if err := k.DistributeFromFeePool(ctx, msg.Amount, recipient); err != nil { + if err = k.DistributeFromFeePool(sdkCtx, msg.Amount, recipient); err != nil { return nil, err } - logger := k.Logger(ctx) + logger := k.Logger(sdkCtx) logger.Info("transferred from the community pool to recipient", "amount", msg.Amount.String(), "recipient", msg.Recipient) return &types.MsgCommunityPoolSpendResponse{}, nil } -func (k msgServer) DepositValidatorRewardsPool(ctx context.Context, msg *types.MsgDepositValidatorRewardsPool) (*types.MsgDepositValidatorRewardsPoolResponse, error) { +func (k msgServer) DepositValidatorRewardsPool(ctx context.Context, msg *types.MsgDepositValidatorRewardsPool) (meterResult *types.MsgDepositValidatorRewardsPoolResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "DepositValidatorRewardsPool")(&err) + depositor, err := k.authKeeper.AddressCodec().StringToBytes(msg.Depositor) if err != nil { return nil, err } - bondDenom, err := k.stakingKeeper.BondDenom(ctx) + bondDenom, err := k.stakingKeeper.BondDenom(sdkCtx) if err != nil { return nil, errors.Wrapf(err, "failed to get bond denom") } @@ -187,7 +208,7 @@ func (k msgServer) DepositValidatorRewardsPool(ctx context.Context, msg *types.M } // deposit coins from depositor's account to the distribution module - if err := k.bankKeeper.SendCoinsFromAccountToModule(ctx, depositor, types.ModuleName, msg.Amount); err != nil { + if err = k.bankKeeper.SendCoinsFromAccountToModule(sdkCtx, depositor, types.ModuleName, msg.Amount); err != nil { return nil, err } @@ -196,7 +217,7 @@ func (k msgServer) DepositValidatorRewardsPool(ctx context.Context, msg *types.M return nil, err } - validator, err := k.stakingKeeper.Validator(ctx, valAddr) + validator, err := k.stakingKeeper.Validator(sdkCtx, valAddr) if err != nil { return nil, err } @@ -208,18 +229,18 @@ func (k msgServer) DepositValidatorRewardsPool(ctx context.Context, msg *types.M // Allocate tokens from the distribution module to the validator, which are // then distributed to the validator's delegators. reward := sdk.NewDecCoinsFromCoins(msg.Amount...) - if err = k.AllocateTokensToValidator(ctx, validator, reward); err != nil { + if err = k.AllocateTokensToValidator(sdkCtx, validator, reward); err != nil { return nil, err } // make sure the reward pool isn't already full. if !validator.GetTokens().IsZero() { - rewards, err := k.GetValidatorCurrentRewards(ctx, valAddr) + rewards, err := k.GetValidatorCurrentRewards(sdkCtx, valAddr) if err != nil { return nil, err } current := rewards.Rewards - historical, err := k.GetValidatorHistoricalRewards(ctx, valAddr, rewards.Period-1) + historical, err := k.GetValidatorHistoricalRewards(sdkCtx, valAddr, rewards.Period-1) if err != nil { return nil, err } @@ -242,7 +263,7 @@ func (k msgServer) DepositValidatorRewardsPool(ctx context.Context, msg *types.M } } - logger := k.Logger(ctx) + logger := k.Logger(sdkCtx) logger.Info( "transferred from rewards to validator rewards pool", "depositor", msg.Depositor, diff --git a/x/distribution/keeper/params.go b/x/distribution/keeper/params.go index 60b352b2677e..6081806e1255 100644 --- a/x/distribution/keeper/params.go +++ b/x/distribution/keeper/params.go @@ -4,11 +4,16 @@ import ( "context" "cosmossdk.io/math" + + sdk "github.com/cosmos/cosmos-sdk/types" ) // GetCommunityTax returns the current distribution community tax. -func (k Keeper) GetCommunityTax(ctx context.Context) (math.LegacyDec, error) { - params, err := k.Params.Get(ctx) +func (k Keeper) GetCommunityTax(ctx context.Context) (meterResult math.LegacyDec, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetCommunityTax")(&err) + + params, err := k.Params.Get(sdkCtx) if err != nil { return math.LegacyDec{}, err } @@ -19,7 +24,10 @@ func (k Keeper) GetCommunityTax(ctx context.Context) (math.LegacyDec, error) { // GetWithdrawAddrEnabled returns the current distribution withdraw address // enabled parameter. func (k Keeper) GetWithdrawAddrEnabled(ctx context.Context) (enabled bool, err error) { - params, err := k.Params.Get(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetWithdrawAddrEnabled")(&err) + + params, err := k.Params.Get(sdkCtx) if err != nil { return false, err } diff --git a/x/distribution/keeper/store.go b/x/distribution/keeper/store.go index 6ba127910018..62dbef171a68 100644 --- a/x/distribution/keeper/store.go +++ b/x/distribution/keeper/store.go @@ -14,8 +14,11 @@ import ( ) // get the delegator withdraw address, defaulting to the delegator address -func (k Keeper) GetDelegatorWithdrawAddr(ctx context.Context, delAddr sdk.AccAddress) (sdk.AccAddress, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetDelegatorWithdrawAddr(ctx context.Context, delAddr sdk.AccAddress) (meterResult sdk.AccAddress, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDelegatorWithdrawAddr")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := store.Get(types.GetDelegatorWithdrawAddrKey(delAddr)) if b == nil { return delAddr, err @@ -24,20 +27,29 @@ func (k Keeper) GetDelegatorWithdrawAddr(ctx context.Context, delAddr sdk.AccAdd } // set the delegator withdraw address -func (k Keeper) SetDelegatorWithdrawAddr(ctx context.Context, delAddr, withdrawAddr sdk.AccAddress) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetDelegatorWithdrawAddr(ctx context.Context, delAddr, withdrawAddr sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetDelegatorWithdrawAddr")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Set(types.GetDelegatorWithdrawAddrKey(delAddr), withdrawAddr.Bytes()) } // delete a delegator withdraw addr -func (k Keeper) DeleteDelegatorWithdrawAddr(ctx context.Context, delAddr, withdrawAddr sdk.AccAddress) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteDelegatorWithdrawAddr(ctx context.Context, delAddr, withdrawAddr sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteDelegatorWithdrawAddr")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.GetDelegatorWithdrawAddrKey(delAddr)) } // iterate over delegator withdraw addrs func (k Keeper) IterateDelegatorWithdrawAddrs(ctx context.Context, handler func(del, addr sdk.AccAddress) (stop bool)) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateDelegatorWithdrawAddrs")() + + store := k.storeService.OpenKVStore(sdkCtx) iter := storetypes.KVStorePrefixIterator(runtime.KVStoreAdapter(store), types.DelegatorWithdrawAddrPrefix) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -51,8 +63,11 @@ func (k Keeper) IterateDelegatorWithdrawAddrs(ctx context.Context, handler func( // GetPreviousProposerConsAddr returns the proposer consensus address for the // current block. -func (k Keeper) GetPreviousProposerConsAddr(ctx context.Context) (sdk.ConsAddress, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetPreviousProposerConsAddr(ctx context.Context) (meterResult sdk.ConsAddress, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetPreviousProposerConsAddr")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.ProposerKey) if err != nil { return nil, err @@ -72,15 +87,21 @@ func (k Keeper) GetPreviousProposerConsAddr(ctx context.Context) (sdk.ConsAddres } // set the proposer public key for this block -func (k Keeper) SetPreviousProposerConsAddr(ctx context.Context, consAddr sdk.ConsAddress) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetPreviousProposerConsAddr(ctx context.Context, consAddr sdk.ConsAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetPreviousProposerConsAddr")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz := k.cdc.MustMarshal(&gogotypes.BytesValue{Value: consAddr}) return store.Set(types.ProposerKey, bz) } // get the starting info associated with a delegator func (k Keeper) GetDelegatorStartingInfo(ctx context.Context, val sdk.ValAddress, del sdk.AccAddress) (period types.DelegatorStartingInfo, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDelegatorStartingInfo")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := store.Get(types.GetDelegatorStartingInfoKey(val, del)) if err != nil { return @@ -91,8 +112,11 @@ func (k Keeper) GetDelegatorStartingInfo(ctx context.Context, val sdk.ValAddress } // set the starting info associated with a delegator -func (k Keeper) SetDelegatorStartingInfo(ctx context.Context, val sdk.ValAddress, del sdk.AccAddress, period types.DelegatorStartingInfo) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetDelegatorStartingInfo(ctx context.Context, val sdk.ValAddress, del sdk.AccAddress, period types.DelegatorStartingInfo) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetDelegatorStartingInfo")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := k.cdc.Marshal(&period) if err != nil { return err @@ -102,20 +126,29 @@ func (k Keeper) SetDelegatorStartingInfo(ctx context.Context, val sdk.ValAddress } // check existence of the starting info associated with a delegator -func (k Keeper) HasDelegatorStartingInfo(ctx context.Context, val sdk.ValAddress, del sdk.AccAddress) (bool, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) HasDelegatorStartingInfo(ctx context.Context, val sdk.ValAddress, del sdk.AccAddress) (meterResult bool, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HasDelegatorStartingInfo")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Has(types.GetDelegatorStartingInfoKey(val, del)) } // delete the starting info associated with a delegator -func (k Keeper) DeleteDelegatorStartingInfo(ctx context.Context, val sdk.ValAddress, del sdk.AccAddress) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteDelegatorStartingInfo(ctx context.Context, val sdk.ValAddress, del sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteDelegatorStartingInfo")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.GetDelegatorStartingInfoKey(val, del)) } // iterate over delegator starting infos func (k Keeper) IterateDelegatorStartingInfos(ctx context.Context, handler func(val sdk.ValAddress, del sdk.AccAddress, info types.DelegatorStartingInfo) (stop bool)) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateDelegatorStartingInfos")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.DelegatorStartingInfoPrefix) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -130,7 +163,10 @@ func (k Keeper) IterateDelegatorStartingInfos(ctx context.Context, handler func( // get historical rewards for a particular period func (k Keeper) GetValidatorHistoricalRewards(ctx context.Context, val sdk.ValAddress, period uint64) (rewards types.ValidatorHistoricalRewards, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorHistoricalRewards")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := store.Get(types.GetValidatorHistoricalRewardsKey(val, period)) if err != nil { return @@ -141,8 +177,11 @@ func (k Keeper) GetValidatorHistoricalRewards(ctx context.Context, val sdk.ValAd } // set historical rewards for a particular period -func (k Keeper) SetValidatorHistoricalRewards(ctx context.Context, val sdk.ValAddress, period uint64, rewards types.ValidatorHistoricalRewards) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetValidatorHistoricalRewards(ctx context.Context, val sdk.ValAddress, period uint64, rewards types.ValidatorHistoricalRewards) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidatorHistoricalRewards")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := k.cdc.Marshal(&rewards) if err != nil { return err @@ -153,7 +192,10 @@ func (k Keeper) SetValidatorHistoricalRewards(ctx context.Context, val sdk.ValAd // iterate over historical rewards func (k Keeper) IterateValidatorHistoricalRewards(ctx context.Context, handler func(val sdk.ValAddress, period uint64, rewards types.ValidatorHistoricalRewards) (stop bool)) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateValidatorHistoricalRewards")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.ValidatorHistoricalRewardsPrefix) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -167,14 +209,20 @@ func (k Keeper) IterateValidatorHistoricalRewards(ctx context.Context, handler f } // delete a historical reward -func (k Keeper) DeleteValidatorHistoricalReward(ctx context.Context, val sdk.ValAddress, period uint64) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteValidatorHistoricalReward(ctx context.Context, val sdk.ValAddress, period uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteValidatorHistoricalReward")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.GetValidatorHistoricalRewardsKey(val, period)) } // delete historical rewards for a validator func (k Keeper) DeleteValidatorHistoricalRewards(ctx context.Context, val sdk.ValAddress) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteValidatorHistoricalRewards")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.GetValidatorHistoricalRewardsPrefix(val)) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -184,7 +232,10 @@ func (k Keeper) DeleteValidatorHistoricalRewards(ctx context.Context, val sdk.Va // delete all historical rewards func (k Keeper) DeleteAllValidatorHistoricalRewards(ctx context.Context) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteAllValidatorHistoricalRewards")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.ValidatorHistoricalRewardsPrefix) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -194,7 +245,10 @@ func (k Keeper) DeleteAllValidatorHistoricalRewards(ctx context.Context) { // historical reference count (used for testcases) func (k Keeper) GetValidatorHistoricalReferenceCount(ctx context.Context) (count uint64) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorHistoricalReferenceCount")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.ValidatorHistoricalRewardsPrefix) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -207,7 +261,10 @@ func (k Keeper) GetValidatorHistoricalReferenceCount(ctx context.Context) (count // get current rewards for a validator func (k Keeper) GetValidatorCurrentRewards(ctx context.Context, val sdk.ValAddress) (rewards types.ValidatorCurrentRewards, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorCurrentRewards")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := store.Get(types.GetValidatorCurrentRewardsKey(val)) if err != nil { return @@ -218,8 +275,11 @@ func (k Keeper) GetValidatorCurrentRewards(ctx context.Context, val sdk.ValAddre } // set current rewards for a validator -func (k Keeper) SetValidatorCurrentRewards(ctx context.Context, val sdk.ValAddress, rewards types.ValidatorCurrentRewards) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetValidatorCurrentRewards(ctx context.Context, val sdk.ValAddress, rewards types.ValidatorCurrentRewards) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidatorCurrentRewards")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := k.cdc.Marshal(&rewards) if err != nil { return err @@ -229,14 +289,20 @@ func (k Keeper) SetValidatorCurrentRewards(ctx context.Context, val sdk.ValAddre } // delete current rewards for a validator -func (k Keeper) DeleteValidatorCurrentRewards(ctx context.Context, val sdk.ValAddress) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteValidatorCurrentRewards(ctx context.Context, val sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteValidatorCurrentRewards")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.GetValidatorCurrentRewardsKey(val)) } // iterate over current rewards func (k Keeper) IterateValidatorCurrentRewards(ctx context.Context, handler func(val sdk.ValAddress, rewards types.ValidatorCurrentRewards) (stop bool)) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateValidatorCurrentRewards")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.ValidatorCurrentRewardsPrefix) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -251,7 +317,10 @@ func (k Keeper) IterateValidatorCurrentRewards(ctx context.Context, handler func // get accumulated commission for a validator func (k Keeper) GetValidatorAccumulatedCommission(ctx context.Context, val sdk.ValAddress) (commission types.ValidatorAccumulatedCommission, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorAccumulatedCommission")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := store.Get(types.GetValidatorAccumulatedCommissionKey(val)) if err != nil { return types.ValidatorAccumulatedCommission{}, err @@ -269,13 +338,15 @@ func (k Keeper) GetValidatorAccumulatedCommission(ctx context.Context, val sdk.V } // set accumulated commission for a validator -func (k Keeper) SetValidatorAccumulatedCommission(ctx context.Context, val sdk.ValAddress, commission types.ValidatorAccumulatedCommission) error { +func (k Keeper) SetValidatorAccumulatedCommission(ctx context.Context, val sdk.ValAddress, commission types.ValidatorAccumulatedCommission) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidatorAccumulatedCommission")(&err) + var ( - bz []byte - err error + bz []byte ) - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) if commission.Commission.IsZero() { bz, err = k.cdc.Marshal(&types.ValidatorAccumulatedCommission{}) } else { @@ -290,14 +361,20 @@ func (k Keeper) SetValidatorAccumulatedCommission(ctx context.Context, val sdk.V } // delete accumulated commission for a validator -func (k Keeper) DeleteValidatorAccumulatedCommission(ctx context.Context, val sdk.ValAddress) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteValidatorAccumulatedCommission(ctx context.Context, val sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteValidatorAccumulatedCommission")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.GetValidatorAccumulatedCommissionKey(val)) } // iterate over accumulated commissions func (k Keeper) IterateValidatorAccumulatedCommissions(ctx context.Context, handler func(val sdk.ValAddress, commission types.ValidatorAccumulatedCommission) (stop bool)) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateValidatorAccumulatedCommissions")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.ValidatorAccumulatedCommissionPrefix) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -312,7 +389,10 @@ func (k Keeper) IterateValidatorAccumulatedCommissions(ctx context.Context, hand // get validator outstanding rewards func (k Keeper) GetValidatorOutstandingRewards(ctx context.Context, val sdk.ValAddress) (rewards types.ValidatorOutstandingRewards, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorOutstandingRewards")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.GetValidatorOutstandingRewardsKey(val)) if err != nil { return @@ -322,8 +402,11 @@ func (k Keeper) GetValidatorOutstandingRewards(ctx context.Context, val sdk.ValA } // set validator outstanding rewards -func (k Keeper) SetValidatorOutstandingRewards(ctx context.Context, val sdk.ValAddress, rewards types.ValidatorOutstandingRewards) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetValidatorOutstandingRewards(ctx context.Context, val sdk.ValAddress, rewards types.ValidatorOutstandingRewards) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidatorOutstandingRewards")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := k.cdc.Marshal(&rewards) if err != nil { return err @@ -332,14 +415,20 @@ func (k Keeper) SetValidatorOutstandingRewards(ctx context.Context, val sdk.ValA } // delete validator outstanding rewards -func (k Keeper) DeleteValidatorOutstandingRewards(ctx context.Context, val sdk.ValAddress) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteValidatorOutstandingRewards(ctx context.Context, val sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteValidatorOutstandingRewards")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.GetValidatorOutstandingRewardsKey(val)) } // iterate validator outstanding rewards func (k Keeper) IterateValidatorOutstandingRewards(ctx context.Context, handler func(val sdk.ValAddress, rewards types.ValidatorOutstandingRewards) (stop bool)) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateValidatorOutstandingRewards")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.ValidatorOutstandingRewardsPrefix) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -354,7 +443,10 @@ func (k Keeper) IterateValidatorOutstandingRewards(ctx context.Context, handler // get slash event for height func (k Keeper) GetValidatorSlashEvent(ctx context.Context, val sdk.ValAddress, height, period uint64) (event types.ValidatorSlashEvent, found bool, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorSlashEvent")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := store.Get(types.GetValidatorSlashEventKey(val, height, period)) if err != nil { return types.ValidatorSlashEvent{}, false, err @@ -373,8 +465,11 @@ func (k Keeper) GetValidatorSlashEvent(ctx context.Context, val sdk.ValAddress, } // set slash event for height -func (k Keeper) SetValidatorSlashEvent(ctx context.Context, val sdk.ValAddress, height, period uint64, event types.ValidatorSlashEvent) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetValidatorSlashEvent(ctx context.Context, val sdk.ValAddress, height, period uint64, event types.ValidatorSlashEvent) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidatorSlashEvent")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) b, err := k.cdc.Marshal(&event) if err != nil { return err @@ -387,7 +482,10 @@ func (k Keeper) SetValidatorSlashEvent(ctx context.Context, val sdk.ValAddress, func (k Keeper) IterateValidatorSlashEventsBetween(ctx context.Context, val sdk.ValAddress, startingHeight, endingHeight uint64, handler func(height uint64, event types.ValidatorSlashEvent) (stop bool), ) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateValidatorSlashEventsBetween")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := store.Iterator( types.GetValidatorSlashEventKeyPrefix(val, startingHeight), types.GetValidatorSlashEventKeyPrefix(val, endingHeight+1), @@ -405,7 +503,10 @@ func (k Keeper) IterateValidatorSlashEventsBetween(ctx context.Context, val sdk. // iterate over all slash events func (k Keeper) IterateValidatorSlashEvents(ctx context.Context, handler func(val sdk.ValAddress, height uint64, event types.ValidatorSlashEvent) (stop bool)) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateValidatorSlashEvents")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.ValidatorSlashEventPrefix) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -420,7 +521,10 @@ func (k Keeper) IterateValidatorSlashEvents(ctx context.Context, handler func(va // delete slash events for a particular validator func (k Keeper) DeleteValidatorSlashEvents(ctx context.Context, val sdk.ValAddress) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteValidatorSlashEvents")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.GetValidatorSlashEventPrefix(val)) defer iter.Close() for ; iter.Valid(); iter.Next() { @@ -430,7 +534,10 @@ func (k Keeper) DeleteValidatorSlashEvents(ctx context.Context, val sdk.ValAddre // delete all slash events func (k Keeper) DeleteAllValidatorSlashEvents(ctx context.Context) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteAllValidatorSlashEvents")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) iter := storetypes.KVStorePrefixIterator(store, types.ValidatorSlashEventPrefix) defer iter.Close() for ; iter.Valid(); iter.Next() { diff --git a/x/distribution/keeper/validator.go b/x/distribution/keeper/validator.go index 9b830e577852..f776770b41a7 100644 --- a/x/distribution/keeper/validator.go +++ b/x/distribution/keeper/validator.go @@ -12,43 +12,49 @@ import ( ) // initialize rewards for a new validator -func (k Keeper) initializeValidator(ctx context.Context, val stakingtypes.ValidatorI) error { +func (k Keeper) initializeValidator(ctx context.Context, val stakingtypes.ValidatorI) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "initializeValidator")(&err) + valBz, err := k.stakingKeeper.ValidatorAddressCodec().StringToBytes(val.GetOperator()) if err != nil { return err } // set initial historical rewards (period 0) with reference count of 1 - err = k.SetValidatorHistoricalRewards(ctx, valBz, 0, types.NewValidatorHistoricalRewards(sdk.DecCoins{}, 1)) + err = k.SetValidatorHistoricalRewards(sdkCtx, valBz, 0, types.NewValidatorHistoricalRewards(sdk.DecCoins{}, 1)) if err != nil { return err } // set current rewards (starting at period 1) - err = k.SetValidatorCurrentRewards(ctx, valBz, types.NewValidatorCurrentRewards(sdk.DecCoins{}, 1)) + err = k.SetValidatorCurrentRewards(sdkCtx, valBz, types.NewValidatorCurrentRewards(sdk.DecCoins{}, 1)) if err != nil { return err } // set accumulated commission - err = k.SetValidatorAccumulatedCommission(ctx, valBz, types.InitialValidatorAccumulatedCommission()) + err = k.SetValidatorAccumulatedCommission(sdkCtx, valBz, types.InitialValidatorAccumulatedCommission()) if err != nil { return err } // set outstanding rewards - err = k.SetValidatorOutstandingRewards(ctx, valBz, types.ValidatorOutstandingRewards{Rewards: sdk.DecCoins{}}) + err = k.SetValidatorOutstandingRewards(sdkCtx, valBz, types.ValidatorOutstandingRewards{Rewards: sdk.DecCoins{}}) return err } // increment validator period, returning the period just ended -func (k Keeper) IncrementValidatorPeriod(ctx context.Context, val stakingtypes.ValidatorI) (uint64, error) { +func (k Keeper) IncrementValidatorPeriod(ctx context.Context, val stakingtypes.ValidatorI) (meterResult uint64, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IncrementValidatorPeriod")(&err) + valBz, err := k.stakingKeeper.ValidatorAddressCodec().StringToBytes(val.GetOperator()) if err != nil { return 0, err } // fetch current rewards - rewards, err := k.GetValidatorCurrentRewards(ctx, valBz) + rewards, err := k.GetValidatorCurrentRewards(sdkCtx, valBz) if err != nil { return 0, err } @@ -59,24 +65,24 @@ func (k Keeper) IncrementValidatorPeriod(ctx context.Context, val stakingtypes.V // can't calculate ratio for zero-token validators // ergo we instead add to the community pool - feePool, err := k.FeePool.Get(ctx) + feePool, err := k.FeePool.Get(sdkCtx) if err != nil { return 0, err } - outstanding, err := k.GetValidatorOutstandingRewards(ctx, valBz) + outstanding, err := k.GetValidatorOutstandingRewards(sdkCtx, valBz) if err != nil { return 0, err } feePool.CommunityPool = feePool.CommunityPool.Add(rewards.Rewards...) outstanding.Rewards = outstanding.GetRewards().Sub(rewards.Rewards) - err = k.FeePool.Set(ctx, feePool) + err = k.FeePool.Set(sdkCtx, feePool) if err != nil { return 0, err } - err = k.SetValidatorOutstandingRewards(ctx, valBz, outstanding) + err = k.SetValidatorOutstandingRewards(sdkCtx, valBz, outstanding) if err != nil { return 0, err } @@ -88,7 +94,7 @@ func (k Keeper) IncrementValidatorPeriod(ctx context.Context, val stakingtypes.V } // fetch historical rewards for last period - historical, err := k.GetValidatorHistoricalRewards(ctx, valBz, rewards.Period-1) + historical, err := k.GetValidatorHistoricalRewards(sdkCtx, valBz, rewards.Period-1) if err != nil { return 0, err } @@ -96,19 +102,19 @@ func (k Keeper) IncrementValidatorPeriod(ctx context.Context, val stakingtypes.V cumRewardRatio := historical.CumulativeRewardRatio // decrement reference count - err = k.decrementReferenceCount(ctx, valBz, rewards.Period-1) + err = k.decrementReferenceCount(sdkCtx, valBz, rewards.Period-1) if err != nil { return 0, err } // set new historical rewards with reference count of 1 - err = k.SetValidatorHistoricalRewards(ctx, valBz, rewards.Period, types.NewValidatorHistoricalRewards(cumRewardRatio.Add(current...), 1)) + err = k.SetValidatorHistoricalRewards(sdkCtx, valBz, rewards.Period, types.NewValidatorHistoricalRewards(cumRewardRatio.Add(current...), 1)) if err != nil { return 0, err } // set current rewards, incrementing period by 1 - err = k.SetValidatorCurrentRewards(ctx, valBz, types.NewValidatorCurrentRewards(sdk.DecCoins{}, rewards.Period+1)) + err = k.SetValidatorCurrentRewards(sdkCtx, valBz, types.NewValidatorCurrentRewards(sdk.DecCoins{}, rewards.Period+1)) if err != nil { return 0, err } @@ -117,8 +123,11 @@ func (k Keeper) IncrementValidatorPeriod(ctx context.Context, val stakingtypes.V } // increment the reference count for a historical rewards value -func (k Keeper) incrementReferenceCount(ctx context.Context, valAddr sdk.ValAddress, period uint64) error { - historical, err := k.GetValidatorHistoricalRewards(ctx, valAddr, period) +func (k Keeper) incrementReferenceCount(ctx context.Context, valAddr sdk.ValAddress, period uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "incrementReferenceCount")(&err) + + historical, err := k.GetValidatorHistoricalRewards(sdkCtx, valAddr, period) if err != nil { return err } @@ -126,12 +135,15 @@ func (k Keeper) incrementReferenceCount(ctx context.Context, valAddr sdk.ValAddr panic("reference count should never exceed 2") } historical.ReferenceCount++ - return k.SetValidatorHistoricalRewards(ctx, valAddr, period, historical) + return k.SetValidatorHistoricalRewards(sdkCtx, valAddr, period, historical) } // decrement the reference count for a historical rewards value, and delete if zero references remain -func (k Keeper) decrementReferenceCount(ctx context.Context, valAddr sdk.ValAddress, period uint64) error { - historical, err := k.GetValidatorHistoricalRewards(ctx, valAddr, period) +func (k Keeper) decrementReferenceCount(ctx context.Context, valAddr sdk.ValAddress, period uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "decrementReferenceCount")(&err) + + historical, err := k.GetValidatorHistoricalRewards(sdkCtx, valAddr, period) if err != nil { return err } @@ -141,34 +153,35 @@ func (k Keeper) decrementReferenceCount(ctx context.Context, valAddr sdk.ValAddr } historical.ReferenceCount-- if historical.ReferenceCount == 0 { - return k.DeleteValidatorHistoricalReward(ctx, valAddr, period) + return k.DeleteValidatorHistoricalReward(sdkCtx, valAddr, period) } - return k.SetValidatorHistoricalRewards(ctx, valAddr, period, historical) + return k.SetValidatorHistoricalRewards(sdkCtx, valAddr, period, historical) } -func (k Keeper) updateValidatorSlashFraction(ctx context.Context, valAddr sdk.ValAddress, fraction math.LegacyDec) error { +func (k Keeper) updateValidatorSlashFraction(ctx context.Context, valAddr sdk.ValAddress, fraction math.LegacyDec) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "updateValidatorSlashFraction")(&err) + if fraction.GT(math.LegacyOneDec()) || fraction.IsNegative() { panic(fmt.Sprintf("fraction must be >=0 and <=1, current fraction: %v", fraction)) } - - sdkCtx := sdk.UnwrapSDKContext(ctx) - val, err := k.stakingKeeper.Validator(ctx, valAddr) + val, err := k.stakingKeeper.Validator(sdkCtx, valAddr) if err != nil { return err } // increment current period - newPeriod, err := k.IncrementValidatorPeriod(ctx, val) + newPeriod, err := k.IncrementValidatorPeriod(sdkCtx, val) if err != nil { return err } // increment reference count on period we need to track - k.incrementReferenceCount(ctx, valAddr, newPeriod) + k.incrementReferenceCount(sdkCtx, valAddr, newPeriod) slashEvent := types.NewValidatorSlashEvent(newPeriod, fraction) height := uint64(sdkCtx.BlockHeight()) - return k.SetValidatorSlashEvent(ctx, valAddr, height, newPeriod, slashEvent) + return k.SetValidatorSlashEvent(sdkCtx, valAddr, height, newPeriod, slashEvent) } diff --git a/x/evidence/go.mod b/x/evidence/go.mod index ba1a71f5b784..f5cd6fc3b570 100644 --- a/x/evidence/go.mod +++ b/x/evidence/go.mod @@ -1,8 +1,6 @@ module cosmossdk.io/x/evidence -go 1.23.5 - -toolchain go1.23.8 +go 1.23.9 require ( cosmossdk.io/api v0.7.6 @@ -13,6 +11,7 @@ require ( cosmossdk.io/log v1.4.1 cosmossdk.io/math v1.4.0 cosmossdk.io/store v1.1.1 + github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 github.com/cometbft/cometbft v0.38.12 github.com/cometbft/cometbft/api v1.0.0 github.com/cosmos/cosmos-proto v1.0.0-beta.5 @@ -22,10 +21,10 @@ require ( github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/spf13/cobra v1.9.1 - github.com/stretchr/testify v1.10.0 - google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 - google.golang.org/grpc v1.71.0 - google.golang.org/protobuf v1.36.5 + github.com/stretchr/testify v1.11.1 + google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 + google.golang.org/grpc v1.75.0 + google.golang.org/protobuf v1.36.8 ) require ( @@ -35,24 +34,16 @@ require ( filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect - github.com/DataDog/appsec-internal-go v1.5.0 // indirect - github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0 // indirect - github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1 // indirect github.com/DataDog/datadog-go v3.2.0+incompatible // indirect - github.com/DataDog/datadog-go/v5 v5.3.0 // indirect - github.com/DataDog/go-libddwaf/v2 v2.3.2 // indirect - github.com/DataDog/go-tuf v1.0.2-0.5.2 // indirect - github.com/DataDog/sketches-go v1.4.2 // indirect github.com/DataDog/zstd v1.5.6 // indirect - github.com/InjectiveLabs/metrics v0.0.10 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/alexcesaro/statsd v2.0.0+incompatible // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect - github.com/bits-and-blooms/bitset v1.8.0 // indirect + github.com/bits-and-blooms/bitset v1.17.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect @@ -75,20 +66,21 @@ require ( github.com/dgraph-io/ristretto/v2 v2.1.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/ebitengine/purego v0.6.0-alpha.5 // indirect github.com/emicklei/dot v1.6.2 // indirect - github.com/fatih/color v1.15.0 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/getsentry/sentry-go v0.31.1 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/btree v1.1.3 // indirect github.com/google/flatbuffers v25.2.10+incompatible // indirect github.com/google/go-cmp v0.7.0 // indirect @@ -98,12 +90,11 @@ require ( github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-metrics v0.5.3 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.5.2 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect @@ -118,6 +109,7 @@ require ( github.com/klauspost/compress v1.18.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect + github.com/leodido/go-urn v1.2.4 // indirect github.com/lib/pq v1.10.9 // indirect github.com/linxGnu/grocksdb v1.9.8 // indirect github.com/magiconair/properties v1.8.7 // indirect @@ -130,10 +122,8 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect - github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect - github.com/philhofer/fwd v1.1.2 // 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.21.1 // indirect @@ -147,7 +137,6 @@ require ( 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.5 // indirect - github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.1 // indirect @@ -158,28 +147,30 @@ require ( 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/tinylib/msgp v1.1.8 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.4.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/otel v1.34.0 // indirect - go.opentelemetry.io/otel/metric v1.34.0 // indirect - go.opentelemetry.io/otel/trace v1.34.0 // indirect - go.uber.org/atomic v1.11.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect + go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.36.0 // indirect + golang.org/x/crypto v0.41.0 // indirect golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect - golang.org/x/net v0.37.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect - golang.org/x/time v0.5.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/term v0.34.0 // indirect + golang.org/x/text v0.28.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect - gopkg.in/DataDog/dd-trace-go.v1 v1.62.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -203,6 +194,6 @@ replace ( replace ( // Use CometBFT v1.0.1 with Mempool lanes and DOG - github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.3 - github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 + github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 + github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 ) diff --git a/x/evidence/go.sum b/x/evidence/go.sum index d015899d0ad0..280244047d78 100644 --- a/x/evidence/go.sum +++ b/x/evidence/go.sum @@ -25,34 +25,17 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 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/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/appsec-internal-go v1.5.0 h1:8kS5zSx5T49uZ8dZTdT19QVAvC/B8ByyZdhQKYQWHno= -github.com/DataDog/appsec-internal-go v1.5.0/go.mod h1:pEp8gjfNLtEOmz+iZqC8bXhu0h4k7NUsW/qiQb34k1U= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0 h1:bUMSNsw1iofWiju9yc1f+kBd33E3hMJtq9GuU602Iy8= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0/go.mod h1:HzySONXnAgSmIQfL6gOv9hWprKJkx8CicuXuUbmgWfo= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1 h1:5nE6N3JSs2IG3xzMthNFhXfOaXlrsdgqmJ73lndFf8c= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1/go.mod h1:Vc+snp0Bey4MrrJyiV2tVxxJb6BmLomPvN1RgAvjGaQ= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/datadog-go/v5 v5.3.0 h1:2q2qjFOb3RwAZNU+ez27ZVDwErJv5/VpbBPprz7Z+s8= -github.com/DataDog/datadog-go/v5 v5.3.0/go.mod h1:XRDJk1pTc00gm+ZDiBKsjh7oOOtJfYfglVCmFb8C2+Q= -github.com/DataDog/go-libddwaf/v2 v2.3.2 h1:pdi9xjWW57IpOpTeOyPuNveEDFLmmInsHDeuZk3TY34= -github.com/DataDog/go-libddwaf/v2 v2.3.2/go.mod h1:gsCdoijYQfj8ce/T2bEDNPZFIYnmHluAgVDpuQOWMZE= -github.com/DataDog/go-tuf v1.0.2-0.5.2 h1:EeZr937eKAWPxJ26IykAdWA4A0jQXJgkhUjqEI/w7+I= -github.com/DataDog/go-tuf v1.0.2-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/gostackparse v0.7.0 h1:i7dLkXHvYzHV308hnkvVGDL3BR4FWl7IsXNPz/IGQh4= -github.com/DataDog/gostackparse v0.7.0/go.mod h1:lTfqcJKqS9KnXQGnyQMCugq3u1FP6UZMfWR0aitKFMM= -github.com/DataDog/sketches-go v1.4.2 h1:gppNudE9d19cQ98RYABOetxIhpTCl4m7CnbRZjvVA/o= -github.com/DataDog/sketches-go v1.4.2/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3 h1:wVl4vPhyTh6uuwT0BfH3pbF9W0QqEnZYRgB/2IDFXR0= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 h1:uXsmBVeBickTjZ2GqPNYXShoboRw1m2Cq1bKv4QCe0o= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= -github.com/InjectiveLabs/metrics v0.0.10 h1:BoOwXnCtRRIPmq06jcI20pXZYE758eusaCI5jDOoN4U= -github.com/InjectiveLabs/metrics v0.0.10/go.mod h1:eYu++0DVUjk/jjV9WgvCo8gQU+16Yoyhp1iu+ghKNME= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 h1:QIKdpbqWRC38xJDRBmUitpksS0ZfwlvSMMYaesZirms= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6/go.mod h1:U34DYdUTNyEdnB89+eqZy+SO9g7sFRwJQg7La+o/pHk= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 h1:GcV53gW9ajrbSoU2ikuCB+dUWHmhMmtfRKwJngZ+ChM= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= +github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 h1:zvIV7ifNcH2Dvl0RrXd2qYRkaDSc+iP0hqaAhfS85MY= +github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8/go.mod h1:fdW28eWh1Ace92UW2TzINdJVaVP7whCmHKkGQZHsxGI= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= @@ -68,8 +51,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexcesaro/statsd v2.0.0+incompatible h1:HG17k1Qk8V1F4UOoq6tx+IUoAbOcI5PHzzEUGeDD72w= -github.com/alexcesaro/statsd v2.0.0+incompatible/go.mod h1:vNepIbQAiyLe1j480173M6NYYaAsGwEcvuDTU3OCUGY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -88,14 +69,16 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= 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/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= -github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.17.0 h1:1X2TS7aHz1ELcC0yU1y2stUs/0ig5oMU6STFZGrhvHI= +github.com/bits-and-blooms/bitset v1.17.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.0 h1:qtNZduETEIWJVIyDl01BeNxur2rW9OwTQ/yBqFRkKEk= github.com/bytedance/sonic v1.10.0/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -104,10 +87,14 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= 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/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo= @@ -194,7 +181,6 @@ github.com/dgraph-io/badger/v4 v4.6.0/go.mod h1:KSJ5VTuZNC3Sd+YhvVjk2nYua9UZnnTr github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I= github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -202,7 +188,6 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh 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 v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -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= @@ -210,8 +195,6 @@ github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/ebitengine/purego v0.6.0-alpha.5 h1:EYID3JOAdmQ4SNZYJHu9V6IqOeRQDBYxqKAg9PyoHFY= -github.com/ebitengine/purego v0.6.0-alpha.5/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= 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= @@ -225,8 +208,8 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -266,8 +249,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG 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-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -289,8 +272,8 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= +github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= 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= @@ -329,8 +312,9 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= @@ -354,8 +338,6 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ 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/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBBos92HalKpaGKHrp+3Uo6yTodo= -github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -381,13 +363,13 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= 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/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= @@ -399,8 +381,6 @@ github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYS github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= @@ -469,8 +449,10 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -584,16 +566,12 @@ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= 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/outcaste-io/ristretto v0.2.3 h1:AK4zt/fJ76kjlYObOeNwh4T3asEuaCmp26pOvUOL9w0= -github.com/outcaste-io/ristretto v0.2.3/go.mod h1:W8HywhmtlopSB1jeMg3JtdIhf+DYkLAr0VN/s4+MHac= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -604,8 +582,6 @@ github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= -github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= @@ -655,8 +631,6 @@ github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoG github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= 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/richardartoul/molecule v1.0.1-0.20221107223329-32cfee06a052 h1:Qp27Idfgi6ACvFQat5+VJvlYToylpM/hcyLBI3WaKPA= -github.com/richardartoul/molecule v1.0.1-0.20221107223329-32cfee06a052/go.mod h1:uvX/8buq8uVeiZiFht+0lqSLBHF+uGV8BrTv8W/SIwk= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -680,8 +654,6 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg= -github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -695,8 +667,6 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= 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/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 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.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= @@ -729,10 +699,11 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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.2/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/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 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.14 h1:xNMoHRJOTwMn63ip6qoWJ2Ymgvj7E2b9jY2FAwY+qRo= @@ -743,13 +714,10 @@ github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2l 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/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= -github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= @@ -760,7 +728,6 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 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= @@ -774,26 +741,29 @@ go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= -go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 h1:vl9obrcoWVKp/lwl8tRE33853I8Xru9HFbw/skNeLs8= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0/go.mod h1:GAXRxmLJcVM3u22IjTg74zWBrRCKq8BnOqUVLodpcpw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= +go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= @@ -806,6 +776,7 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.4.0 h1:A8WCeEWhLwPBKNbFi5Wv5UTCBx5zzubnXDlMOFAzFMc= golang.org/x/arch v0.4.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -816,9 +787,8 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U 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.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= @@ -838,8 +808,6 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -862,16 +830,13 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 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-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -883,10 +848,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ 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.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -921,7 +884,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210124154548-22da62e12c0c/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= @@ -936,33 +898,26 @@ 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-20220627191245-f75cf1eec38b/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-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/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.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 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.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.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.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -984,17 +939,15 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY 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.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= 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= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1012,10 +965,10 @@ google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6D 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-20250106144421-5f5ef82da422 h1:GVIKPyP/kLIyVOgOnTwFOrvQaQUzOzGMCxgFUOEmm24= -google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422/go.mod h1:b6h1vNKhxaSoEI+5jc3PJUCustfli/mRab7295pY7rw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1033,8 +986,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp 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.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= +google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= 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= @@ -1048,15 +1001,10 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba 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.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/DataDog/dd-trace-go.v1 v1.62.0 h1:jeZxE4ZlfAc+R0zO5TEmJBwOLet3NThsOfYJeSQg1x0= -gopkg.in/DataDog/dd-trace-go.v1 v1.62.0/go.mod h1:YTvYkk3PTsfw0OWrRFxV/IQ5Gy4nZ5TRvxTAP3JcIzs= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= -gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= 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= @@ -1088,16 +1036,16 @@ 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/gotraceui v0.2.0 h1:dmNsfQ9Vl3GwbiVD7Z8d/osC6WtGGrasyrC2suc4ZIQ= -honnef.co/go/gotraceui v0.2.0/go.mod h1:qHo4/W75cA3bX0QQoSvDjbJa4R8mAyyFjbWAj63XElc= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= 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/x/evidence/keeper/abci.go b/x/evidence/keeper/abci.go index d441ee174dd1..3085cb2dd86b 100644 --- a/x/evidence/keeper/abci.go +++ b/x/evidence/keeper/abci.go @@ -13,10 +13,13 @@ import ( // BeginBlocker iterates through and handles any newly discovered evidence of // misbehavior submitted by CometBFT. Currently, only equivocation is handled. -func (k Keeper) BeginBlocker(ctx context.Context) error { +func (k Keeper) BeginBlocker(ctx context.Context) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BeginBlocker")(&err) + defer telemetry.ModuleMeasureSince(types.ModuleName, telemetry.Now(), telemetry.MetricKeyBeginBlocker) - bi := k.cometInfo.GetCometBlockInfo(ctx) + bi := k.cometInfo.GetCometBlockInfo(sdkCtx) if bi == nil { // If we don't have block info, we don't have any evidence to process. Block info may be nil during // genesis calls or in tests. @@ -24,14 +27,13 @@ func (k Keeper) BeginBlocker(ctx context.Context) error { } evidences := bi.GetEvidence() - sdkCtx := sdk.UnwrapSDKContext(ctx) for i := 0; i < evidences.Len(); i++ { switch evidences.Get(i).Type() { // It's still ongoing discussion how should we treat and slash attacks with // premeditation. So for now we agree to treat them in the same way. case comet.LightClientAttack, comet.DuplicateVote: evidence := types.FromABCIEvidence(evidences.Get(i), k.stakingKeeper.ConsensusAddressCodec()) - err := k.handleEquivocationEvidence(ctx, evidence) + err = k.handleEquivocationEvidence(sdkCtx, evidence) if err != nil { return err } diff --git a/x/evidence/keeper/grpc_query.go b/x/evidence/keeper/grpc_query.go index 22d2be5c2458..68271d9ab237 100644 --- a/x/evidence/keeper/grpc_query.go +++ b/x/evidence/keeper/grpc_query.go @@ -28,7 +28,10 @@ func NewQuerier(keeper *Keeper) Querier { } // Evidence implements the Query/Evidence gRPC method -func (k Querier) Evidence(c context.Context, req *types.QueryEvidenceRequest) (*types.QueryEvidenceResponse, error) { +func (k Querier) Evidence(c context.Context, req *types.QueryEvidenceRequest) (meterResult *types.QueryEvidenceResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.k.Meter(c).FuncTiming(&sdkCtx, "Evidence")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -37,14 +40,12 @@ func (k Querier) Evidence(c context.Context, req *types.QueryEvidenceRequest) (* return nil, status.Errorf(codes.InvalidArgument, "invalid request; hash is empty") } - ctx := sdk.UnwrapSDKContext(c) - decodedHash, err := hex.DecodeString(req.Hash) if err != nil { return nil, fmt.Errorf("invalid evidence hash: %w", err) } - evidence, _ := k.k.Evidences.Get(ctx, decodedHash) + evidence, _ := k.k.Evidences.Get(sdkCtx, decodedHash) if evidence == nil { return nil, status.Errorf(codes.NotFound, "evidence %s not found", req.Hash) } @@ -63,12 +64,15 @@ func (k Querier) Evidence(c context.Context, req *types.QueryEvidenceRequest) (* } // AllEvidence implements the Query/AllEvidence gRPC method -func (k Querier) AllEvidence(ctx context.Context, req *types.QueryAllEvidenceRequest) (*types.QueryAllEvidenceResponse, error) { +func (k Querier) AllEvidence(ctx context.Context, req *types.QueryAllEvidenceRequest) (meterResult *types.QueryAllEvidenceResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.k.Meter(ctx).FuncTiming(&sdkCtx, "AllEvidence")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - evidences, pageRes, err := query.CollectionPaginate(ctx, k.k.Evidences, req.Pagination, func(_ []byte, value exported.Evidence) (*codectypes.Any, error) { + evidences, pageRes, err := query.CollectionPaginate(sdkCtx, k.k.Evidences, req.Pagination, func(_ []byte, value exported.Evidence) (*codectypes.Any, error) { return codectypes.NewAnyWithValue(value) }) if err != nil { diff --git a/x/evidence/keeper/infraction.go b/x/evidence/keeper/infraction.go index 27858ac514f9..59c74ad3a114 100644 --- a/x/evidence/keeper/infraction.go +++ b/x/evidence/keeper/infraction.go @@ -24,12 +24,13 @@ import ( // // TODO: Some of the invalid constraints listed above may need to be reconsidered // in the case of a lunatic attack. -func (k Keeper) handleEquivocationEvidence(ctx context.Context, evidence *types.Equivocation) error { +func (k Keeper) handleEquivocationEvidence(ctx context.Context, evidence *types.Equivocation) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) - logger := k.Logger(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "handleEquivocationEvidence")(&err) + logger := k.Logger(sdkCtx) consAddr := evidence.GetConsensusAddress(k.stakingKeeper.ConsensusAddressCodec()) - validator, err := k.stakingKeeper.ValidatorByConsAddr(ctx, consAddr) + validator, err := k.stakingKeeper.ValidatorByConsAddr(sdkCtx, consAddr) if err != nil { return err } @@ -40,7 +41,7 @@ func (k Keeper) handleEquivocationEvidence(ctx context.Context, evidence *types. } if len(validator.GetOperator()) != 0 { - if _, err := k.slashingKeeper.GetPubkey(ctx, consAddr.Bytes()); err != nil { + if _, err := k.slashingKeeper.GetPubkey(sdkCtx, consAddr.Bytes()); err != nil { // Ignore evidence that cannot be handled. // // NOTE: We used to panic with: @@ -79,12 +80,12 @@ func (k Keeper) handleEquivocationEvidence(ctx context.Context, evidence *types. } } - if ok := k.slashingKeeper.HasValidatorSigningInfo(ctx, consAddr); !ok { + if ok := k.slashingKeeper.HasValidatorSigningInfo(sdkCtx, consAddr); !ok { panic(fmt.Sprintf("expected signing info for validator %s but not found", consAddr)) } // ignore if the validator is already tombstoned - if k.slashingKeeper.IsTombstoned(ctx, consAddr) { + if k.slashingKeeper.IsTombstoned(sdkCtx, consAddr) { logger.Info( "ignored equivocation; validator already tombstoned", "validator", consAddr, @@ -113,13 +114,13 @@ func (k Keeper) handleEquivocationEvidence(ctx context.Context, evidence *types. // to/by CometBFT. This value is validator.Tokens as sent to CometBFT via // ABCI, and now received as evidence. The fraction is passed in to separately // to slash unbonding and rebonding delegations. - slashFractionDoubleSign, err := k.slashingKeeper.SlashFractionDoubleSign(ctx) + slashFractionDoubleSign, err := k.slashingKeeper.SlashFractionDoubleSign(sdkCtx) if err != nil { return err } err = k.slashingKeeper.SlashWithInfractionReason( - ctx, + sdkCtx, consAddr, slashFractionDoubleSign, evidence.GetValidatorPower(), distributionHeight, @@ -132,20 +133,20 @@ func (k Keeper) handleEquivocationEvidence(ctx context.Context, evidence *types. // Jail the validator if not already jailed. This will begin unbonding the // validator if not already unbonding (tombstoned). if !validator.IsJailed() { - err = k.slashingKeeper.Jail(ctx, consAddr) + err = k.slashingKeeper.Jail(sdkCtx, consAddr) if err != nil { return err } } - err = k.slashingKeeper.JailUntil(ctx, consAddr, types.DoubleSignJailEndTime) + err = k.slashingKeeper.JailUntil(sdkCtx, consAddr, types.DoubleSignJailEndTime) if err != nil { return err } - err = k.slashingKeeper.Tombstone(ctx, consAddr) + err = k.slashingKeeper.Tombstone(sdkCtx, consAddr) if err != nil { return err } - return k.Evidences.Set(ctx, evidence.Hash(), evidence) + return k.Evidences.Set(sdkCtx, evidence.Hash(), evidence) } diff --git a/x/evidence/keeper/keeper.go b/x/evidence/keeper/keeper.go index 399ca5db0d2e..e7da59577d7f 100644 --- a/x/evidence/keeper/keeper.go +++ b/x/evidence/keeper/keeper.go @@ -2,9 +2,6 @@ package keeper import ( "context" - "encoding/hex" - "fmt" - "strings" "cosmossdk.io/collections" "cosmossdk.io/core/address" @@ -14,15 +11,20 @@ import ( "cosmossdk.io/log" "cosmossdk.io/x/evidence/exported" "cosmossdk.io/x/evidence/types" + "encoding/hex" + "fmt" + metrics "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" + "strings" ) // Keeper defines the evidence module's keeper. The keeper is responsible for // managing persistence, state transitions and query handling for the evidence // module. type Keeper struct { + meter metrics.Meter cdc codec.BinaryCodec storeService store.KVStoreService router types.Router @@ -62,6 +64,7 @@ func NewKeeper( // Logger returns a module-specific logger. func (k Keeper) Logger(ctx context.Context) log.Logger { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Logger")() return sdkCtx.Logger().With("module", "x/"+types.ModuleName) } @@ -97,8 +100,11 @@ func (k Keeper) GetEvidenceHandler(evidenceRoute string) (types.Handler, error) // the corresponding registered Evidence Handler. An error is returned if no // registered Handler exists or if the Handler fails. Otherwise, the evidence is // persisted. -func (k Keeper) SubmitEvidence(ctx context.Context, evidence exported.Evidence) error { - if _, err := k.Evidences.Get(ctx, evidence.Hash()); err == nil { +func (k Keeper) SubmitEvidence(ctx context.Context, evidence exported.Evidence) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SubmitEvidence")(&err) + + if _, err := k.Evidences.Get(sdkCtx, evidence.Hash()); err == nil { return errors.Wrap(types.ErrEvidenceExists, strings.ToUpper(hex.EncodeToString(evidence.Hash()))) } if !k.router.HasRoute(evidence.Route()) { @@ -106,11 +112,9 @@ func (k Keeper) SubmitEvidence(ctx context.Context, evidence exported.Evidence) } handler := k.router.GetRoute(evidence.Route()) - if err := handler(ctx, evidence); err != nil { + if err = handler(sdkCtx, evidence); err != nil { return errors.Wrap(types.ErrInvalidEvidence, err.Error()) } - - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeSubmitEvidence, @@ -118,5 +122,13 @@ func (k Keeper) SubmitEvidence(ctx context.Context, evidence exported.Evidence) ), ) - return k.Evidences.Set(ctx, evidence.Hash(), evidence) + return k.Evidences.Set(sdkCtx, evidence.Hash(), evidence) +} + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter } diff --git a/x/evidence/keeper/msg_server.go b/x/evidence/keeper/msg_server.go index fad39ef33188..1c83586740ad 100644 --- a/x/evidence/keeper/msg_server.go +++ b/x/evidence/keeper/msg_server.go @@ -23,7 +23,10 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { var _ types.MsgServer = msgServer{} // SubmitEvidence implements the MsgServer.SubmitEvidence method. -func (ms msgServer) SubmitEvidence(goCtx context.Context, msg *types.MsgSubmitEvidence) (*types.MsgSubmitEvidenceResponse, error) { +func (ms msgServer) SubmitEvidence(goCtx context.Context, msg *types.MsgSubmitEvidence) (meterResult *types.MsgSubmitEvidenceResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer ms.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "SubmitEvidence")(&err) + if _, err := ms.addressCodec.StringToBytes(msg.Submitter); err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid submitter address: %s", err) } @@ -33,12 +36,11 @@ func (ms msgServer) SubmitEvidence(goCtx context.Context, msg *types.MsgSubmitEv return nil, errors.Wrap(types.ErrInvalidEvidence, "missing evidence") } - if err := evidence.ValidateBasic(); err != nil { + if err = evidence.ValidateBasic(); err != nil { return nil, errors.Wrapf(types.ErrInvalidEvidence, "failed basic validation: %s", err) } - ctx := sdk.UnwrapSDKContext(goCtx) - if err := ms.Keeper.SubmitEvidence(ctx, evidence); err != nil { + if err = ms.Keeper.SubmitEvidence(sdkCtx, evidence); err != nil { return nil, err } diff --git a/x/feegrant/go.mod b/x/feegrant/go.mod index 59409f37c38e..0d9c4d20c238 100644 --- a/x/feegrant/go.mod +++ b/x/feegrant/go.mod @@ -1,8 +1,6 @@ module cosmossdk.io/x/feegrant -go 1.23.5 - -toolchain go1.23.8 +go 1.23.9 require ( cosmossdk.io/api v0.7.6 @@ -12,6 +10,7 @@ require ( cosmossdk.io/log v1.4.1 cosmossdk.io/math v1.4.0 cosmossdk.io/store v1.1.1 + github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 github.com/cometbft/cometbft v0.38.12 github.com/cometbft/cometbft/api v1.0.0 github.com/cosmos/cosmos-proto v1.0.0-beta.5 @@ -21,10 +20,10 @@ require ( github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/spf13/cobra v1.9.1 - github.com/stretchr/testify v1.10.0 - google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 - google.golang.org/grpc v1.71.0 - google.golang.org/protobuf v1.36.5 + github.com/stretchr/testify v1.11.1 + google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 + google.golang.org/grpc v1.75.0 + google.golang.org/protobuf v1.36.8 gotest.tools/v3 v3.5.1 ) @@ -36,23 +35,15 @@ require ( filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect - github.com/DataDog/appsec-internal-go v1.5.0 // indirect - github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0 // indirect - github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1 // indirect github.com/DataDog/datadog-go v3.2.0+incompatible // indirect - github.com/DataDog/datadog-go/v5 v5.3.0 // indirect - github.com/DataDog/go-libddwaf/v2 v2.3.2 // indirect - github.com/DataDog/go-tuf v1.0.2-0.5.2 // indirect - github.com/DataDog/sketches-go v1.4.2 // indirect github.com/DataDog/zstd v1.5.6 // indirect - github.com/InjectiveLabs/metrics v0.0.10 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/alexcesaro/statsd v2.0.0+incompatible // 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.4 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect @@ -76,20 +67,21 @@ require ( github.com/dgraph-io/ristretto/v2 v2.1.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/ebitengine/purego v0.6.0-alpha.5 // indirect github.com/emicklei/dot v1.6.2 // indirect - github.com/fatih/color v1.15.0 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/getsentry/sentry-go v0.31.1 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/btree v1.1.3 // indirect github.com/google/flatbuffers v25.2.10+incompatible // indirect github.com/google/go-cmp v0.7.0 // indirect @@ -99,12 +91,11 @@ require ( github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-metrics v0.5.3 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.5.2 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect @@ -119,6 +110,7 @@ require ( github.com/klauspost/compress v1.18.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect + github.com/leodido/go-urn v1.2.4 // indirect github.com/lib/pq v1.10.9 // indirect github.com/linxGnu/grocksdb v1.9.8 // indirect github.com/magiconair/properties v1.8.7 // indirect @@ -132,10 +124,8 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect - github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect - github.com/philhofer/fwd v1.1.2 // 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.21.1 // indirect @@ -149,7 +139,6 @@ require ( 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.5 // indirect - github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.1 // indirect @@ -160,28 +149,30 @@ require ( 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/tinylib/msgp v1.1.8 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.4.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/otel v1.34.0 // indirect - go.opentelemetry.io/otel/metric v1.34.0 // indirect - go.opentelemetry.io/otel/trace v1.34.0 // indirect - go.uber.org/atomic v1.11.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect + go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.36.0 // indirect + golang.org/x/crypto v0.41.0 // indirect golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect - golang.org/x/net v0.37.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect - golang.org/x/time v0.5.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/term v0.34.0 // indirect + golang.org/x/text v0.28.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect - gopkg.in/DataDog/dd-trace-go.v1 v1.62.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect @@ -200,6 +191,6 @@ replace ( replace ( // Use CometBFT v1.0.1 with Mempool lanes and DOG - github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.3 - github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 + github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 + github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 ) diff --git a/x/feegrant/go.sum b/x/feegrant/go.sum index 5e32adf5c87b..f25cd316a468 100644 --- a/x/feegrant/go.sum +++ b/x/feegrant/go.sum @@ -25,34 +25,17 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 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/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/appsec-internal-go v1.5.0 h1:8kS5zSx5T49uZ8dZTdT19QVAvC/B8ByyZdhQKYQWHno= -github.com/DataDog/appsec-internal-go v1.5.0/go.mod h1:pEp8gjfNLtEOmz+iZqC8bXhu0h4k7NUsW/qiQb34k1U= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0 h1:bUMSNsw1iofWiju9yc1f+kBd33E3hMJtq9GuU602Iy8= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0/go.mod h1:HzySONXnAgSmIQfL6gOv9hWprKJkx8CicuXuUbmgWfo= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1 h1:5nE6N3JSs2IG3xzMthNFhXfOaXlrsdgqmJ73lndFf8c= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1/go.mod h1:Vc+snp0Bey4MrrJyiV2tVxxJb6BmLomPvN1RgAvjGaQ= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/datadog-go/v5 v5.3.0 h1:2q2qjFOb3RwAZNU+ez27ZVDwErJv5/VpbBPprz7Z+s8= -github.com/DataDog/datadog-go/v5 v5.3.0/go.mod h1:XRDJk1pTc00gm+ZDiBKsjh7oOOtJfYfglVCmFb8C2+Q= -github.com/DataDog/go-libddwaf/v2 v2.3.2 h1:pdi9xjWW57IpOpTeOyPuNveEDFLmmInsHDeuZk3TY34= -github.com/DataDog/go-libddwaf/v2 v2.3.2/go.mod h1:gsCdoijYQfj8ce/T2bEDNPZFIYnmHluAgVDpuQOWMZE= -github.com/DataDog/go-tuf v1.0.2-0.5.2 h1:EeZr937eKAWPxJ26IykAdWA4A0jQXJgkhUjqEI/w7+I= -github.com/DataDog/go-tuf v1.0.2-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/gostackparse v0.7.0 h1:i7dLkXHvYzHV308hnkvVGDL3BR4FWl7IsXNPz/IGQh4= -github.com/DataDog/gostackparse v0.7.0/go.mod h1:lTfqcJKqS9KnXQGnyQMCugq3u1FP6UZMfWR0aitKFMM= -github.com/DataDog/sketches-go v1.4.2 h1:gppNudE9d19cQ98RYABOetxIhpTCl4m7CnbRZjvVA/o= -github.com/DataDog/sketches-go v1.4.2/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3 h1:wVl4vPhyTh6uuwT0BfH3pbF9W0QqEnZYRgB/2IDFXR0= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 h1:uXsmBVeBickTjZ2GqPNYXShoboRw1m2Cq1bKv4QCe0o= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= -github.com/InjectiveLabs/metrics v0.0.10 h1:BoOwXnCtRRIPmq06jcI20pXZYE758eusaCI5jDOoN4U= -github.com/InjectiveLabs/metrics v0.0.10/go.mod h1:eYu++0DVUjk/jjV9WgvCo8gQU+16Yoyhp1iu+ghKNME= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 h1:QIKdpbqWRC38xJDRBmUitpksS0ZfwlvSMMYaesZirms= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6/go.mod h1:U34DYdUTNyEdnB89+eqZy+SO9g7sFRwJQg7La+o/pHk= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 h1:GcV53gW9ajrbSoU2ikuCB+dUWHmhMmtfRKwJngZ+ChM= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= +github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 h1:zvIV7ifNcH2Dvl0RrXd2qYRkaDSc+iP0hqaAhfS85MY= +github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8/go.mod h1:fdW28eWh1Ace92UW2TzINdJVaVP7whCmHKkGQZHsxGI= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= @@ -68,8 +51,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexcesaro/statsd v2.0.0+incompatible h1:HG17k1Qk8V1F4UOoq6tx+IUoAbOcI5PHzzEUGeDD72w= -github.com/alexcesaro/statsd v2.0.0+incompatible/go.mod h1:vNepIbQAiyLe1j480173M6NYYaAsGwEcvuDTU3OCUGY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -88,14 +69,16 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= 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/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= -github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.17.0 h1:1X2TS7aHz1ELcC0yU1y2stUs/0ig5oMU6STFZGrhvHI= +github.com/bits-and-blooms/bitset v1.17.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.0 h1:qtNZduETEIWJVIyDl01BeNxur2rW9OwTQ/yBqFRkKEk= github.com/bytedance/sonic v1.10.0/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -104,10 +87,14 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= 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/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo= @@ -198,7 +185,6 @@ github.com/dgraph-io/badger/v4 v4.6.0/go.mod h1:KSJ5VTuZNC3Sd+YhvVjk2nYua9UZnnTr github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I= github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -206,7 +192,6 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh 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 v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -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= @@ -214,8 +199,6 @@ github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/ebitengine/purego v0.6.0-alpha.5 h1:EYID3JOAdmQ4SNZYJHu9V6IqOeRQDBYxqKAg9PyoHFY= -github.com/ebitengine/purego v0.6.0-alpha.5/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= 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= @@ -229,8 +212,8 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -270,8 +253,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG 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-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -293,8 +276,8 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= +github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= 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= @@ -333,8 +316,9 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= @@ -358,8 +342,6 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ 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/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBBos92HalKpaGKHrp+3Uo6yTodo= -github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -385,13 +367,13 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= 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/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= @@ -403,8 +385,6 @@ github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYS github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= @@ -473,8 +453,10 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -588,16 +570,12 @@ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= 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/outcaste-io/ristretto v0.2.3 h1:AK4zt/fJ76kjlYObOeNwh4T3asEuaCmp26pOvUOL9w0= -github.com/outcaste-io/ristretto v0.2.3/go.mod h1:W8HywhmtlopSB1jeMg3JtdIhf+DYkLAr0VN/s4+MHac= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -608,8 +586,6 @@ github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= -github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= @@ -659,8 +635,6 @@ github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoG github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= 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/richardartoul/molecule v1.0.1-0.20221107223329-32cfee06a052 h1:Qp27Idfgi6ACvFQat5+VJvlYToylpM/hcyLBI3WaKPA= -github.com/richardartoul/molecule v1.0.1-0.20221107223329-32cfee06a052/go.mod h1:uvX/8buq8uVeiZiFht+0lqSLBHF+uGV8BrTv8W/SIwk= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -684,8 +658,6 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg= -github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -699,8 +671,6 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= 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/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 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.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= @@ -733,10 +703,11 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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.2/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/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 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.14 h1:xNMoHRJOTwMn63ip6qoWJ2Ymgvj7E2b9jY2FAwY+qRo= @@ -747,13 +718,10 @@ github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2l 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/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= -github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= @@ -764,7 +732,6 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 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= @@ -778,26 +745,29 @@ go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= -go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 h1:vl9obrcoWVKp/lwl8tRE33853I8Xru9HFbw/skNeLs8= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0/go.mod h1:GAXRxmLJcVM3u22IjTg74zWBrRCKq8BnOqUVLodpcpw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= +go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= @@ -810,6 +780,7 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.4.0 h1:A8WCeEWhLwPBKNbFi5Wv5UTCBx5zzubnXDlMOFAzFMc= golang.org/x/arch v0.4.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -820,9 +791,8 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U 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.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= @@ -842,8 +812,6 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -866,16 +834,13 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 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-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -887,10 +852,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ 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.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -925,7 +888,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210124154548-22da62e12c0c/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= @@ -941,33 +903,26 @@ 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-20220627191245-f75cf1eec38b/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-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/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.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 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.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.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.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -989,17 +944,15 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY 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.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= 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= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1017,10 +970,10 @@ google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6D 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-20250106144421-5f5ef82da422 h1:GVIKPyP/kLIyVOgOnTwFOrvQaQUzOzGMCxgFUOEmm24= -google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422/go.mod h1:b6h1vNKhxaSoEI+5jc3PJUCustfli/mRab7295pY7rw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1038,8 +991,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp 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.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= +google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= 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= @@ -1053,15 +1006,10 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba 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.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/DataDog/dd-trace-go.v1 v1.62.0 h1:jeZxE4ZlfAc+R0zO5TEmJBwOLet3NThsOfYJeSQg1x0= -gopkg.in/DataDog/dd-trace-go.v1 v1.62.0/go.mod h1:YTvYkk3PTsfw0OWrRFxV/IQ5Gy4nZ5TRvxTAP3JcIzs= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= -gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= 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= @@ -1093,16 +1041,16 @@ 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/gotraceui v0.2.0 h1:dmNsfQ9Vl3GwbiVD7Z8d/osC6WtGGrasyrC2suc4ZIQ= -honnef.co/go/gotraceui v0.2.0/go.mod h1:qHo4/W75cA3bX0QQoSvDjbJa4R8mAyyFjbWAj63XElc= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= 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/x/feegrant/keeper/grpc_query.go b/x/feegrant/keeper/grpc_query.go index 7dde41517154..886820934665 100644 --- a/x/feegrant/keeper/grpc_query.go +++ b/x/feegrant/keeper/grpc_query.go @@ -20,7 +20,10 @@ import ( var _ feegrant.QueryServer = Keeper{} // Allowance returns granted allowance to the grantee by the granter. -func (q Keeper) Allowance(c context.Context, req *feegrant.QueryAllowanceRequest) (*feegrant.QueryAllowanceResponse, error) { +func (q Keeper) Allowance(c context.Context, req *feegrant.QueryAllowanceRequest) (meterResult *feegrant.QueryAllowanceResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer q.Meter(c).FuncTiming(&sdkCtx, "Allowance")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -35,9 +38,7 @@ func (q Keeper) Allowance(c context.Context, req *feegrant.QueryAllowanceRequest return nil, err } - ctx := sdk.UnwrapSDKContext(c) - - feeAllowance, err := q.GetAllowance(ctx, granterAddr, granteeAddr) + feeAllowance, err := q.GetAllowance(sdkCtx, granterAddr, granteeAddr) if err != nil { return nil, status.Errorf(codes.Internal, err.Error()) } @@ -62,7 +63,10 @@ func (q Keeper) Allowance(c context.Context, req *feegrant.QueryAllowanceRequest } // Allowances queries all the allowances granted to the given grantee. -func (q Keeper) Allowances(c context.Context, req *feegrant.QueryAllowancesRequest) (*feegrant.QueryAllowancesResponse, error) { +func (q Keeper) Allowances(c context.Context, req *feegrant.QueryAllowancesRequest) (meterResult *feegrant.QueryAllowancesResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer q.Meter(c).FuncTiming(&sdkCtx, "Allowances")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -72,17 +76,15 @@ func (q Keeper) Allowances(c context.Context, req *feegrant.QueryAllowancesReque return nil, err } - ctx := sdk.UnwrapSDKContext(c) - var grants []*feegrant.Grant - store := q.storeService.OpenKVStore(ctx) + store := q.storeService.OpenKVStore(sdkCtx) grantsStore := prefix.NewStore(runtime.KVStoreAdapter(store), feegrant.FeeAllowancePrefixByGrantee(granteeAddr)) pageRes, err := query.Paginate(grantsStore, req.Pagination, func(key, value []byte) error { var grant feegrant.Grant - if err := q.cdc.Unmarshal(value, &grant); err != nil { + if err = q.cdc.Unmarshal(value, &grant); err != nil { return err } @@ -97,7 +99,10 @@ func (q Keeper) Allowances(c context.Context, req *feegrant.QueryAllowancesReque } // AllowancesByGranter queries all the allowances granted by the given granter -func (q Keeper) AllowancesByGranter(c context.Context, req *feegrant.QueryAllowancesByGranterRequest) (*feegrant.QueryAllowancesByGranterResponse, error) { +func (q Keeper) AllowancesByGranter(c context.Context, req *feegrant.QueryAllowancesByGranterRequest) (meterResult *feegrant.QueryAllowancesByGranterResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer q.Meter(c).FuncTiming(&sdkCtx, "AllowancesByGranter")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -107,9 +112,7 @@ func (q Keeper) AllowancesByGranter(c context.Context, req *feegrant.QueryAllowa return nil, err } - ctx := sdk.UnwrapSDKContext(c) - - store := q.storeService.OpenKVStore(ctx) + store := q.storeService.OpenKVStore(sdkCtx) prefixStore := prefix.NewStore(runtime.KVStoreAdapter(store), feegrant.FeeAllowanceKeyPrefix) grants, pageRes, err := query.GenericFilteredPaginate(q.cdc, prefixStore, req.Pagination, func(key []byte, grant *feegrant.Grant) (*feegrant.Grant, error) { // ParseAddressesFromFeeAllowanceKey expects the full key including the prefix. diff --git a/x/feegrant/keeper/keeper.go b/x/feegrant/keeper/keeper.go index 1306702de566..2c0fa3329c23 100644 --- a/x/feegrant/keeper/keeper.go +++ b/x/feegrant/keeper/keeper.go @@ -2,25 +2,27 @@ package keeper import ( "context" - "fmt" - "time" "cosmossdk.io/core/store" errorsmod "cosmossdk.io/errors" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" "cosmossdk.io/x/feegrant" + "fmt" + metrics "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/runtime" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/x/auth/ante" + "time" ) // Keeper manages state of all fee grants, as well as calculating approval. // It must have a codec with all available allowances registered. type Keeper struct { + meter metrics.Meter cdc codec.BinaryCodec storeService store.KVStoreService authKeeper feegrant.AccountKeeper @@ -47,28 +49,33 @@ func (k Keeper) SetBankKeeper(bk feegrant.BankKeeper) Keeper { // Logger returns a module-specific logger. func (k Keeper) Logger(ctx sdk.Context) log.Logger { + defer k.Meter(ctx).FuncTiming(&ctx, "Logger")() + return ctx.Logger().With("module", fmt.Sprintf("x/%s", feegrant.ModuleName)) } // GrantAllowance creates a new grant -func (k Keeper) GrantAllowance(ctx context.Context, granter, grantee sdk.AccAddress, feeAllowance feegrant.FeeAllowanceI) error { +func (k Keeper) GrantAllowance(ctx context.Context, granter, grantee sdk.AccAddress, feeAllowance feegrant.FeeAllowanceI) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GrantAllowance")(&err) + // Checking for duplicate entry - if f, _ := k.GetAllowance(ctx, granter, grantee); f != nil { + if f, _ := k.GetAllowance(sdkCtx, granter, grantee); f != nil { return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "fee allowance already exists") } // create the account if it is not in account state - granteeAcc := k.authKeeper.GetAccount(ctx, grantee) + granteeAcc := k.authKeeper.GetAccount(sdkCtx, grantee) if granteeAcc == nil { if k.bankKeeper.BlockedAddr(grantee) { return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not allowed to receive funds", grantee) } - granteeAcc = k.authKeeper.NewAccountWithAddress(ctx, grantee) - k.authKeeper.SetAccount(ctx, granteeAcc) + granteeAcc = k.authKeeper.NewAccountWithAddress(sdkCtx, grantee) + k.authKeeper.SetAccount(sdkCtx, granteeAcc) } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) key := feegrant.FeeAllowanceKey(granter, grantee) exp, err := feeAllowance.ExpiresAt() @@ -77,7 +84,6 @@ func (k Keeper) GrantAllowance(ctx context.Context, granter, grantee sdk.AccAddr } // expiration shouldn't be in the past. - sdkCtx := sdk.UnwrapSDKContext(ctx) if exp != nil && exp.Before(sdkCtx.BlockTime()) { return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "expiration is before current block time") } @@ -86,7 +92,7 @@ func (k Keeper) GrantAllowance(ctx context.Context, granter, grantee sdk.AccAddr if exp != nil { // `key` formed here with the prefix of `FeeAllowanceKeyPrefix` (which is `0x00`) // remove the 1st byte and reuse the remaining key as it is - err = k.addToFeeAllowanceQueue(ctx, key[1:], exp) + err = k.addToFeeAllowanceQueue(sdkCtx, key[1:], exp) if err != nil { return err } @@ -119,11 +125,14 @@ func (k Keeper) GrantAllowance(ctx context.Context, granter, grantee sdk.AccAddr } // UpdateAllowance updates the existing grant. -func (k Keeper) UpdateAllowance(ctx context.Context, granter, grantee sdk.AccAddress, feeAllowance feegrant.FeeAllowanceI) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) UpdateAllowance(ctx context.Context, granter, grantee sdk.AccAddress, feeAllowance feegrant.FeeAllowanceI) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UpdateAllowance")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) key := feegrant.FeeAllowanceKey(granter, grantee) - _, err := k.getGrant(ctx, granter, grantee) + _, err = k.getGrant(sdkCtx, granter, grantee) if err != nil { return err } @@ -142,8 +151,8 @@ func (k Keeper) UpdateAllowance(ctx context.Context, granter, grantee sdk.AccAdd if err != nil { return err } - - sdk.UnwrapSDKContext(ctx).EventManager().EmitEvent( + sdkCtx. + EventManager().EmitEvent( sdk.NewEvent( feegrant.EventTypeUpdateFeeGrant, sdk.NewAttribute(feegrant.AttributeKeyGranter, grant.Granter), @@ -155,13 +164,16 @@ func (k Keeper) UpdateAllowance(ctx context.Context, granter, grantee sdk.AccAdd } // revokeAllowance removes an existing grant -func (k Keeper) revokeAllowance(ctx context.Context, granter, grantee sdk.AccAddress) error { - grant, err := k.GetAllowance(ctx, granter, grantee) +func (k Keeper) revokeAllowance(ctx context.Context, granter, grantee sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "revokeAllowance")(&err) + + grant, err := k.GetAllowance(sdkCtx, granter, grantee) if err != nil { return err } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) key := feegrant.FeeAllowanceKey(granter, grantee) err = store.Delete(key) if err != nil { @@ -174,12 +186,12 @@ func (k Keeper) revokeAllowance(ctx context.Context, granter, grantee sdk.AccAdd } if exp != nil { - if err := store.Delete(feegrant.FeeAllowancePrefixQueue(exp, feegrant.FeeAllowanceKey(grantee, granter)[1:])); err != nil { + if err = store.Delete(feegrant.FeeAllowancePrefixQueue(exp, feegrant.FeeAllowanceKey(grantee, granter)[1:])); err != nil { return err } } - - sdk.UnwrapSDKContext(ctx).EventManager().EmitEvent( + sdkCtx. + EventManager().EmitEvent( sdk.NewEvent( feegrant.EventTypeRevokeFeeGrant, sdk.NewAttribute(feegrant.AttributeKeyGranter, granter.String()), @@ -192,8 +204,11 @@ func (k Keeper) revokeAllowance(ctx context.Context, granter, grantee sdk.AccAdd // GetAllowance returns the allowance between the granter and grantee. // If there is none, it returns nil, nil. // Returns an error on parsing issues -func (k Keeper) GetAllowance(ctx context.Context, granter, grantee sdk.AccAddress) (feegrant.FeeAllowanceI, error) { - grant, err := k.getGrant(ctx, granter, grantee) +func (k Keeper) GetAllowance(ctx context.Context, granter, grantee sdk.AccAddress) (meterResult feegrant.FeeAllowanceI, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllowance")(&err) + + grant, err := k.getGrant(sdkCtx, granter, grantee) if err != nil { return nil, err } @@ -202,8 +217,11 @@ func (k Keeper) GetAllowance(ctx context.Context, granter, grantee sdk.AccAddres } // getGrant returns entire grant between both accounts -func (k Keeper) getGrant(ctx context.Context, granter, grantee sdk.AccAddress) (*feegrant.Grant, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) getGrant(ctx context.Context, granter, grantee sdk.AccAddress) (meterResult *feegrant.Grant, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getGrant")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) key := feegrant.FeeAllowanceKey(granter, grantee) bz, err := store.Get(key) if err != nil { @@ -215,7 +233,7 @@ func (k Keeper) getGrant(ctx context.Context, granter, grantee sdk.AccAddress) ( } var feegrant feegrant.Grant - if err := k.cdc.Unmarshal(bz, &feegrant); err != nil { + if err = k.cdc.Unmarshal(bz, &feegrant); err != nil { return nil, err } @@ -225,8 +243,11 @@ func (k Keeper) getGrant(ctx context.Context, granter, grantee sdk.AccAddress) ( // IterateAllFeeAllowances iterates over all the grants in the store. // Callback to get all data, returns true to stop, false to keep reading // Calling this without pagination is very expensive and only designed for export genesis -func (k Keeper) IterateAllFeeAllowances(ctx context.Context, cb func(grant feegrant.Grant) bool) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) IterateAllFeeAllowances(ctx context.Context, cb func(grant feegrant.Grant) bool) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateAllFeeAllowances")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) iter := storetypes.KVStorePrefixIterator(runtime.KVStoreAdapter(store), feegrant.FeeAllowanceKeyPrefix) defer iter.Close() @@ -234,7 +255,7 @@ func (k Keeper) IterateAllFeeAllowances(ctx context.Context, cb func(grant feegr for ; iter.Valid() && !stop; iter.Next() { bz := iter.Value() var feeGrant feegrant.Grant - if err := k.cdc.Unmarshal(bz, &feeGrant); err != nil { + if err = k.cdc.Unmarshal(bz, &feeGrant); err != nil { return err } stop = cb(feeGrant) @@ -244,22 +265,25 @@ func (k Keeper) IterateAllFeeAllowances(ctx context.Context, cb func(grant feegr } // UseGrantedFees will try to pay the given fee from the granter's account as requested by the grantee -func (k Keeper) UseGrantedFees(ctx context.Context, granter, grantee sdk.AccAddress, fee sdk.Coins, msgs []sdk.Msg) error { - grant, err := k.GetAllowance(ctx, granter, grantee) +func (k Keeper) UseGrantedFees(ctx context.Context, granter, grantee sdk.AccAddress, fee sdk.Coins, msgs []sdk.Msg) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UseGrantedFees")(&err) + + grant, err := k.GetAllowance(sdkCtx, granter, grantee) if err != nil { return err } - remove, err := grant.Accept(ctx, fee, msgs) + remove, err := grant.Accept(sdkCtx, fee, msgs) if remove { // Ignoring the `revokeFeeAllowance` error, because the user has enough grants to perform this transaction. - k.revokeAllowance(ctx, granter, grantee) + k.revokeAllowance(sdkCtx, granter, grantee) if err != nil { return err } - emitUseGrantEvent(ctx, granter.String(), grantee.String()) + emitUseGrantEvent(sdkCtx, granter.String(), grantee.String()) return nil } @@ -268,10 +292,10 @@ func (k Keeper) UseGrantedFees(ctx context.Context, granter, grantee sdk.AccAddr return err } - emitUseGrantEvent(ctx, granter.String(), grantee.String()) + emitUseGrantEvent(sdkCtx, granter.String(), grantee.String()) // if fee allowance is accepted, store the updated state of the allowance - return k.UpdateAllowance(ctx, granter, grantee, grant) + return k.UpdateAllowance(sdkCtx, granter, grantee, grant) } func emitUseGrantEvent(ctx context.Context, granter, grantee string) { @@ -285,7 +309,10 @@ func emitUseGrantEvent(ctx context.Context, granter, grantee string) { } // InitGenesis will initialize the keeper from a *previously validated* GenesisState -func (k Keeper) InitGenesis(ctx context.Context, data *feegrant.GenesisState) error { +func (k Keeper) InitGenesis(ctx context.Context, data *feegrant.GenesisState) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "InitGenesis")(&err) + for _, f := range data.Allowances { granter, err := k.authKeeper.AddressCodec().StringToBytes(f.Granter) if err != nil { @@ -301,7 +328,7 @@ func (k Keeper) InitGenesis(ctx context.Context, data *feegrant.GenesisState) er return err } - err = k.GrantAllowance(ctx, granter, grantee, grant) + err = k.GrantAllowance(sdkCtx, granter, grantee, grant) if err != nil { return err } @@ -310,10 +337,13 @@ func (k Keeper) InitGenesis(ctx context.Context, data *feegrant.GenesisState) er } // ExportGenesis will dump the contents of the keeper into a serializable GenesisState. -func (k Keeper) ExportGenesis(ctx context.Context) (*feegrant.GenesisState, error) { +func (k Keeper) ExportGenesis(ctx context.Context) (meterResult *feegrant.GenesisState, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ExportGenesis")(&err) + var grants []feegrant.Grant - err := k.IterateAllFeeAllowances(ctx, func(grant feegrant.Grant) bool { + err = k.IterateAllFeeAllowances(sdkCtx, func(grant feegrant.Grant) bool { grants = append(grants, grant) return false }) @@ -323,15 +353,21 @@ func (k Keeper) ExportGenesis(ctx context.Context) (*feegrant.GenesisState, erro }, err } -func (k Keeper) addToFeeAllowanceQueue(ctx context.Context, grantKey []byte, exp *time.Time) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) addToFeeAllowanceQueue(ctx context.Context, grantKey []byte, exp *time.Time) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "addToFeeAllowanceQueue")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Set(feegrant.FeeAllowancePrefixQueue(exp, grantKey), []byte{}) } // RemoveExpiredAllowances iterates grantsByExpiryQueue and deletes the expired grants. -func (k Keeper) RemoveExpiredAllowances(ctx context.Context, limit int32) error { - exp := sdk.UnwrapSDKContext(ctx).BlockTime() - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) RemoveExpiredAllowances(ctx context.Context, limit int32) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "RemoveExpiredAllowances")(&err) + + exp := sdkCtx.BlockTime() + store := k.storeService.OpenKVStore(sdkCtx) iterator, err := store.Iterator(feegrant.FeeAllowanceQueueKeyPrefix, storetypes.InclusiveEndBytes(feegrant.AllowanceByExpTimeKey(&exp))) var count int32 if err != nil { @@ -362,7 +398,9 @@ func (k Keeper) RemoveExpiredAllowances(ctx context.Context, limit int32) error // CheckGrantedFee is the check part of UseGrantedFees. It's used to assert whether a grant covers the fees. // No state is persisted. -func (k Keeper) CheckGrantedFee(ctx sdk.Context, granter, grantee sdk.AccAddress, fee sdk.Coins, msgs []sdk.Msg) error { +func (k Keeper) CheckGrantedFee(ctx sdk.Context, granter, grantee sdk.AccAddress, fee sdk.Coins, msgs []sdk.Msg) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "CheckGrantedFee")(&err) + f, err := k.getGrant(ctx, granter, grantee) if err != nil { return err @@ -379,3 +417,11 @@ func (k Keeper) CheckGrantedFee(ctx sdk.Context, granter, grantee sdk.AccAddress return nil } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(feegrant.ModuleName, metrics.Tag("svc", feegrant.ModuleName)) + } + + return k.meter +} diff --git a/x/feegrant/keeper/migrations.go b/x/feegrant/keeper/migrations.go index ccb583197179..f948a8081a2f 100644 --- a/x/feegrant/keeper/migrations.go +++ b/x/feegrant/keeper/migrations.go @@ -18,5 +18,6 @@ func NewMigrator(keeper Keeper) Migrator { // Migrate1to2 migrates from version 1 to 2. func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2.MigrateStore(ctx, m.keeper.storeService, m.keeper.cdc) } diff --git a/x/feegrant/keeper/msg_server.go b/x/feegrant/keeper/msg_server.go index 966f25054562..33d50404137f 100644 --- a/x/feegrant/keeper/msg_server.go +++ b/x/feegrant/keeper/msg_server.go @@ -26,13 +26,14 @@ func NewMsgServerImpl(k Keeper) feegrant.MsgServer { var _ feegrant.MsgServer = msgServer{} // GrantAllowance grants an allowance from the granter's funds to be used by the grantee. -func (k msgServer) GrantAllowance(goCtx context.Context, msg *feegrant.MsgGrantAllowance) (*feegrant.MsgGrantAllowanceResponse, error) { +func (k msgServer) GrantAllowance(goCtx context.Context, msg *feegrant.MsgGrantAllowance) (meterResult *feegrant.MsgGrantAllowanceResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "GrantAllowance")(&err) + if strings.EqualFold(msg.Grantee, msg.Granter) { return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "cannot self-grant fee authorization") } - ctx := sdk.UnwrapSDKContext(goCtx) - grantee, err := k.authKeeper.AddressCodec().StringToBytes(msg.Grantee) if err != nil { return nil, err @@ -43,7 +44,7 @@ func (k msgServer) GrantAllowance(goCtx context.Context, msg *feegrant.MsgGrantA return nil, err } - if f, _ := k.GetAllowance(ctx, granter, grantee); f != nil { + if f, _ := k.GetAllowance(sdkCtx, granter, grantee); f != nil { return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "fee allowance already exists") } @@ -52,11 +53,11 @@ func (k msgServer) GrantAllowance(goCtx context.Context, msg *feegrant.MsgGrantA return nil, err } - if err := allowance.ValidateBasic(); err != nil { + if err = allowance.ValidateBasic(); err != nil { return nil, err } - err = k.Keeper.GrantAllowance(ctx, granter, grantee, allowance) + err = k.Keeper.GrantAllowance(sdkCtx, granter, grantee, allowance) if err != nil { return nil, err } @@ -65,13 +66,14 @@ func (k msgServer) GrantAllowance(goCtx context.Context, msg *feegrant.MsgGrantA } // RevokeAllowance revokes a fee allowance between a granter and grantee. -func (k msgServer) RevokeAllowance(goCtx context.Context, msg *feegrant.MsgRevokeAllowance) (*feegrant.MsgRevokeAllowanceResponse, error) { +func (k msgServer) RevokeAllowance(goCtx context.Context, msg *feegrant.MsgRevokeAllowance) (meterResult *feegrant.MsgRevokeAllowanceResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "RevokeAllowance")(&err) + if msg.Grantee == msg.Granter { return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "addresses must be different") } - ctx := sdk.UnwrapSDKContext(goCtx) - grantee, err := k.authKeeper.AddressCodec().StringToBytes(msg.Grantee) if err != nil { return nil, err @@ -82,7 +84,7 @@ func (k msgServer) RevokeAllowance(goCtx context.Context, msg *feegrant.MsgRevok return nil, err } - err = k.Keeper.revokeAllowance(ctx, granter, grantee) + err = k.Keeper.revokeAllowance(sdkCtx, granter, grantee) if err != nil { return nil, err } @@ -91,14 +93,15 @@ func (k msgServer) RevokeAllowance(goCtx context.Context, msg *feegrant.MsgRevok } // PruneAllowances removes expired allowances from the store. -func (k msgServer) PruneAllowances(ctx context.Context, req *feegrant.MsgPruneAllowances) (*feegrant.MsgPruneAllowancesResponse, error) { +func (k msgServer) PruneAllowances(ctx context.Context, req *feegrant.MsgPruneAllowances) (meterResult *feegrant.MsgPruneAllowancesResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "PruneAllowances")(&err) + // 75 is an arbitrary value, we can change it later if needed - err := k.RemoveExpiredAllowances(ctx, 75) + err = k.RemoveExpiredAllowances(sdkCtx, 75) if err != nil { return nil, err } - - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( feegrant.EventTypePruneFeeGrant, diff --git a/x/feegrant/module/abci.go b/x/feegrant/module/abci.go index 6f14eee3137c..38aa023329a5 100644 --- a/x/feegrant/module/abci.go +++ b/x/feegrant/module/abci.go @@ -4,9 +4,13 @@ import ( "context" "cosmossdk.io/x/feegrant/keeper" + + sdk "github.com/cosmos/cosmos-sdk/types" ) -func EndBlocker(ctx context.Context, k keeper.Keeper) error { +func EndBlocker(ctx context.Context, k keeper.Keeper) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "EndBlocker")(&err) // 200 is an arbitrary value, we can change it later if needed return k.RemoveExpiredAllowances(ctx, 200) } diff --git a/x/gov/abci.go b/x/gov/abci.go index e21337f18292..a72ab3f3eef0 100644 --- a/x/gov/abci.go +++ b/x/gov/abci.go @@ -17,14 +17,15 @@ import ( ) // EndBlocker called every block, process inflation, update validator set. -func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) error { +func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) (err error) { + defer keeper.Meter(ctx).FuncTiming(&ctx, "EndBlocker")(&err) defer telemetry.ModuleMeasureSince(types.ModuleName, telemetry.Now(), telemetry.MetricKeyEndBlocker) logger := ctx.Logger().With("module", "x/"+types.ModuleName) // delete dead proposals from store and returns theirs deposits. // A proposal is dead when it's inactive and didn't get enough deposit on time to get into voting phase. rng := collections.NewPrefixUntilPairRange[time.Time, uint64](ctx.BlockTime()) - err := keeper.InactiveProposalsQueue.Walk(ctx, rng, func(key collections.Pair[time.Time, uint64], _ uint64) (bool, error) { + err = keeper.InactiveProposalsQueue.Walk(ctx, rng, func(key collections.Pair[time.Time, uint64], _ uint64) (bool, error) { proposal, err := keeper.Proposals.Get(ctx, key.K2()) if err != nil { // if the proposal has an encoding error, this means it cannot be processed by x/gov @@ -32,7 +33,7 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) error { // instead of returning an error (i.e, halting the chain), we fail the proposal if errors.Is(err, collections.ErrEncoding) { proposal.Id = key.K2() - if err := failUnsupportedProposal(logger, ctx, keeper, proposal, err.Error(), false); err != nil { + if err = failUnsupportedProposal(logger, ctx, keeper, proposal, err.Error(), false); err != nil { return false, err } @@ -106,7 +107,7 @@ func EndBlocker(ctx sdk.Context, keeper *keeper.Keeper) error { // instead of returning an error (i.e, halting the chain), we fail the proposal if errors.Is(err, collections.ErrEncoding) { proposal.Id = key.K2() - if err := failUnsupportedProposal(logger, ctx, keeper, proposal, err.Error(), true); err != nil { + if err = failUnsupportedProposal(logger, ctx, keeper, proposal, err.Error(), true); err != nil { return false, err } diff --git a/x/gov/keeper/deposit.go b/x/gov/keeper/deposit.go index 9229c30432f8..93b3214c2c0b 100644 --- a/x/gov/keeper/deposit.go +++ b/x/gov/keeper/deposit.go @@ -17,17 +17,23 @@ import ( ) // SetDeposit sets a Deposit to the gov store -func (keeper Keeper) SetDeposit(ctx context.Context, deposit v1.Deposit) error { +func (keeper Keeper) SetDeposit(ctx context.Context, deposit v1.Deposit) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "SetDeposit")(&err) + depositor, err := keeper.authKeeper.AddressCodec().StringToBytes(deposit.Depositor) if err != nil { return err } - return keeper.Deposits.Set(ctx, collections.Join(deposit.ProposalId, sdk.AccAddress(depositor)), deposit) + return keeper.Deposits.Set(sdkCtx, collections.Join(deposit.ProposalId, sdk.AccAddress(depositor)), deposit) } // GetDeposits returns all the deposits of a proposal func (keeper Keeper) GetDeposits(ctx context.Context, proposalID uint64) (deposits v1.Deposits, err error) { - err = keeper.IterateDeposits(ctx, proposalID, func(_ collections.Pair[uint64, sdk.AccAddress], deposit v1.Deposit) (bool, error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "GetDeposits")(&err) + + err = keeper.IterateDeposits(sdkCtx, proposalID, func(_ collections.Pair[uint64, sdk.AccAddress], deposit v1.Deposit) (bool, error) { deposits = append(deposits, &deposit) return false, nil }) @@ -35,23 +41,29 @@ func (keeper Keeper) GetDeposits(ctx context.Context, proposalID uint64) (deposi } // DeleteAndBurnDeposits deletes and burns all the deposits on a specific proposal. -func (keeper Keeper) DeleteAndBurnDeposits(ctx context.Context, proposalID uint64) error { +func (keeper Keeper) DeleteAndBurnDeposits(ctx context.Context, proposalID uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "DeleteAndBurnDeposits")(&err) + coinsToBurn := sdk.NewCoins() - err := keeper.IterateDeposits(ctx, proposalID, func(key collections.Pair[uint64, sdk.AccAddress], deposit v1.Deposit) (stop bool, err error) { + err = keeper.IterateDeposits(sdkCtx, proposalID, func(key collections.Pair[uint64, sdk.AccAddress], deposit v1.Deposit) (stop bool, err error) { coinsToBurn = coinsToBurn.Add(deposit.Amount...) - return false, keeper.Deposits.Remove(ctx, key) + return false, keeper.Deposits.Remove(sdkCtx, key) }) if err != nil { return err } - return keeper.bankKeeper.BurnCoins(ctx, types.ModuleName, coinsToBurn) + return keeper.bankKeeper.BurnCoins(sdkCtx, types.ModuleName, coinsToBurn) } // IterateDeposits iterates over all the proposals deposits and performs a callback function -func (keeper Keeper) IterateDeposits(ctx context.Context, proposalID uint64, cb func(key collections.Pair[uint64, sdk.AccAddress], value v1.Deposit) (bool, error)) error { +func (keeper Keeper) IterateDeposits(ctx context.Context, proposalID uint64, cb func(key collections.Pair[uint64, sdk.AccAddress], value v1.Deposit) (bool, error)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "IterateDeposits")(&err) + rng := collections.NewPrefixedPairRange[uint64, sdk.AccAddress](proposalID) - err := keeper.Deposits.Walk(ctx, rng, cb) + err = keeper.Deposits.Walk(sdkCtx, rng, cb) if err != nil { return err } @@ -60,9 +72,12 @@ func (keeper Keeper) IterateDeposits(ctx context.Context, proposalID uint64, cb // AddDeposit adds or updates a deposit of a specific depositor on a specific proposal. // Activates voting period when appropriate and returns true in that case, else returns false. -func (keeper Keeper) AddDeposit(ctx context.Context, proposalID uint64, depositorAddr sdk.AccAddress, depositAmount sdk.Coins) (bool, error) { +func (keeper Keeper) AddDeposit(ctx context.Context, proposalID uint64, depositorAddr sdk.AccAddress, depositAmount sdk.Coins) (meterResult bool, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "AddDeposit")(&err) + // Checks to see if proposal exists - proposal, err := keeper.Proposals.Get(ctx, proposalID) + proposal, err := keeper.Proposals.Get(sdkCtx, proposalID) if err != nil { return false, err } @@ -73,7 +88,7 @@ func (keeper Keeper) AddDeposit(ctx context.Context, proposalID uint64, deposito } // Check coins to be deposited match the proposal's deposit params - params, err := keeper.Params.Get(ctx) + params, err := keeper.Params.Get(sdkCtx) if err != nil { return false, err } @@ -85,7 +100,7 @@ func (keeper Keeper) AddDeposit(ctx context.Context, proposalID uint64, deposito } // the deposit must only contain valid denoms (listed in the min deposit param) - if err := keeper.validateDepositDenom(ctx, params, depositAmount); err != nil { + if err = keeper.validateDepositDenom(sdkCtx, params, depositAmount); err != nil { return false, err } @@ -121,14 +136,14 @@ func (keeper Keeper) AddDeposit(ctx context.Context, proposalID uint64, deposito } // update the governance module's account coins pool - err = keeper.bankKeeper.SendCoinsFromAccountToModule(ctx, depositorAddr, types.ModuleName, depositAmount) + err = keeper.bankKeeper.SendCoinsFromAccountToModule(sdkCtx, depositorAddr, types.ModuleName, depositAmount) if err != nil { return false, err } // Update proposal proposal.TotalDeposit = sdk.NewCoins(proposal.TotalDeposit...).Add(depositAmount...) - err = keeper.SetProposal(ctx, proposal) + err = keeper.SetProposal(sdkCtx, proposal) if err != nil { return false, err } @@ -136,7 +151,7 @@ func (keeper Keeper) AddDeposit(ctx context.Context, proposalID uint64, deposito // Check if deposit has provided sufficient total funds to transition the proposal into the voting period activatedVotingPeriod := false if proposal.Status == v1.StatusDepositPeriod && sdk.NewCoins(proposal.TotalDeposit...).IsAllGTE(minDepositAmount) { - err = keeper.ActivateVotingPeriod(ctx, proposal) + err = keeper.ActivateVotingPeriod(sdkCtx, proposal) if err != nil { return false, err } @@ -145,7 +160,7 @@ func (keeper Keeper) AddDeposit(ctx context.Context, proposalID uint64, deposito } // Add or update deposit object - deposit, err := keeper.Deposits.Get(ctx, collections.Join(proposalID, depositorAddr)) + deposit, err := keeper.Deposits.Get(sdkCtx, collections.Join(proposalID, depositorAddr)) switch { case err == nil: // deposit exists @@ -159,12 +174,10 @@ func (keeper Keeper) AddDeposit(ctx context.Context, proposalID uint64, deposito } // called when deposit has been added to a proposal, however the proposal may not be active - err = keeper.Hooks().AfterProposalDeposit(ctx, proposalID, depositorAddr) + err = keeper.Hooks().AfterProposalDeposit(sdkCtx, proposalID, depositorAddr) if err != nil { return false, err } - - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeProposalDeposit, @@ -174,7 +187,7 @@ func (keeper Keeper) AddDeposit(ctx context.Context, proposalID uint64, deposito ), ) - err = keeper.SetDeposit(ctx, deposit) + err = keeper.SetDeposit(sdkCtx, deposit) if err != nil { return false, err } @@ -185,11 +198,14 @@ func (keeper Keeper) AddDeposit(ctx context.Context, proposalID uint64, deposito // ChargeDeposit will charge proposal cancellation fee (deposits * proposal_cancel_burn_rate) and // send to a destAddress if defined or burn otherwise. // Remaining funds are send back to the depositor. -func (keeper Keeper) ChargeDeposit(ctx context.Context, proposalID uint64, destAddress, proposalCancelRate string) error { +func (keeper Keeper) ChargeDeposit(ctx context.Context, proposalID uint64, destAddress, proposalCancelRate string) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "ChargeDeposit")(&err) + rate := sdkmath.LegacyMustNewDecFromStr(proposalCancelRate) var cancellationCharges sdk.Coins - deposits, err := keeper.GetDeposits(ctx, proposalID) + deposits, err := keeper.GetDeposits(sdkCtx, proposalID) if err != nil { return err } @@ -220,14 +236,14 @@ func (keeper Keeper) ChargeDeposit(ctx context.Context, proposalID uint64, destA } if !remainingAmount.IsZero() { - err := keeper.bankKeeper.SendCoinsFromModuleToAccount( - ctx, types.ModuleName, depositerAddress, remainingAmount, + err = keeper.bankKeeper.SendCoinsFromModuleToAccount( + sdkCtx, types.ModuleName, depositerAddress, remainingAmount, ) if err != nil { return err } } - err = keeper.Deposits.Remove(ctx, collections.Join(deposit.ProposalId, sdk.AccAddress(depositerAddress))) + err = keeper.Deposits.Remove(sdkCtx, collections.Join(deposit.ProposalId, sdk.AccAddress(depositerAddress))) if err != nil { return err } @@ -240,12 +256,12 @@ func (keeper Keeper) ChargeDeposit(ctx context.Context, proposalID uint64, destA switch { case destAddress == "": // burn the cancellation charges from deposits - err := keeper.bankKeeper.BurnCoins(ctx, types.ModuleName, cancellationCharges) + err = keeper.bankKeeper.BurnCoins(sdkCtx, types.ModuleName, cancellationCharges) if err != nil { return err } case distributionAddress.String() == destAddress: - err := keeper.distrKeeper.FundCommunityPool(ctx, cancellationCharges, keeper.ModuleAccountAddress()) + err = keeper.distrKeeper.FundCommunityPool(sdkCtx, cancellationCharges, keeper.ModuleAccountAddress()) if err != nil { return err } @@ -255,7 +271,7 @@ func (keeper Keeper) ChargeDeposit(ctx context.Context, proposalID uint64, destA return err } err = keeper.bankKeeper.SendCoinsFromModuleToAccount( - ctx, types.ModuleName, destAccAddress, cancellationCharges, + sdkCtx, types.ModuleName, destAccAddress, cancellationCharges, ) if err != nil { return err @@ -267,14 +283,17 @@ func (keeper Keeper) ChargeDeposit(ctx context.Context, proposalID uint64, destA } // RefundAndDeleteDeposits refunds and deletes all the deposits on a specific proposal. -func (keeper Keeper) RefundAndDeleteDeposits(ctx context.Context, proposalID uint64) error { - return keeper.IterateDeposits(ctx, proposalID, func(key collections.Pair[uint64, sdk.AccAddress], deposit v1.Deposit) (bool, error) { +func (keeper Keeper) RefundAndDeleteDeposits(ctx context.Context, proposalID uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "RefundAndDeleteDeposits")(&err) + + return keeper.IterateDeposits(sdkCtx, proposalID, func(key collections.Pair[uint64, sdk.AccAddress], deposit v1.Deposit) (bool, error) { depositor := key.K2() - err := keeper.bankKeeper.SendCoinsFromModuleToAccount(ctx, types.ModuleName, depositor, deposit.Amount) + err = keeper.bankKeeper.SendCoinsFromModuleToAccount(sdkCtx, types.ModuleName, depositor, deposit.Amount) if err != nil { return false, err } - err = keeper.Deposits.Remove(ctx, key) + err = keeper.Deposits.Remove(sdkCtx, key) return false, err }) } @@ -282,7 +301,10 @@ func (keeper Keeper) RefundAndDeleteDeposits(ctx context.Context, proposalID uin // validateInitialDeposit validates if initial deposit is greater than or equal to the minimum // required at the time of proposal submission. This threshold amount is determined by // the deposit parameters. Returns nil on success, error otherwise. -func (keeper Keeper) validateInitialDeposit(ctx context.Context, params v1.Params, initialDeposit sdk.Coins, expedited bool) error { +func (keeper Keeper) validateInitialDeposit(ctx context.Context, params v1.Params, initialDeposit sdk.Coins, expedited bool) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "validateInitialDeposit")(&err) + if !initialDeposit.IsValid() || initialDeposit.IsAnyNegative() { return errors.Wrap(sdkerrors.ErrInvalidCoins, initialDeposit.String()) } @@ -312,7 +334,10 @@ func (keeper Keeper) validateInitialDeposit(ctx context.Context, params v1.Param } // validateDepositDenom validates if the deposit denom is accepted by the governance module. -func (keeper Keeper) validateDepositDenom(ctx context.Context, params v1.Params, depositAmount sdk.Coins) error { +func (keeper Keeper) validateDepositDenom(ctx context.Context, params v1.Params, depositAmount sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "validateDepositDenom")(&err) + denoms := []string{} acceptedDenoms := make(map[string]bool, len(params.MinDeposit)) for _, coin := range params.MinDeposit { diff --git a/x/gov/keeper/grpc_query.go b/x/gov/keeper/grpc_query.go index b42a114cfb14..41024004bfc7 100644 --- a/x/gov/keeper/grpc_query.go +++ b/x/gov/keeper/grpc_query.go @@ -25,8 +25,11 @@ func NewQueryServer(k *Keeper) v1.QueryServer { return queryServer{k: k} } -func (q queryServer) Constitution(ctx context.Context, _ *v1.QueryConstitutionRequest) (*v1.QueryConstitutionResponse, error) { - constitution, err := q.k.Constitution.Get(ctx) +func (q queryServer) Constitution(ctx context.Context, _ *v1.QueryConstitutionRequest) (meterResult *v1.QueryConstitutionResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Constitution")(&err) + + constitution, err := q.k.Constitution.Get(sdkCtx) if err != nil { return nil, err } @@ -34,7 +37,10 @@ func (q queryServer) Constitution(ctx context.Context, _ *v1.QueryConstitutionRe } // Proposal returns proposal details based on ProposalID -func (q queryServer) Proposal(ctx context.Context, req *v1.QueryProposalRequest) (*v1.QueryProposalResponse, error) { +func (q queryServer) Proposal(ctx context.Context, req *v1.QueryProposalRequest) (meterResult *v1.QueryProposalResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Proposal")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -43,7 +49,7 @@ func (q queryServer) Proposal(ctx context.Context, req *v1.QueryProposalRequest) return nil, status.Error(codes.InvalidArgument, "proposal id can not be 0") } - proposal, err := q.k.Proposals.Get(ctx, req.ProposalId) + proposal, err := q.k.Proposals.Get(sdkCtx, req.ProposalId) if err != nil { if errors.IsOf(err, collections.ErrNotFound) { return nil, status.Errorf(codes.NotFound, "proposal %d doesn't exist", req.ProposalId) @@ -55,8 +61,11 @@ func (q queryServer) Proposal(ctx context.Context, req *v1.QueryProposalRequest) } // Proposals implements the Query/Proposals gRPC method -func (q queryServer) Proposals(ctx context.Context, req *v1.QueryProposalsRequest) (*v1.QueryProposalsResponse, error) { - filteredProposals, pageRes, err := query.CollectionFilteredPaginate(ctx, q.k.Proposals, req.Pagination, func(key uint64, p v1.Proposal) (include bool, err error) { +func (q queryServer) Proposals(ctx context.Context, req *v1.QueryProposalsRequest) (meterResult *v1.QueryProposalsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Proposals")(&err) + + filteredProposals, pageRes, err := query.CollectionFilteredPaginate(sdkCtx, q.k.Proposals, req.Pagination, func(key uint64, p v1.Proposal) (include bool, err error) { matchVoter, matchDepositor, matchStatus := true, true, true // match status (if supplied/valid) @@ -71,7 +80,7 @@ func (q queryServer) Proposals(ctx context.Context, req *v1.QueryProposalsReques return false, err } - has, err := q.k.Votes.Has(ctx, collections.Join(p.Id, sdk.AccAddress(voter))) + has, err := q.k.Votes.Has(sdkCtx, collections.Join(p.Id, sdk.AccAddress(voter))) // if no error, vote found, matchVoter = true matchVoter = err == nil && has } @@ -82,7 +91,7 @@ func (q queryServer) Proposals(ctx context.Context, req *v1.QueryProposalsReques if err != nil { return false, err } - has, err := q.k.Deposits.Has(ctx, collections.Join(p.Id, sdk.AccAddress(depositor))) + has, err := q.k.Deposits.Has(sdkCtx, collections.Join(p.Id, sdk.AccAddress(depositor))) // if no error, deposit found, matchDepositor = true matchDepositor = err == nil && has } @@ -105,7 +114,10 @@ func (q queryServer) Proposals(ctx context.Context, req *v1.QueryProposalsReques } // Vote returns Voted information based on proposalID, voterAddr -func (q queryServer) Vote(ctx context.Context, req *v1.QueryVoteRequest) (*v1.QueryVoteResponse, error) { +func (q queryServer) Vote(ctx context.Context, req *v1.QueryVoteRequest) (meterResult *v1.QueryVoteResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Vote")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -122,7 +134,7 @@ func (q queryServer) Vote(ctx context.Context, req *v1.QueryVoteRequest) (*v1.Qu if err != nil { return nil, err } - vote, err := q.k.Votes.Get(ctx, collections.Join(req.ProposalId, sdk.AccAddress(voter))) + vote, err := q.k.Votes.Get(sdkCtx, collections.Join(req.ProposalId, sdk.AccAddress(voter))) if err != nil { if errors.IsOf(err, collections.ErrNotFound) { return nil, status.Errorf(codes.InvalidArgument, @@ -135,7 +147,10 @@ func (q queryServer) Vote(ctx context.Context, req *v1.QueryVoteRequest) (*v1.Qu } // Votes returns single proposal's votes -func (q queryServer) Votes(ctx context.Context, req *v1.QueryVotesRequest) (*v1.QueryVotesResponse, error) { +func (q queryServer) Votes(ctx context.Context, req *v1.QueryVotesRequest) (meterResult *v1.QueryVotesResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Votes")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -144,7 +159,7 @@ func (q queryServer) Votes(ctx context.Context, req *v1.QueryVotesRequest) (*v1. return nil, status.Error(codes.InvalidArgument, "proposal id can not be 0") } - votes, pageRes, err := query.CollectionPaginate(ctx, q.k.Votes, req.Pagination, func(_ collections.Pair[uint64, sdk.AccAddress], value v1.Vote) (vote *v1.Vote, err error) { + votes, pageRes, err := query.CollectionPaginate(sdkCtx, q.k.Votes, req.Pagination, func(_ collections.Pair[uint64, sdk.AccAddress], value v1.Vote) (vote *v1.Vote, err error) { return &value, nil }, query.WithCollectionPaginationPairPrefix[uint64, sdk.AccAddress](req.ProposalId)) if err != nil { @@ -155,12 +170,15 @@ func (q queryServer) Votes(ctx context.Context, req *v1.QueryVotesRequest) (*v1. } // Params queries all params -func (q queryServer) Params(ctx context.Context, req *v1.QueryParamsRequest) (*v1.QueryParamsResponse, error) { +func (q queryServer) Params(ctx context.Context, req *v1.QueryParamsRequest) (meterResult *v1.QueryParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Params")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } - params, err := q.k.Params.Get(ctx) + params, err := q.k.Params.Get(sdkCtx) if err != nil { return nil, err } @@ -190,7 +208,10 @@ func (q queryServer) Params(ctx context.Context, req *v1.QueryParamsRequest) (*v } // Deposit queries single deposit information based on proposalID, depositAddr. -func (q queryServer) Deposit(ctx context.Context, req *v1.QueryDepositRequest) (*v1.QueryDepositResponse, error) { +func (q queryServer) Deposit(ctx context.Context, req *v1.QueryDepositRequest) (meterResult *v1.QueryDepositResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Deposit")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -207,7 +228,7 @@ func (q queryServer) Deposit(ctx context.Context, req *v1.QueryDepositRequest) ( if err != nil { return nil, err } - deposit, err := q.k.Deposits.Get(ctx, collections.Join(req.ProposalId, sdk.AccAddress(depositor))) + deposit, err := q.k.Deposits.Get(sdkCtx, collections.Join(req.ProposalId, sdk.AccAddress(depositor))) if err != nil { return nil, status.Error(codes.NotFound, err.Error()) } @@ -216,7 +237,10 @@ func (q queryServer) Deposit(ctx context.Context, req *v1.QueryDepositRequest) ( } // Deposits returns single proposal's all deposits -func (q queryServer) Deposits(ctx context.Context, req *v1.QueryDepositsRequest) (*v1.QueryDepositsResponse, error) { +func (q queryServer) Deposits(ctx context.Context, req *v1.QueryDepositsRequest) (meterResult *v1.QueryDepositsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Deposits")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -226,7 +250,7 @@ func (q queryServer) Deposits(ctx context.Context, req *v1.QueryDepositsRequest) } var deposits []*v1.Deposit - deposits, pageRes, err := query.CollectionPaginate(ctx, q.k.Deposits, req.Pagination, func(_ collections.Pair[uint64, sdk.AccAddress], deposit v1.Deposit) (*v1.Deposit, error) { + deposits, pageRes, err := query.CollectionPaginate(sdkCtx, q.k.Deposits, req.Pagination, func(_ collections.Pair[uint64, sdk.AccAddress], deposit v1.Deposit) (*v1.Deposit, error) { return &deposit, nil }, query.WithCollectionPaginationPairPrefix[uint64, sdk.AccAddress](req.ProposalId)) if err != nil { @@ -237,7 +261,10 @@ func (q queryServer) Deposits(ctx context.Context, req *v1.QueryDepositsRequest) } // TallyResult queries the tally of a proposal vote -func (q queryServer) TallyResult(ctx context.Context, req *v1.QueryTallyResultRequest) (*v1.QueryTallyResultResponse, error) { +func (q queryServer) TallyResult(ctx context.Context, req *v1.QueryTallyResultRequest) (meterResult *v1.QueryTallyResultResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "TallyResult")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "invalid request") } @@ -246,7 +273,7 @@ func (q queryServer) TallyResult(ctx context.Context, req *v1.QueryTallyResultRe return nil, status.Error(codes.InvalidArgument, "proposal id can not be 0") } - proposal, err := q.k.Proposals.Get(ctx, req.ProposalId) + proposal, err := q.k.Proposals.Get(sdkCtx, req.ProposalId) if err != nil { if errors.IsOf(err, collections.ErrNotFound) { return nil, status.Errorf(codes.NotFound, "proposal %d doesn't exist", req.ProposalId) @@ -266,7 +293,7 @@ func (q queryServer) TallyResult(ctx context.Context, req *v1.QueryTallyResultRe default: // proposal is in voting period var err error - _, _, tallyResult, err = q.k.Tally(ctx, proposal) + _, _, tallyResult, err = q.k.Tally(sdkCtx, proposal) if err != nil { return nil, err } @@ -277,15 +304,21 @@ func (q queryServer) TallyResult(ctx context.Context, req *v1.QueryTallyResultRe var _ v1beta1.QueryServer = legacyQueryServer{} -type legacyQueryServer struct{ qs v1.QueryServer } +type legacyQueryServer struct { + k *Keeper + qs v1.QueryServer +} // NewLegacyQueryServer returns an implementation of the v1beta1 legacy QueryServer interface. func NewLegacyQueryServer(k *Keeper) v1beta1.QueryServer { - return &legacyQueryServer{qs: NewQueryServer(k)} + return &legacyQueryServer{k: k, qs: NewQueryServer(k)} } -func (q legacyQueryServer) Proposal(ctx context.Context, req *v1beta1.QueryProposalRequest) (*v1beta1.QueryProposalResponse, error) { - resp, err := q.qs.Proposal(ctx, &v1.QueryProposalRequest{ +func (q legacyQueryServer) Proposal(ctx context.Context, req *v1beta1.QueryProposalRequest) (meterResult *v1beta1.QueryProposalResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Proposal")(&err) + + resp, err := q.qs.Proposal(sdkCtx, &v1.QueryProposalRequest{ ProposalId: req.ProposalId, }) if err != nil { @@ -300,8 +333,11 @@ func (q legacyQueryServer) Proposal(ctx context.Context, req *v1beta1.QueryPropo return &v1beta1.QueryProposalResponse{Proposal: proposal}, nil } -func (q legacyQueryServer) Proposals(ctx context.Context, req *v1beta1.QueryProposalsRequest) (*v1beta1.QueryProposalsResponse, error) { - resp, err := q.qs.Proposals(ctx, &v1.QueryProposalsRequest{ +func (q legacyQueryServer) Proposals(ctx context.Context, req *v1beta1.QueryProposalsRequest) (meterResult *v1beta1.QueryProposalsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Proposals")(&err) + + resp, err := q.qs.Proposals(sdkCtx, &v1.QueryProposalsRequest{ ProposalStatus: v1.ProposalStatus(req.ProposalStatus), Voter: req.Voter, Depositor: req.Depositor, @@ -325,8 +361,11 @@ func (q legacyQueryServer) Proposals(ctx context.Context, req *v1beta1.QueryProp }, nil } -func (q legacyQueryServer) Vote(ctx context.Context, req *v1beta1.QueryVoteRequest) (*v1beta1.QueryVoteResponse, error) { - resp, err := q.qs.Vote(ctx, &v1.QueryVoteRequest{ +func (q legacyQueryServer) Vote(ctx context.Context, req *v1beta1.QueryVoteRequest) (meterResult *v1beta1.QueryVoteResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Vote")(&err) + + resp, err := q.qs.Vote(sdkCtx, &v1.QueryVoteRequest{ ProposalId: req.ProposalId, Voter: req.Voter, }) @@ -342,8 +381,11 @@ func (q legacyQueryServer) Vote(ctx context.Context, req *v1beta1.QueryVoteReque return &v1beta1.QueryVoteResponse{Vote: vote}, nil } -func (q legacyQueryServer) Votes(ctx context.Context, req *v1beta1.QueryVotesRequest) (*v1beta1.QueryVotesResponse, error) { - resp, err := q.qs.Votes(ctx, &v1.QueryVotesRequest{ +func (q legacyQueryServer) Votes(ctx context.Context, req *v1beta1.QueryVotesRequest) (meterResult *v1beta1.QueryVotesResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Votes")(&err) + + resp, err := q.qs.Votes(sdkCtx, &v1.QueryVotesRequest{ ProposalId: req.ProposalId, Pagination: req.Pagination, }) @@ -366,8 +408,11 @@ func (q legacyQueryServer) Votes(ctx context.Context, req *v1beta1.QueryVotesReq } //nolint:staticcheck // this is needed for legacy param support -func (q legacyQueryServer) Params(ctx context.Context, req *v1beta1.QueryParamsRequest) (*v1beta1.QueryParamsResponse, error) { - resp, err := q.qs.Params(ctx, &v1.QueryParamsRequest{ +func (q legacyQueryServer) Params(ctx context.Context, req *v1beta1.QueryParamsRequest) (meterResult *v1beta1.QueryParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Params")(&err) + + resp, err := q.qs.Params(sdkCtx, &v1.QueryParamsRequest{ ParamsType: req.ParamsType, }) if err != nil { @@ -409,8 +454,11 @@ func (q legacyQueryServer) Params(ctx context.Context, req *v1beta1.QueryParamsR return response, nil } -func (q legacyQueryServer) Deposit(ctx context.Context, req *v1beta1.QueryDepositRequest) (*v1beta1.QueryDepositResponse, error) { - resp, err := q.qs.Deposit(ctx, &v1.QueryDepositRequest{ +func (q legacyQueryServer) Deposit(ctx context.Context, req *v1beta1.QueryDepositRequest) (meterResult *v1beta1.QueryDepositResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Deposit")(&err) + + resp, err := q.qs.Deposit(sdkCtx, &v1.QueryDepositRequest{ ProposalId: req.ProposalId, Depositor: req.Depositor, }) @@ -422,8 +470,11 @@ func (q legacyQueryServer) Deposit(ctx context.Context, req *v1beta1.QueryDeposi return &v1beta1.QueryDepositResponse{Deposit: deposit}, nil } -func (q legacyQueryServer) Deposits(ctx context.Context, req *v1beta1.QueryDepositsRequest) (*v1beta1.QueryDepositsResponse, error) { - resp, err := q.qs.Deposits(ctx, &v1.QueryDepositsRequest{ +func (q legacyQueryServer) Deposits(ctx context.Context, req *v1beta1.QueryDepositsRequest) (meterResult *v1beta1.QueryDepositsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Deposits")(&err) + + resp, err := q.qs.Deposits(sdkCtx, &v1.QueryDepositsRequest{ ProposalId: req.ProposalId, Pagination: req.Pagination, }) @@ -438,8 +489,11 @@ func (q legacyQueryServer) Deposits(ctx context.Context, req *v1beta1.QueryDepos return &v1beta1.QueryDepositsResponse{Deposits: deposits, Pagination: resp.Pagination}, nil } -func (q legacyQueryServer) TallyResult(ctx context.Context, req *v1beta1.QueryTallyResultRequest) (*v1beta1.QueryTallyResultResponse, error) { - resp, err := q.qs.TallyResult(ctx, &v1.QueryTallyResultRequest{ +func (q legacyQueryServer) TallyResult(ctx context.Context, req *v1beta1.QueryTallyResultRequest) (meterResult *v1beta1.QueryTallyResultResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "TallyResult")(&err) + + resp, err := q.qs.TallyResult(sdkCtx, &v1.QueryTallyResultRequest{ ProposalId: req.ProposalId, }) if err != nil { diff --git a/x/gov/keeper/keeper.go b/x/gov/keeper/keeper.go index 63ff7c252783..d081165fc0a9 100644 --- a/x/gov/keeper/keeper.go +++ b/x/gov/keeper/keeper.go @@ -2,12 +2,12 @@ package keeper import ( "context" - "fmt" - "time" "cosmossdk.io/collections" corestoretypes "cosmossdk.io/core/store" "cosmossdk.io/log" + "fmt" + metrics "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" @@ -15,10 +15,12 @@ import ( "github.com/cosmos/cosmos-sdk/x/gov/types" v1 "github.com/cosmos/cosmos-sdk/x/gov/types/v1" "github.com/cosmos/cosmos-sdk/x/gov/types/v1beta1" + "time" ) // Keeper defines the governance module Keeper type Keeper struct { + meter metrics.Meter authKeeper types.AccountKeeper bankKeeper types.BankKeeper distrKeeper types.DistributionKeeper @@ -152,6 +154,7 @@ func (k *Keeper) SetLegacyRouter(router v1beta1.Router) { // Logger returns a module-specific logger. func (k Keeper) Logger(ctx context.Context) log.Logger { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Logger")() return sdkCtx.Logger().With("module", "x/"+types.ModuleName) } @@ -167,7 +170,10 @@ func (k Keeper) LegacyRouter() v1beta1.Router { // GetGovernanceAccount returns the governance ModuleAccount func (k Keeper) GetGovernanceAccount(ctx context.Context) sdk.ModuleAccountI { - return k.authKeeper.GetModuleAccount(ctx, types.ModuleName) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetGovernanceAccount")() + + return k.authKeeper.GetModuleAccount(sdkCtx, types.ModuleName) } // ModuleAccountAddress returns gov module account address @@ -192,3 +198,11 @@ func (k Keeper) assertSummaryLength(summary string) error { } return nil } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter +} diff --git a/x/gov/keeper/keeper_test.go b/x/gov/keeper/keeper_test.go index 748ad89de796..330fb4a733a3 100644 --- a/x/gov/keeper/keeper_test.go +++ b/x/gov/keeper/keeper_test.go @@ -74,7 +74,7 @@ func (suite *KeeperTestSuite) reset() { suite.legacyQueryClient = legacyQueryClient suite.msgSrvr = keeper.NewMsgServerImpl(suite.govKeeper) - suite.legacyMsgSrvr = keeper.NewLegacyMsgServerImpl(govAcct.String(), suite.msgSrvr) + suite.legacyMsgSrvr = keeper.NewLegacyMsgServerImpl(govAcct.String(), suite.govKeeper, suite.msgSrvr) suite.addrs = simtestutil.AddTestAddrsIncremental(bankKeeper, stakingKeeper, ctx, 3, sdkmath.NewInt(30000000)) suite.acctKeeper.EXPECT().AddressCodec().Return(address.NewBech32Codec("cosmos")).AnyTimes() diff --git a/x/gov/keeper/migrations.go b/x/gov/keeper/migrations.go index 508d8292b96a..222f241a7d63 100644 --- a/x/gov/keeper/migrations.go +++ b/x/gov/keeper/migrations.go @@ -25,20 +25,24 @@ func NewMigrator(keeper *Keeper, legacySubspace exported.ParamSubspace) Migrator // Migrate1to2 migrates from version 1 to 2. func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2.MigrateStore(ctx, m.keeper.storeService, m.keeper.cdc) } // Migrate2to3 migrates from version 2 to 3. func (m Migrator) Migrate2to3(ctx sdk.Context) error { + return v3.MigrateStore(ctx, m.keeper.storeService, m.keeper.cdc) } // Migrate3to4 migrates from version 3 to 4. func (m Migrator) Migrate3to4(ctx sdk.Context) error { + return v4.MigrateStore(ctx, m.keeper.storeService, m.legacySubspace, m.keeper.cdc) } // Migrate4to5 migrates from version 4 to 5. func (m Migrator) Migrate4to5(ctx sdk.Context) error { + return v5.MigrateStore(ctx, m.keeper.storeService, m.keeper.cdc, m.keeper.Constitution) } diff --git a/x/gov/keeper/msg_server.go b/x/gov/keeper/msg_server.go index 875b49136954..6accfdb6565e 100644 --- a/x/gov/keeper/msg_server.go +++ b/x/gov/keeper/msg_server.go @@ -28,7 +28,10 @@ func NewMsgServerImpl(keeper *Keeper) v1.MsgServer { var _ v1.MsgServer = msgServer{} // SubmitProposal implements the MsgServer.SubmitProposal method. -func (k msgServer) SubmitProposal(goCtx context.Context, msg *v1.MsgSubmitProposal) (*v1.MsgSubmitProposalResponse, error) { +func (k msgServer) SubmitProposal(goCtx context.Context, msg *v1.MsgSubmitProposal) (meterResult *v1.MsgSubmitProposalResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "SubmitProposal")(&err) + if msg.Title == "" { return nil, errors.Wrap(sdkerrors.ErrInvalidRequest, "proposal title cannot be empty") } @@ -49,7 +52,7 @@ func (k msgServer) SubmitProposal(goCtx context.Context, msg *v1.MsgSubmitPropos // verify that if present, the metadata title and summary equals the proposal title and summary if len(msg.Metadata) != 0 { proposalMetadata := govtypes.ProposalMetadata{} - if err := json.Unmarshal([]byte(msg.Metadata), &proposalMetadata); err == nil { + if err = json.Unmarshal([]byte(msg.Metadata), &proposalMetadata); err == nil { if proposalMetadata.Title != msg.Title { return nil, errors.Wrapf(govtypes.ErrInvalidProposalContent, "metadata title '%s' must equal proposal title '%s'", proposalMetadata.Title, msg.Title) } @@ -68,23 +71,22 @@ func (k msgServer) SubmitProposal(goCtx context.Context, msg *v1.MsgSubmitPropos return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) initialDeposit := msg.GetInitialDeposit() - params, err := k.Params.Get(ctx) + params, err := k.Params.Get(sdkCtx) if err != nil { return nil, fmt.Errorf("failed to get governance parameters: %w", err) } - if err := k.validateInitialDeposit(ctx, params, initialDeposit, msg.Expedited); err != nil { + if err = k.validateInitialDeposit(sdkCtx, params, initialDeposit, msg.Expedited); err != nil { return nil, err } - if err := k.validateDepositDenom(ctx, params, initialDeposit); err != nil { + if err = k.validateDepositDenom(sdkCtx, params, initialDeposit); err != nil { return nil, err } - proposal, err := k.Keeper.SubmitProposal(ctx, proposalMsgs, msg.Metadata, msg.Title, msg.Summary, proposer, msg.Expedited) + proposal, err := k.Keeper.SubmitProposal(sdkCtx, proposalMsgs, msg.Metadata, msg.Title, msg.Summary, proposer, msg.Expedited) if err != nil { return nil, err } @@ -95,18 +97,18 @@ func (k msgServer) SubmitProposal(goCtx context.Context, msg *v1.MsgSubmitPropos } // ref: https://github.com/cosmos/cosmos-sdk/issues/9683 - ctx.GasMeter().ConsumeGas( - 3*ctx.KVGasConfig().WriteCostPerByte*uint64(len(bytes)), + sdkCtx.GasMeter().ConsumeGas( + 3*sdkCtx.KVGasConfig().WriteCostPerByte*uint64(len(bytes)), "submit proposal", ) - votingStarted, err := k.Keeper.AddDeposit(ctx, proposal.Id, proposer, msg.GetInitialDeposit()) + votingStarted, err := k.Keeper.AddDeposit(sdkCtx, proposal.Id, proposer, msg.GetInitialDeposit()) if err != nil { return nil, err } if votingStarted { - ctx.EventManager().EmitEvent( + sdkCtx.EventManager().EmitEvent( sdk.NewEvent(govtypes.EventTypeSubmitProposal, sdk.NewAttribute(govtypes.AttributeKeyVotingPeriodStart, fmt.Sprintf("%d", proposal.Id)), ), @@ -119,18 +121,20 @@ func (k msgServer) SubmitProposal(goCtx context.Context, msg *v1.MsgSubmitPropos } // CancelProposal implements the MsgServer.CancelProposal method. -func (k msgServer) CancelProposal(goCtx context.Context, msg *v1.MsgCancelProposal) (*v1.MsgCancelProposalResponse, error) { - _, err := k.authKeeper.AddressCodec().StringToBytes(msg.Proposer) +func (k msgServer) CancelProposal(goCtx context.Context, msg *v1.MsgCancelProposal) (meterResult *v1.MsgCancelProposalResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "CancelProposal")(&err) + + _, err = k.authKeeper.AddressCodec().StringToBytes(msg.Proposer) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid proposer address: %s", err) } - ctx := sdk.UnwrapSDKContext(goCtx) - if err := k.Keeper.CancelProposal(ctx, msg.ProposalId, msg.Proposer); err != nil { + if err = k.Keeper.CancelProposal(sdkCtx, msg.ProposalId, msg.Proposer); err != nil { return nil, err } - ctx.EventManager().EmitEvent( + sdkCtx.EventManager().EmitEvent( sdk.NewEvent( govtypes.EventTypeCancelProposal, sdk.NewAttribute(sdk.AttributeKeySender, msg.Proposer), @@ -140,16 +144,17 @@ func (k msgServer) CancelProposal(goCtx context.Context, msg *v1.MsgCancelPropos return &v1.MsgCancelProposalResponse{ ProposalId: msg.ProposalId, - CanceledTime: ctx.BlockTime(), - CanceledHeight: uint64(ctx.BlockHeight()), + CanceledTime: sdkCtx.BlockTime(), + CanceledHeight: uint64(sdkCtx.BlockHeight()), }, nil } // ExecLegacyContent implements the MsgServer.ExecLegacyContent method. -func (k msgServer) ExecLegacyContent(goCtx context.Context, msg *v1.MsgExecLegacyContent) (*v1.MsgExecLegacyContentResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k msgServer) ExecLegacyContent(goCtx context.Context, msg *v1.MsgExecLegacyContent) (meterResult *v1.MsgExecLegacyContentResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "ExecLegacyContent")(&err) - govAcct := k.GetGovernanceAccount(ctx).GetAddress().String() + govAcct := k.GetGovernanceAccount(sdkCtx).GetAddress().String() if govAcct != msg.Authority { return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "expected %s got %s", govAcct, msg.Authority) } @@ -165,7 +170,7 @@ func (k msgServer) ExecLegacyContent(goCtx context.Context, msg *v1.MsgExecLegac } handler := k.Keeper.legacyRouter.GetRoute(content.ProposalRoute()) - if err := handler(ctx, content); err != nil { + if err = handler(sdkCtx, content); err != nil { return nil, errors.Wrapf(govtypes.ErrInvalidProposalContent, "failed to run legacy handler %s, %+v", content.ProposalRoute(), err) } @@ -173,7 +178,10 @@ func (k msgServer) ExecLegacyContent(goCtx context.Context, msg *v1.MsgExecLegac } // Vote implements the MsgServer.Vote method. -func (k msgServer) Vote(goCtx context.Context, msg *v1.MsgVote) (*v1.MsgVoteResponse, error) { +func (k msgServer) Vote(goCtx context.Context, msg *v1.MsgVote) (meterResult *v1.MsgVoteResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "Vote")(&err) + accAddr, err := k.authKeeper.AddressCodec().StringToBytes(msg.Voter) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid voter address: %s", err) @@ -183,8 +191,7 @@ func (k msgServer) Vote(goCtx context.Context, msg *v1.MsgVote) (*v1.MsgVoteResp return nil, errors.Wrap(govtypes.ErrInvalidVote, msg.Option.String()) } - ctx := sdk.UnwrapSDKContext(goCtx) - err = k.Keeper.AddVote(ctx, msg.ProposalId, accAddr, v1.NewNonSplitVoteOption(msg.Option), msg.Metadata) + err = k.Keeper.AddVote(sdkCtx, msg.ProposalId, accAddr, v1.NewNonSplitVoteOption(msg.Option), msg.Metadata) if err != nil { return nil, err } @@ -193,7 +200,10 @@ func (k msgServer) Vote(goCtx context.Context, msg *v1.MsgVote) (*v1.MsgVoteResp } // VoteWeighted implements the MsgServer.VoteWeighted method. -func (k msgServer) VoteWeighted(goCtx context.Context, msg *v1.MsgVoteWeighted) (*v1.MsgVoteWeightedResponse, error) { +func (k msgServer) VoteWeighted(goCtx context.Context, msg *v1.MsgVoteWeighted) (meterResult *v1.MsgVoteWeightedResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "VoteWeighted")(&err) + accAddr, accErr := k.authKeeper.AddressCodec().StringToBytes(msg.Voter) if accErr != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid voter address: %s", accErr) @@ -228,8 +238,7 @@ func (k msgServer) VoteWeighted(goCtx context.Context, msg *v1.MsgVoteWeighted) return nil, errors.Wrap(govtypes.ErrInvalidVote, "total weight lower than 1.00") } - ctx := sdk.UnwrapSDKContext(goCtx) - err := k.Keeper.AddVote(ctx, msg.ProposalId, accAddr, msg.Options, msg.Metadata) + err = k.Keeper.AddVote(sdkCtx, msg.ProposalId, accAddr, msg.Options, msg.Metadata) if err != nil { return nil, err } @@ -238,24 +247,26 @@ func (k msgServer) VoteWeighted(goCtx context.Context, msg *v1.MsgVoteWeighted) } // Deposit implements the MsgServer.Deposit method. -func (k msgServer) Deposit(goCtx context.Context, msg *v1.MsgDeposit) (*v1.MsgDepositResponse, error) { +func (k msgServer) Deposit(goCtx context.Context, msg *v1.MsgDeposit) (meterResult *v1.MsgDepositResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "Deposit")(&err) + accAddr, err := k.authKeeper.AddressCodec().StringToBytes(msg.Depositor) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid depositor address: %s", err) } - if err := validateDeposit(msg.Amount); err != nil { + if err = validateDeposit(msg.Amount); err != nil { return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) - votingStarted, err := k.Keeper.AddDeposit(ctx, msg.ProposalId, accAddr, msg.Amount) + votingStarted, err := k.Keeper.AddDeposit(sdkCtx, msg.ProposalId, accAddr, msg.Amount) if err != nil { return nil, err } if votingStarted { - ctx.EventManager().EmitEvent( + sdkCtx.EventManager().EmitEvent( sdk.NewEvent( govtypes.EventTypeProposalDeposit, sdk.NewAttribute(govtypes.AttributeKeyVotingPeriodStart, fmt.Sprintf("%d", msg.ProposalId)), @@ -267,17 +278,19 @@ func (k msgServer) Deposit(goCtx context.Context, msg *v1.MsgDeposit) (*v1.MsgDe } // UpdateParams implements the MsgServer.UpdateParams method. -func (k msgServer) UpdateParams(goCtx context.Context, msg *v1.MsgUpdateParams) (*v1.MsgUpdateParamsResponse, error) { +func (k msgServer) UpdateParams(goCtx context.Context, msg *v1.MsgUpdateParams) (meterResult *v1.MsgUpdateParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "UpdateParams")(&err) + if k.authority != msg.Authority { return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.authority, msg.Authority) } - if err := msg.Params.ValidateBasic(); err != nil { + if err = msg.Params.ValidateBasic(); err != nil { return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) - if err := k.Params.Set(ctx, msg.Params); err != nil { + if err = k.Params.Set(sdkCtx, msg.Params); err != nil { return nil, err } @@ -286,18 +299,22 @@ func (k msgServer) UpdateParams(goCtx context.Context, msg *v1.MsgUpdateParams) type legacyMsgServer struct { govAcct string + keeper *Keeper server v1.MsgServer } // NewLegacyMsgServerImpl returns an implementation of the v1beta1 legacy MsgServer interface. It wraps around // the current MsgServer -func NewLegacyMsgServerImpl(govAcct string, v1Server v1.MsgServer) v1beta1.MsgServer { - return &legacyMsgServer{govAcct: govAcct, server: v1Server} +func NewLegacyMsgServerImpl(govAcct string, keeper *Keeper, v1Server v1.MsgServer) v1beta1.MsgServer { + return &legacyMsgServer{govAcct: govAcct, keeper: keeper, server: v1Server} } var _ v1beta1.MsgServer = legacyMsgServer{} -func (k legacyMsgServer) SubmitProposal(goCtx context.Context, msg *v1beta1.MsgSubmitProposal) (*v1beta1.MsgSubmitProposalResponse, error) { +func (k legacyMsgServer) SubmitProposal(goCtx context.Context, msg *v1beta1.MsgSubmitProposal) (meterResult *v1beta1.MsgSubmitProposalResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.keeper.Meter(goCtx).FuncTiming(&sdkCtx, "SubmitProposal")(&err) + content := msg.GetContent() if content == nil { return nil, errors.Wrap(govtypes.ErrInvalidProposalContent, "missing content") @@ -305,7 +322,7 @@ func (k legacyMsgServer) SubmitProposal(goCtx context.Context, msg *v1beta1.MsgS if !v1beta1.IsValidProposalType(content.ProposalType()) { return nil, errors.Wrap(govtypes.ErrInvalidProposalType, content.ProposalType()) } - if err := content.ValidateBasic(); err != nil { + if err = content.ValidateBasic(); err != nil { return nil, err } @@ -327,7 +344,7 @@ func (k legacyMsgServer) SubmitProposal(goCtx context.Context, msg *v1beta1.MsgS return nil, err } - resp, err := k.server.SubmitProposal(goCtx, proposal) + resp, err := k.server.SubmitProposal(sdkCtx, proposal) if err != nil { return nil, err } @@ -335,8 +352,11 @@ func (k legacyMsgServer) SubmitProposal(goCtx context.Context, msg *v1beta1.MsgS return &v1beta1.MsgSubmitProposalResponse{ProposalId: resp.ProposalId}, nil } -func (k legacyMsgServer) Vote(goCtx context.Context, msg *v1beta1.MsgVote) (*v1beta1.MsgVoteResponse, error) { - _, err := k.server.Vote(goCtx, &v1.MsgVote{ +func (k legacyMsgServer) Vote(goCtx context.Context, msg *v1beta1.MsgVote) (meterResult *v1beta1.MsgVoteResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.keeper.Meter(goCtx).FuncTiming(&sdkCtx, "Vote")(&err) + + _, err = k.server.Vote(sdkCtx, &v1.MsgVote{ ProposalId: msg.ProposalId, Voter: msg.Voter, Option: v1.VoteOption(msg.Option), @@ -347,7 +367,10 @@ func (k legacyMsgServer) Vote(goCtx context.Context, msg *v1beta1.MsgVote) (*v1b return &v1beta1.MsgVoteResponse{}, nil } -func (k legacyMsgServer) VoteWeighted(goCtx context.Context, msg *v1beta1.MsgVoteWeighted) (*v1beta1.MsgVoteWeightedResponse, error) { +func (k legacyMsgServer) VoteWeighted(goCtx context.Context, msg *v1beta1.MsgVoteWeighted) (meterResult *v1beta1.MsgVoteWeightedResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.keeper.Meter(goCtx).FuncTiming(&sdkCtx, "VoteWeighted")(&err) + opts := make([]*v1.WeightedVoteOption, len(msg.Options)) for idx, opt := range msg.Options { opts[idx] = &v1.WeightedVoteOption{ @@ -356,7 +379,7 @@ func (k legacyMsgServer) VoteWeighted(goCtx context.Context, msg *v1beta1.MsgVot } } - _, err := k.server.VoteWeighted(goCtx, &v1.MsgVoteWeighted{ + _, err = k.server.VoteWeighted(sdkCtx, &v1.MsgVoteWeighted{ ProposalId: msg.ProposalId, Voter: msg.Voter, Options: opts, @@ -367,8 +390,11 @@ func (k legacyMsgServer) VoteWeighted(goCtx context.Context, msg *v1beta1.MsgVot return &v1beta1.MsgVoteWeightedResponse{}, nil } -func (k legacyMsgServer) Deposit(goCtx context.Context, msg *v1beta1.MsgDeposit) (*v1beta1.MsgDepositResponse, error) { - _, err := k.server.Deposit(goCtx, &v1.MsgDeposit{ +func (k legacyMsgServer) Deposit(goCtx context.Context, msg *v1beta1.MsgDeposit) (meterResult *v1beta1.MsgDepositResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.keeper.Meter(goCtx).FuncTiming(&sdkCtx, "Deposit")(&err) + + _, err = k.server.Deposit(sdkCtx, &v1.MsgDeposit{ ProposalId: msg.ProposalId, Depositor: msg.Depositor, Amount: msg.Amount, diff --git a/x/gov/keeper/proposal.go b/x/gov/keeper/proposal.go index a461c369ea05..b5e3040e6ec0 100644 --- a/x/gov/keeper/proposal.go +++ b/x/gov/keeper/proposal.go @@ -16,9 +16,10 @@ import ( ) // SubmitProposal creates a new proposal given an array of messages -func (keeper Keeper) SubmitProposal(ctx context.Context, messages []sdk.Msg, metadata, title, summary string, proposer sdk.AccAddress, expedited bool) (v1.Proposal, error) { +func (keeper Keeper) SubmitProposal(ctx context.Context, messages []sdk.Msg, metadata, title, summary string, proposer sdk.AccAddress, expedited bool) (meterResult v1.Proposal, err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) - err := keeper.assertMetadataLength(metadata) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "SubmitProposal")(&err) + err = keeper.assertMetadataLength(metadata) if err != nil { return v1.Proposal{}, err } @@ -45,7 +46,7 @@ func (keeper Keeper) SubmitProposal(ctx context.Context, messages []sdk.Msg, met // perform a basic validation of the message if m, ok := msg.(sdk.HasValidateBasic); ok { - if err := m.ValidateBasic(); err != nil { + if err = m.ValidateBasic(); err != nil { return v1.Proposal{}, errorsmod.Wrap(types.ErrInvalidProposalMsg, err.Error()) } } @@ -59,7 +60,7 @@ func (keeper Keeper) SubmitProposal(ctx context.Context, messages []sdk.Msg, met } // assert that the governance module account is the only signer of the messages - if !bytes.Equal(signers[0], keeper.GetGovernanceAccount(ctx).GetAddress()) { + if !bytes.Equal(signers[0], keeper.GetGovernanceAccount(sdkCtx).GetAddress()) { return v1.Proposal{}, errorsmod.Wrapf(types.ErrInvalidSigner, sdk.AccAddress(signers[0]).String()) } @@ -86,12 +87,12 @@ func (keeper Keeper) SubmitProposal(ctx context.Context, messages []sdk.Msg, met } - proposalID, err := keeper.ProposalID.Next(ctx) + proposalID, err := keeper.ProposalID.Next(sdkCtx) if err != nil { return v1.Proposal{}, err } - params, err := keeper.Params.Get(ctx) + params, err := keeper.Params.Get(sdkCtx) if err != nil { return v1.Proposal{}, err } @@ -104,17 +105,17 @@ func (keeper Keeper) SubmitProposal(ctx context.Context, messages []sdk.Msg, met return v1.Proposal{}, err } - err = keeper.SetProposal(ctx, proposal) + err = keeper.SetProposal(sdkCtx, proposal) if err != nil { return v1.Proposal{}, err } - err = keeper.InactiveProposalsQueue.Set(ctx, collections.Join(*proposal.DepositEndTime, proposalID), proposalID) + err = keeper.InactiveProposalsQueue.Set(sdkCtx, collections.Join(*proposal.DepositEndTime, proposalID), proposalID) if err != nil { return v1.Proposal{}, err } // called right after a proposal is submitted - err = keeper.Hooks().AfterProposalSubmission(ctx, proposalID) + err = keeper.Hooks().AfterProposalSubmission(sdkCtx, proposalID) if err != nil { return v1.Proposal{}, err } @@ -132,9 +133,10 @@ func (keeper Keeper) SubmitProposal(ctx context.Context, messages []sdk.Msg, met } // CancelProposal will cancel proposal before the voting period ends -func (keeper Keeper) CancelProposal(ctx context.Context, proposalID uint64, proposer string) error { +func (keeper Keeper) CancelProposal(ctx context.Context, proposalID uint64, proposer string) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) - proposal, err := keeper.Proposals.Get(ctx, proposalID) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "CancelProposal")(&err) + proposal, err := keeper.Proposals.Get(sdkCtx, proposalID) if err != nil { return err } @@ -162,29 +164,29 @@ func (keeper Keeper) CancelProposal(ctx context.Context, proposalID uint64, prop // burn the (deposits * proposal_cancel_rate) amount or sent to cancellation destination address. // and deposits * (1 - proposal_cancel_rate) will be sent to depositors. - params, err := keeper.Params.Get(ctx) + params, err := keeper.Params.Get(sdkCtx) if err != nil { return err } - err = keeper.ChargeDeposit(ctx, proposal.Id, params.ProposalCancelDest, params.ProposalCancelRatio) + err = keeper.ChargeDeposit(sdkCtx, proposal.Id, params.ProposalCancelDest, params.ProposalCancelRatio) if err != nil { return err } if proposal.VotingStartTime != nil { - err = keeper.deleteVotes(ctx, proposal.Id) + err = keeper.deleteVotes(sdkCtx, proposal.Id) if err != nil { return err } } - err = keeper.DeleteProposal(ctx, proposal.Id) + err = keeper.DeleteProposal(sdkCtx, proposal.Id) if err != nil { return err } - keeper.Logger(ctx).Info( + keeper.Logger(sdkCtx).Info( "proposal is canceled by proposer", "proposal", proposal.Id, "proposer", proposal.Proposer, @@ -194,57 +196,64 @@ func (keeper Keeper) CancelProposal(ctx context.Context, proposalID uint64, prop } // SetProposal sets a proposal to store. -func (keeper Keeper) SetProposal(ctx context.Context, proposal v1.Proposal) error { +func (keeper Keeper) SetProposal(ctx context.Context, proposal v1.Proposal) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "SetProposal")(&err) + if proposal.Status == v1.StatusVotingPeriod { - err := keeper.VotingPeriodProposals.Set(ctx, proposal.Id, []byte{1}) + err = keeper.VotingPeriodProposals.Set(sdkCtx, proposal.Id, []byte{1}) if err != nil { return err } } else { - err := keeper.VotingPeriodProposals.Remove(ctx, proposal.Id) + err = keeper.VotingPeriodProposals.Remove(sdkCtx, proposal.Id) if err != nil { return err } } - return keeper.Proposals.Set(ctx, proposal.Id, proposal) + return keeper.Proposals.Set(sdkCtx, proposal.Id, proposal) } // DeleteProposal deletes a proposal from store. -func (keeper Keeper) DeleteProposal(ctx context.Context, proposalID uint64) error { - proposal, err := keeper.Proposals.Get(ctx, proposalID) +func (keeper Keeper) DeleteProposal(ctx context.Context, proposalID uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "DeleteProposal")(&err) + + proposal, err := keeper.Proposals.Get(sdkCtx, proposalID) if err != nil { return err } if proposal.DepositEndTime != nil { - err := keeper.InactiveProposalsQueue.Remove(ctx, collections.Join(*proposal.DepositEndTime, proposalID)) + err = keeper.InactiveProposalsQueue.Remove(sdkCtx, collections.Join(*proposal.DepositEndTime, proposalID)) if err != nil { return err } } if proposal.VotingEndTime != nil { - err := keeper.ActiveProposalsQueue.Remove(ctx, collections.Join(*proposal.VotingEndTime, proposalID)) + err = keeper.ActiveProposalsQueue.Remove(sdkCtx, collections.Join(*proposal.VotingEndTime, proposalID)) if err != nil { return err } - err = keeper.VotingPeriodProposals.Remove(ctx, proposalID) + err = keeper.VotingPeriodProposals.Remove(sdkCtx, proposalID) if err != nil { return err } } - return keeper.Proposals.Remove(ctx, proposalID) + return keeper.Proposals.Remove(sdkCtx, proposalID) } // ActivateVotingPeriod activates the voting period of a proposal -func (keeper Keeper) ActivateVotingPeriod(ctx context.Context, proposal v1.Proposal) error { +func (keeper Keeper) ActivateVotingPeriod(ctx context.Context, proposal v1.Proposal) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "ActivateVotingPeriod")(&err) startTime := sdkCtx.BlockHeader().Time proposal.VotingStartTime = &startTime var votingPeriod *time.Duration - params, err := keeper.Params.Get(ctx) + params, err := keeper.Params.Get(sdkCtx) if err != nil { return err } @@ -257,15 +266,15 @@ func (keeper Keeper) ActivateVotingPeriod(ctx context.Context, proposal v1.Propo endTime := proposal.VotingStartTime.Add(*votingPeriod) proposal.VotingEndTime = &endTime proposal.Status = v1.StatusVotingPeriod - err = keeper.SetProposal(ctx, proposal) + err = keeper.SetProposal(sdkCtx, proposal) if err != nil { return err } - err = keeper.InactiveProposalsQueue.Remove(ctx, collections.Join(*proposal.DepositEndTime, proposal.Id)) + err = keeper.InactiveProposalsQueue.Remove(sdkCtx, collections.Join(*proposal.DepositEndTime, proposal.Id)) if err != nil { return err } - return keeper.ActiveProposalsQueue.Set(ctx, collections.Join(*proposal.VotingEndTime, proposal.Id), proposal.Id) + return keeper.ActiveProposalsQueue.Set(sdkCtx, collections.Join(*proposal.VotingEndTime, proposal.Id), proposal.Id) } diff --git a/x/gov/keeper/tally.go b/x/gov/keeper/tally.go index fa69ca381f91..18d634cfc6e4 100644 --- a/x/gov/keeper/tally.go +++ b/x/gov/keeper/tally.go @@ -16,6 +16,9 @@ import ( // Tally iterates over the votes and updates the tally of a proposal based on the voting power of the // voters func (keeper Keeper) Tally(ctx context.Context, proposal v1.Proposal) (passes, burnDeposits bool, tallyResults v1.TallyResult, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "Tally")(&err) + results := make(map[v1.VoteOption]math.LegacyDec) results[v1.OptionYes] = math.LegacyZeroDec() results[v1.OptionAbstain] = math.LegacyZeroDec() @@ -26,7 +29,7 @@ func (keeper Keeper) Tally(ctx context.Context, proposal v1.Proposal) (passes, b currValidators := make(map[string]v1.ValidatorGovInfo) // fetch all the bonded validators, insert them into currValidators - err = keeper.sk.IterateBondedValidatorsByPower(ctx, func(index int64, validator stakingtypes.ValidatorI) (stop bool) { + err = keeper.sk.IterateBondedValidatorsByPower(sdkCtx, func(index int64, validator stakingtypes.ValidatorI) (stop bool) { valBz, err := keeper.sk.ValidatorAddressCodec().StringToBytes(validator.GetOperator()) if err != nil { return false @@ -46,7 +49,7 @@ func (keeper Keeper) Tally(ctx context.Context, proposal v1.Proposal) (passes, b } rng := collections.NewPrefixedPairRange[uint64, sdk.AccAddress](proposal.Id) - err = keeper.Votes.Walk(ctx, rng, func(key collections.Pair[uint64, sdk.AccAddress], vote v1.Vote) (bool, error) { + err = keeper.Votes.Walk(sdkCtx, rng, func(key collections.Pair[uint64, sdk.AccAddress], vote v1.Vote) (bool, error) { // if validator, just record it in the map voter, err := keeper.authKeeper.AddressCodec().StringToBytes(vote.Voter) if err != nil { @@ -63,7 +66,7 @@ func (keeper Keeper) Tally(ctx context.Context, proposal v1.Proposal) (passes, b } // iterate over all delegations from voter, deduct from any delegated-to validators - err = keeper.sk.IterateDelegations(ctx, voter, func(index int64, delegation stakingtypes.DelegationI) (stop bool) { + err = keeper.sk.IterateDelegations(sdkCtx, voter, func(index int64, delegation stakingtypes.DelegationI) (stop bool) { valAddrStr := delegation.GetValidatorAddr() if val, ok := currValidators[valAddrStr]; ok { @@ -89,7 +92,7 @@ func (keeper Keeper) Tally(ctx context.Context, proposal v1.Proposal) (passes, b return false, err } - return false, keeper.Votes.Remove(ctx, collections.Join(vote.ProposalId, sdk.AccAddress(voter))) + return false, keeper.Votes.Remove(sdkCtx, collections.Join(vote.ProposalId, sdk.AccAddress(voter))) }) if err != nil { @@ -113,7 +116,7 @@ func (keeper Keeper) Tally(ctx context.Context, proposal v1.Proposal) (passes, b totalVotingPower = totalVotingPower.Add(votingPower) } - params, err := keeper.Params.Get(ctx) + params, err := keeper.Params.Get(sdkCtx) if err != nil { return false, false, tallyResults, err } @@ -121,7 +124,7 @@ func (keeper Keeper) Tally(ctx context.Context, proposal v1.Proposal) (passes, b // TODO: Upgrade the spec to cover all of these cases & remove pseudocode. // If there is no staked coins, the proposal fails - totalBonded, err := keeper.sk.TotalBondedTokens(ctx) + totalBonded, err := keeper.sk.TotalBondedTokens(sdkCtx) if err != nil { return false, false, tallyResults, err } diff --git a/x/gov/keeper/vote.go b/x/gov/keeper/vote.go index 466fe4c2a27a..c0ba8ee97740 100644 --- a/x/gov/keeper/vote.go +++ b/x/gov/keeper/vote.go @@ -13,9 +13,12 @@ import ( ) // AddVote adds a vote on a specific proposal -func (keeper Keeper) AddVote(ctx context.Context, proposalID uint64, voterAddr sdk.AccAddress, options v1.WeightedVoteOptions, metadata string) error { +func (keeper Keeper) AddVote(ctx context.Context, proposalID uint64, voterAddr sdk.AccAddress, options v1.WeightedVoteOptions, metadata string) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "AddVote")(&err) + // Check if proposal is in voting period. - inVotingPeriod, err := keeper.VotingPeriodProposals.Has(ctx, proposalID) + inVotingPeriod, err := keeper.VotingPeriodProposals.Has(sdkCtx, proposalID) if err != nil { return err } @@ -36,18 +39,16 @@ func (keeper Keeper) AddVote(ctx context.Context, proposalID uint64, voterAddr s } vote := v1.NewVote(proposalID, voterAddr, options, metadata) - err = keeper.Votes.Set(ctx, collections.Join(proposalID, voterAddr), vote) + err = keeper.Votes.Set(sdkCtx, collections.Join(proposalID, voterAddr), vote) if err != nil { return err } // called after a vote on a proposal is cast - err = keeper.Hooks().AfterProposalVote(ctx, proposalID, voterAddr) + err = keeper.Hooks().AfterProposalVote(sdkCtx, proposalID, voterAddr) if err != nil { return err } - - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeProposalVote, @@ -61,9 +62,12 @@ func (keeper Keeper) AddVote(ctx context.Context, proposalID uint64, voterAddr s } // deleteVotes deletes all the votes from a given proposalID. -func (keeper Keeper) deleteVotes(ctx context.Context, proposalID uint64) error { +func (keeper Keeper) deleteVotes(ctx context.Context, proposalID uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer keeper.Meter(ctx).FuncTiming(&sdkCtx, "deleteVotes")(&err) + rng := collections.NewPrefixedPairRange[uint64, sdk.AccAddress](proposalID) - err := keeper.Votes.Clear(ctx, rng) + err = keeper.Votes.Clear(sdkCtx, rng) if err != nil { return err } diff --git a/x/gov/module.go b/x/gov/module.go index dc84dd9bcad1..5e04d813468f 100644 --- a/x/gov/module.go +++ b/x/gov/module.go @@ -269,7 +269,7 @@ func (am AppModule) RegisterInvariants(ir sdk.InvariantRegistry) { // RegisterServices registers module services. func (am AppModule) RegisterServices(cfg module.Configurator) { msgServer := keeper.NewMsgServerImpl(am.keeper) - v1beta1.RegisterMsgServer(cfg.MsgServer(), keeper.NewLegacyMsgServerImpl(am.accountKeeper.GetModuleAddress(govtypes.ModuleName).String(), msgServer)) + v1beta1.RegisterMsgServer(cfg.MsgServer(), keeper.NewLegacyMsgServerImpl(am.accountKeeper.GetModuleAddress(govtypes.ModuleName).String(), am.keeper, msgServer)) v1.RegisterMsgServer(cfg.MsgServer(), msgServer) legacyQueryServer := keeper.NewLegacyQueryServer(am.keeper) diff --git a/x/group/keeper/genesis.go b/x/group/keeper/genesis.go index 457fd461f7da..387f85a067e1 100644 --- a/x/group/keeper/genesis.go +++ b/x/group/keeper/genesis.go @@ -14,30 +14,33 @@ import ( // InitGenesis initializes the group module's genesis state. func (k Keeper) InitGenesis(ctx types.Context, cdc codec.JSONCodec, data json.RawMessage) []abci.ValidatorUpdate { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "InitGenesis")(&err) + var genesisState group.GenesisState cdc.MustUnmarshalJSON(data, &genesisState) - if err := k.groupTable.Import(ctx.KVStore(k.key), genesisState.Groups, genesisState.GroupSeq); err != nil { + if err = k.groupTable.Import(ctx.KVStore(k.key), genesisState.Groups, genesisState.GroupSeq); err != nil { panic(errors.Wrap(err, "groups")) } - if err := k.groupMemberTable.Import(ctx.KVStore(k.key), genesisState.GroupMembers, 0); err != nil { + if err = k.groupMemberTable.Import(ctx.KVStore(k.key), genesisState.GroupMembers, 0); err != nil { panic(errors.Wrap(err, "group members")) } - if err := k.groupPolicyTable.Import(ctx.KVStore(k.key), genesisState.GroupPolicies, 0); err != nil { + if err = k.groupPolicyTable.Import(ctx.KVStore(k.key), genesisState.GroupPolicies, 0); err != nil { panic(errors.Wrap(err, "group policies")) } - if err := k.groupPolicySeq.InitVal(ctx.KVStore(k.key), genesisState.GroupPolicySeq); err != nil { + if err = k.groupPolicySeq.InitVal(ctx.KVStore(k.key), genesisState.GroupPolicySeq); err != nil { panic(errors.Wrap(err, "group policy account seq")) } - if err := k.proposalTable.Import(ctx.KVStore(k.key), genesisState.Proposals, genesisState.ProposalSeq); err != nil { + if err = k.proposalTable.Import(ctx.KVStore(k.key), genesisState.Proposals, genesisState.ProposalSeq); err != nil { panic(errors.Wrap(err, "proposals")) } - if err := k.voteTable.Import(ctx.KVStore(k.key), genesisState.Votes, 0); err != nil { + if err = k.voteTable.Import(ctx.KVStore(k.key), genesisState.Votes, 0); err != nil { panic(errors.Wrap(err, "votes")) } @@ -46,6 +49,9 @@ func (k Keeper) InitGenesis(ctx types.Context, cdc codec.JSONCodec, data json.Ra // ExportGenesis returns the group module's exported genesis. func (k Keeper) ExportGenesis(ctx types.Context, _ codec.JSONCodec) *group.GenesisState { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "ExportGenesis")(&err) + genesisState := group.NewGenesisState() var groups []*group.GroupInfo diff --git a/x/group/keeper/grpc_query.go b/x/group/keeper/grpc_query.go index 2c036bdedf4a..fe58878afc6f 100644 --- a/x/group/keeper/grpc_query.go +++ b/x/group/keeper/grpc_query.go @@ -19,10 +19,12 @@ import ( var _ group.QueryServer = Keeper{} // GroupInfo queries info about a group. -func (k Keeper) GroupInfo(goCtx context.Context, request *group.QueryGroupInfoRequest) (*group.QueryGroupInfoResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) GroupInfo(goCtx context.Context, request *group.QueryGroupInfoRequest) (meterResult *group.QueryGroupInfoResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "GroupInfo")(&err) + groupID := request.GroupId - groupInfo, err := k.getGroupInfo(ctx, groupID) + groupInfo, err := k.getGroupInfo(sdkCtx, groupID) if err != nil { return nil, errorsmod.Wrap(err, "group") } @@ -31,21 +33,25 @@ func (k Keeper) GroupInfo(goCtx context.Context, request *group.QueryGroupInfoRe } // getGroupInfo gets the group info of the given group id. -func (k Keeper) getGroupInfo(ctx sdk.Context, id uint64) (group.GroupInfo, error) { +func (k Keeper) getGroupInfo(ctx sdk.Context, id uint64) (meterResult group.GroupInfo, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getGroupInfo")(&err) + var obj group.GroupInfo - _, err := k.groupTable.GetOne(ctx.KVStore(k.key), id, &obj) + _, err = k.groupTable.GetOne(ctx.KVStore(k.key), id, &obj) return obj, err } // GroupPolicyInfo queries info about a group policy. -func (k Keeper) GroupPolicyInfo(goCtx context.Context, request *group.QueryGroupPolicyInfoRequest) (*group.QueryGroupPolicyInfoResponse, error) { - _, err := k.accKeeper.AddressCodec().StringToBytes(request.Address) +func (k Keeper) GroupPolicyInfo(goCtx context.Context, request *group.QueryGroupPolicyInfoRequest) (meterResult *group.QueryGroupPolicyInfoResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "GroupPolicyInfo")(&err) + + _, err = k.accKeeper.AddressCodec().StringToBytes(request.Address) if err != nil { return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) - groupPolicyInfo, err := k.getGroupPolicyInfo(ctx, request.Address) + groupPolicyInfo, err := k.getGroupPolicyInfo(sdkCtx, request.Address) if err != nil { return nil, errorsmod.Wrap(err, "group policy") } @@ -54,16 +60,20 @@ func (k Keeper) GroupPolicyInfo(goCtx context.Context, request *group.QueryGroup } // getGroupPolicyInfo gets the group policy info of the given account address. -func (k Keeper) getGroupPolicyInfo(ctx sdk.Context, accountAddress string) (group.GroupPolicyInfo, error) { +func (k Keeper) getGroupPolicyInfo(ctx sdk.Context, accountAddress string) (meterResult group.GroupPolicyInfo, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getGroupPolicyInfo")(&err) + var obj group.GroupPolicyInfo return obj, k.groupPolicyTable.GetOne(ctx.KVStore(k.key), orm.PrimaryKey(&group.GroupPolicyInfo{Address: accountAddress}), &obj) } // GroupMembers queries all members of a group. -func (k Keeper) GroupMembers(goCtx context.Context, request *group.QueryGroupMembersRequest) (*group.QueryGroupMembersResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) GroupMembers(goCtx context.Context, request *group.QueryGroupMembersRequest) (meterResult *group.QueryGroupMembersResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "GroupMembers")(&err) + groupID := request.GroupId - it, err := k.getGroupMembers(ctx, groupID, request.Pagination) + it, err := k.getGroupMembers(sdkCtx, groupID, request.Pagination) if err != nil { return nil, err } @@ -81,18 +91,22 @@ func (k Keeper) GroupMembers(goCtx context.Context, request *group.QueryGroupMem } // getGroupMembers returns an iterator for the given group id and page request. -func (k Keeper) getGroupMembers(ctx sdk.Context, id uint64, pageRequest *query.PageRequest) (orm.Iterator, error) { +func (k Keeper) getGroupMembers(ctx sdk.Context, id uint64, pageRequest *query.PageRequest) (meterResult orm.Iterator, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getGroupMembers")(&err) + return k.groupMemberByGroupIndex.GetPaginated(ctx.KVStore(k.key), id, pageRequest) } // GroupsByAdmin queries all groups where a given address is admin. -func (k Keeper) GroupsByAdmin(goCtx context.Context, request *group.QueryGroupsByAdminRequest) (*group.QueryGroupsByAdminResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) GroupsByAdmin(goCtx context.Context, request *group.QueryGroupsByAdminRequest) (meterResult *group.QueryGroupsByAdminResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "GroupsByAdmin")(&err) + addr, err := k.accKeeper.AddressCodec().StringToBytes(request.Admin) if err != nil { return nil, err } - it, err := k.getGroupsByAdmin(ctx, addr, request.Pagination) + it, err := k.getGroupsByAdmin(sdkCtx, addr, request.Pagination) if err != nil { return nil, err } @@ -110,15 +124,19 @@ func (k Keeper) GroupsByAdmin(goCtx context.Context, request *group.QueryGroupsB } // getGroupsByAdmin returns an iterator for the given admin account address and page request. -func (k Keeper) getGroupsByAdmin(ctx sdk.Context, admin sdk.AccAddress, pageRequest *query.PageRequest) (orm.Iterator, error) { +func (k Keeper) getGroupsByAdmin(ctx sdk.Context, admin sdk.AccAddress, pageRequest *query.PageRequest) (meterResult orm.Iterator, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getGroupsByAdmin")(&err) + return k.groupByAdminIndex.GetPaginated(ctx.KVStore(k.key), admin.Bytes(), pageRequest) } // GroupPoliciesByGroup queries all groups policies of a given group. -func (k Keeper) GroupPoliciesByGroup(goCtx context.Context, request *group.QueryGroupPoliciesByGroupRequest) (*group.QueryGroupPoliciesByGroupResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) GroupPoliciesByGroup(goCtx context.Context, request *group.QueryGroupPoliciesByGroupRequest) (meterResult *group.QueryGroupPoliciesByGroupResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "GroupPoliciesByGroup")(&err) + groupID := request.GroupId - it, err := k.getGroupPoliciesByGroup(ctx, groupID, request.Pagination) + it, err := k.getGroupPoliciesByGroup(sdkCtx, groupID, request.Pagination) if err != nil { return nil, err } @@ -136,19 +154,23 @@ func (k Keeper) GroupPoliciesByGroup(goCtx context.Context, request *group.Query } // getGroupPoliciesByGroup returns an iterator for the given group id and page request. -func (k Keeper) getGroupPoliciesByGroup(ctx sdk.Context, id uint64, pageRequest *query.PageRequest) (orm.Iterator, error) { +func (k Keeper) getGroupPoliciesByGroup(ctx sdk.Context, id uint64, pageRequest *query.PageRequest) (meterResult orm.Iterator, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getGroupPoliciesByGroup")(&err) + return k.groupPolicyByGroupIndex.GetPaginated(ctx.KVStore(k.key), id, pageRequest) } // GroupPoliciesByAdmin queries all groups policies where a given address is // admin. -func (k Keeper) GroupPoliciesByAdmin(goCtx context.Context, request *group.QueryGroupPoliciesByAdminRequest) (*group.QueryGroupPoliciesByAdminResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) GroupPoliciesByAdmin(goCtx context.Context, request *group.QueryGroupPoliciesByAdminRequest) (meterResult *group.QueryGroupPoliciesByAdminResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "GroupPoliciesByAdmin")(&err) + addr, err := k.accKeeper.AddressCodec().StringToBytes(request.Admin) if err != nil { return nil, err } - it, err := k.getGroupPoliciesByAdmin(ctx, addr, request.Pagination) + it, err := k.getGroupPoliciesByAdmin(sdkCtx, addr, request.Pagination) if err != nil { return nil, err } @@ -166,15 +188,19 @@ func (k Keeper) GroupPoliciesByAdmin(goCtx context.Context, request *group.Query } // getGroupPoliciesByAdmin returns an iterator for the given admin account address and page request. -func (k Keeper) getGroupPoliciesByAdmin(ctx sdk.Context, admin sdk.AccAddress, pageRequest *query.PageRequest) (orm.Iterator, error) { +func (k Keeper) getGroupPoliciesByAdmin(ctx sdk.Context, admin sdk.AccAddress, pageRequest *query.PageRequest) (meterResult orm.Iterator, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getGroupPoliciesByAdmin")(&err) + return k.groupPolicyByAdminIndex.GetPaginated(ctx.KVStore(k.key), admin.Bytes(), pageRequest) } // Proposal queries a proposal. -func (k Keeper) Proposal(goCtx context.Context, request *group.QueryProposalRequest) (*group.QueryProposalResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) Proposal(goCtx context.Context, request *group.QueryProposalRequest) (meterResult *group.QueryProposalResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Proposal")(&err) + proposalID := request.ProposalId - proposal, err := k.getProposal(ctx, proposalID) + proposal, err := k.getProposal(sdkCtx, proposalID) if err != nil { return nil, err } @@ -183,13 +209,15 @@ func (k Keeper) Proposal(goCtx context.Context, request *group.QueryProposalRequ } // ProposalsByGroupPolicy queries all proposals of a group policy. -func (k Keeper) ProposalsByGroupPolicy(goCtx context.Context, request *group.QueryProposalsByGroupPolicyRequest) (*group.QueryProposalsByGroupPolicyResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) ProposalsByGroupPolicy(goCtx context.Context, request *group.QueryProposalsByGroupPolicyRequest) (meterResult *group.QueryProposalsByGroupPolicyResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "ProposalsByGroupPolicy")(&err) + addr, err := k.accKeeper.AddressCodec().StringToBytes(request.Address) if err != nil { return nil, err } - it, err := k.getProposalsByGroupPolicy(ctx, addr, request.Pagination) + it, err := k.getProposalsByGroupPolicy(sdkCtx, addr, request.Pagination) if err != nil { return nil, err } @@ -207,12 +235,16 @@ func (k Keeper) ProposalsByGroupPolicy(goCtx context.Context, request *group.Que } // getProposalsByGroupPolicy returns an iterator for the given account address and page request. -func (k Keeper) getProposalsByGroupPolicy(ctx sdk.Context, account sdk.AccAddress, pageRequest *query.PageRequest) (orm.Iterator, error) { +func (k Keeper) getProposalsByGroupPolicy(ctx sdk.Context, account sdk.AccAddress, pageRequest *query.PageRequest) (meterResult orm.Iterator, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getProposalsByGroupPolicy")(&err) + return k.proposalByGroupPolicyIndex.GetPaginated(ctx.KVStore(k.key), account.Bytes(), pageRequest) } // getProposal gets the proposal info of the given proposal id. -func (k Keeper) getProposal(ctx sdk.Context, proposalID uint64) (group.Proposal, error) { +func (k Keeper) getProposal(ctx sdk.Context, proposalID uint64) (meterResult group.Proposal, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getProposal")(&err) + var p group.Proposal if _, err := k.proposalTable.GetOne(ctx.KVStore(k.key), proposalID, &p); err != nil { return group.Proposal{}, errorsmod.Wrap(err, "load proposal") @@ -221,14 +253,16 @@ func (k Keeper) getProposal(ctx sdk.Context, proposalID uint64) (group.Proposal, } // VoteByProposalVoter queries a vote given a voter and a proposal ID. -func (k Keeper) VoteByProposalVoter(goCtx context.Context, request *group.QueryVoteByProposalVoterRequest) (*group.QueryVoteByProposalVoterResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) VoteByProposalVoter(goCtx context.Context, request *group.QueryVoteByProposalVoterRequest) (meterResult *group.QueryVoteByProposalVoterResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "VoteByProposalVoter")(&err) + addr, err := k.accKeeper.AddressCodec().StringToBytes(request.Voter) if err != nil { return nil, err } proposalID := request.ProposalId - vote, err := k.getVote(ctx, proposalID, addr) + vote, err := k.getVote(sdkCtx, proposalID, addr) if err != nil { return nil, err } @@ -238,10 +272,12 @@ func (k Keeper) VoteByProposalVoter(goCtx context.Context, request *group.QueryV } // VotesByProposal queries all votes on a proposal. -func (k Keeper) VotesByProposal(goCtx context.Context, request *group.QueryVotesByProposalRequest) (*group.QueryVotesByProposalResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) VotesByProposal(goCtx context.Context, request *group.QueryVotesByProposalRequest) (meterResult *group.QueryVotesByProposalResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "VotesByProposal")(&err) + proposalID := request.ProposalId - it, err := k.getVotesByProposal(ctx, proposalID, request.Pagination) + it, err := k.getVotesByProposal(sdkCtx, proposalID, request.Pagination) if err != nil { return nil, err } @@ -259,13 +295,15 @@ func (k Keeper) VotesByProposal(goCtx context.Context, request *group.QueryVotes } // VotesByVoter queries all votes of a voter. -func (k Keeper) VotesByVoter(goCtx context.Context, request *group.QueryVotesByVoterRequest) (*group.QueryVotesByVoterResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) VotesByVoter(goCtx context.Context, request *group.QueryVotesByVoterRequest) (meterResult *group.QueryVotesByVoterResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "VotesByVoter")(&err) + addr, err := k.accKeeper.AddressCodec().StringToBytes(request.Voter) if err != nil { return nil, err } - it, err := k.getVotesByVoter(ctx, addr, request.Pagination) + it, err := k.getVotesByVoter(sdkCtx, addr, request.Pagination) if err != nil { return nil, err } @@ -283,18 +321,20 @@ func (k Keeper) VotesByVoter(goCtx context.Context, request *group.QueryVotesByV } // GroupsByMember queries all groups where the given address is a member of. -func (k Keeper) GroupsByMember(goCtx context.Context, request *group.QueryGroupsByMemberRequest) (*group.QueryGroupsByMemberResponse, error) { +func (k Keeper) GroupsByMember(goCtx context.Context, request *group.QueryGroupsByMemberRequest) (meterResult *group.QueryGroupsByMemberResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "GroupsByMember")(&err) + if request == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - ctx := sdk.UnwrapSDKContext(goCtx) member, err := k.accKeeper.AddressCodec().StringToBytes(request.Address) if err != nil { return nil, err } - iter, err := k.groupMemberByMemberIndex.GetPaginated(ctx.KVStore(k.key), member, request.Pagination) + iter, err := k.groupMemberByMemberIndex.GetPaginated(sdkCtx.KVStore(k.key), member, request.Pagination) if err != nil { return nil, err } @@ -307,7 +347,7 @@ func (k Keeper) GroupsByMember(goCtx context.Context, request *group.QueryGroups var groups []*group.GroupInfo for _, gm := range members { - groupInfo, err := k.getGroupInfo(ctx, gm.GroupId) + groupInfo, err := k.getGroupInfo(sdkCtx, gm.GroupId) if err != nil { return nil, err } @@ -321,27 +361,35 @@ func (k Keeper) GroupsByMember(goCtx context.Context, request *group.QueryGroups } // getVote gets the vote info for the given proposal id and voter address. -func (k Keeper) getVote(ctx sdk.Context, proposalID uint64, voter sdk.AccAddress) (group.Vote, error) { +func (k Keeper) getVote(ctx sdk.Context, proposalID uint64, voter sdk.AccAddress) (meterResult group.Vote, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getVote")(&err) + var v group.Vote return v, k.voteTable.GetOne(ctx.KVStore(k.key), orm.PrimaryKey(&group.Vote{ProposalId: proposalID, Voter: voter.String()}), &v) } // getVotesByProposal returns an iterator for the given proposal id and page request. -func (k Keeper) getVotesByProposal(ctx sdk.Context, proposalID uint64, pageRequest *query.PageRequest) (orm.Iterator, error) { +func (k Keeper) getVotesByProposal(ctx sdk.Context, proposalID uint64, pageRequest *query.PageRequest) (meterResult orm.Iterator, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getVotesByProposal")(&err) + return k.voteByProposalIndex.GetPaginated(ctx.KVStore(k.key), proposalID, pageRequest) } // getVotesByVoter returns an iterator for the given voter address and page request. -func (k Keeper) getVotesByVoter(ctx sdk.Context, voter sdk.AccAddress, pageRequest *query.PageRequest) (orm.Iterator, error) { +func (k Keeper) getVotesByVoter(ctx sdk.Context, voter sdk.AccAddress, pageRequest *query.PageRequest) (meterResult orm.Iterator, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getVotesByVoter")(&err) + return k.voteByVoterIndex.GetPaginated(ctx.KVStore(k.key), voter.Bytes(), pageRequest) } // TallyResult computes the live tally result of a proposal. -func (k Keeper) TallyResult(goCtx context.Context, request *group.QueryTallyResultRequest) (*group.QueryTallyResultResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) TallyResult(goCtx context.Context, request *group.QueryTallyResultRequest) (meterResult *group.QueryTallyResultResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "TallyResult")(&err) + proposalID := request.ProposalId - proposal, err := k.getProposal(ctx, proposalID) + proposal, err := k.getProposal(sdkCtx, proposalID) if err != nil { return nil, err } @@ -351,11 +399,11 @@ func (k Keeper) TallyResult(goCtx context.Context, request *group.QueryTallyResu } var policyInfo group.GroupPolicyInfo - if policyInfo, err = k.getGroupPolicyInfo(ctx, proposal.GroupPolicyAddress); err != nil { + if policyInfo, err = k.getGroupPolicyInfo(sdkCtx, proposal.GroupPolicyAddress); err != nil { return nil, errorsmod.Wrap(err, "load group policy") } - tallyResult, err := k.Tally(ctx, proposal, policyInfo.GroupId) + tallyResult, err := k.Tally(sdkCtx, proposal, policyInfo.GroupId) if err != nil { return nil, err } @@ -366,10 +414,11 @@ func (k Keeper) TallyResult(goCtx context.Context, request *group.QueryTallyResu } // Groups returns all the groups present in the state. -func (k Keeper) Groups(goCtx context.Context, request *group.QueryGroupsRequest) (*group.QueryGroupsResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) Groups(goCtx context.Context, request *group.QueryGroupsRequest) (meterResult *group.QueryGroupsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Groups")(&err) - it, err := k.groupTable.PrefixScan(ctx.KVStore(k.key), 1, math.MaxUint64) + it, err := k.groupTable.PrefixScan(sdkCtx.KVStore(k.key), 1, math.MaxUint64) if err != nil { return nil, err } diff --git a/x/group/keeper/keeper.go b/x/group/keeper/keeper.go index 4a79e7303348..942847e614d3 100644 --- a/x/group/keeper/keeper.go +++ b/x/group/keeper/keeper.go @@ -1,12 +1,13 @@ package keeper import ( - "fmt" - "time" + "context" errorsmod "cosmossdk.io/errors" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" + "fmt" + metrics "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/baseapp" "github.com/cosmos/cosmos-sdk/codec" @@ -14,6 +15,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/group" "github.com/cosmos/cosmos-sdk/x/group/errors" "github.com/cosmos/cosmos-sdk/x/group/internal/orm" + "time" ) const ( @@ -46,7 +48,8 @@ const ( ) type Keeper struct { - key storetypes.StoreKey + meter metrics.Meter + key storetypes.StoreKey accKeeper group.AccountKeeper @@ -218,21 +221,29 @@ func NewKeeper(storeKey storetypes.StoreKey, cdc codec.Codec, router baseapp.Mes // Logger returns a module-specific logger. func (k Keeper) Logger(ctx sdk.Context) log.Logger { + defer k.Meter(ctx).FuncTiming(&ctx, "Logger")() + return ctx.Logger().With("module", fmt.Sprintf("x/%s", group.ModuleName)) } // GetGroupSequence returns the current value of the group table sequence func (k Keeper) GetGroupSequence(ctx sdk.Context) uint64 { + defer k.Meter(ctx).FuncTiming(&ctx, "GetGroupSequence")() + return k.groupTable.Sequence().CurVal(ctx.KVStore(k.key)) } // GetGroupPolicySeq returns the current value of the group policy table sequence func (k Keeper) GetGroupPolicySeq(ctx sdk.Context) uint64 { + defer k.Meter(ctx).FuncTiming(&ctx, "GetGroupPolicySeq")() + return k.groupPolicySeq.CurVal(ctx.KVStore(k.key)) } // proposalsByVPEnd returns all proposals whose voting_period_end is after the `endTime` time argument. func (k Keeper) proposalsByVPEnd(ctx sdk.Context, endTime time.Time) (proposals []group.Proposal, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "proposalsByVPEnd")(&err) + timeBytes := sdk.FormatTimeBytes(endTime) it, err := k.proposalsByVotingPeriodEnd.PrefixScan(ctx.KVStore(k.key), nil, timeBytes) if err != nil { @@ -265,10 +276,12 @@ func (k Keeper) proposalsByVPEnd(ctx sdk.Context, endTime time.Time) (proposals } // pruneProposal deletes a proposal from state. -func (k Keeper) pruneProposal(ctx sdk.Context, proposalID uint64) error { +func (k Keeper) pruneProposal(ctx sdk.Context, proposalID uint64) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "pruneProposal")(&err) + store := ctx.KVStore(k.key) - err := k.proposalTable.Delete(store, proposalID) + err = k.proposalTable.Delete(store, proposalID) if err != nil { return err } @@ -279,7 +292,9 @@ func (k Keeper) pruneProposal(ctx sdk.Context, proposalID uint64) error { // abortProposals iterates through all proposals by group policy index // and marks submitted proposals as aborted. -func (k Keeper) abortProposals(ctx sdk.Context, groupPolicyAddr sdk.AccAddress) error { +func (k Keeper) abortProposals(ctx sdk.Context, groupPolicyAddr sdk.AccAddress) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "abortProposals")(&err) + proposals, err := k.proposalsByGroupPolicy(ctx, groupPolicyAddr) if err != nil { return err @@ -291,7 +306,7 @@ func (k Keeper) abortProposals(ctx sdk.Context, groupPolicyAddr sdk.AccAddress) if proposalInfo.Status == group.PROPOSAL_STATUS_SUBMITTED { proposalInfo.Status = group.PROPOSAL_STATUS_ABORTED - if err := k.proposalTable.Update(ctx.KVStore(k.key), proposalInfo.Id, &proposalInfo); err != nil { + if err = k.proposalTable.Update(ctx.KVStore(k.key), proposalInfo.Id, &proposalInfo); err != nil { return err } } @@ -300,7 +315,9 @@ func (k Keeper) abortProposals(ctx sdk.Context, groupPolicyAddr sdk.AccAddress) } // proposalsByGroupPolicy returns all proposals for a given group policy. -func (k Keeper) proposalsByGroupPolicy(ctx sdk.Context, groupPolicyAddr sdk.AccAddress) ([]group.Proposal, error) { +func (k Keeper) proposalsByGroupPolicy(ctx sdk.Context, groupPolicyAddr sdk.AccAddress) (meterResult []group.Proposal, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "proposalsByGroupPolicy")(&err) + proposalIt, err := k.proposalByGroupPolicyIndex.Get(ctx.KVStore(k.key), groupPolicyAddr.Bytes()) if err != nil { return nil, err @@ -324,7 +341,9 @@ func (k Keeper) proposalsByGroupPolicy(ctx sdk.Context, groupPolicyAddr sdk.AccA } // pruneVotes prunes all votes for a proposal from state. -func (k Keeper) pruneVotes(ctx sdk.Context, proposalID uint64) error { +func (k Keeper) pruneVotes(ctx sdk.Context, proposalID uint64) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "pruneVotes")(&err) + votes, err := k.votesByProposal(ctx, proposalID) if err != nil { return err @@ -342,7 +361,9 @@ func (k Keeper) pruneVotes(ctx sdk.Context, proposalID uint64) error { } // votesByProposal returns all votes for a given proposal. -func (k Keeper) votesByProposal(ctx sdk.Context, proposalID uint64) ([]group.Vote, error) { +func (k Keeper) votesByProposal(ctx sdk.Context, proposalID uint64) (meterResult []group.Vote, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "votesByProposal")(&err) + it, err := k.voteByProposalIndex.Get(ctx.KVStore(k.key), proposalID) if err != nil { return nil, err @@ -367,18 +388,20 @@ func (k Keeper) votesByProposal(ctx sdk.Context, proposalID uint64) ([]group.Vot // PruneProposals prunes all proposals that are expired, i.e. whose // `voting_period + max_execution_period` is greater than the current block // time. -func (k Keeper) PruneProposals(ctx sdk.Context) error { +func (k Keeper) PruneProposals(ctx sdk.Context) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "PruneProposals")(&err) + proposals, err := k.proposalsByVPEnd(ctx, ctx.BlockTime().Add(-k.config.MaxExecutionPeriod)) if err != nil { return nil } for _, proposal := range proposals { - err := k.pruneProposal(ctx, proposal.Id) + err = k.pruneProposal(ctx, proposal.Id) if err != nil { return err } // Emit event for proposal finalized with its result - if err := ctx.EventManager().EmitTypedEvent( + if err = ctx.EventManager().EmitTypedEvent( &group.EventProposalPruned{ ProposalId: proposal.Id, Status: proposal.Status, @@ -394,7 +417,9 @@ func (k Keeper) PruneProposals(ctx sdk.Context) error { // TallyProposalsAtVPEnd iterates over all proposals whose voting period // has ended, tallies their votes, prunes them, and updates the proposal's // `FinalTallyResult` field. -func (k Keeper) TallyProposalsAtVPEnd(ctx sdk.Context) error { +func (k Keeper) TallyProposalsAtVPEnd(ctx sdk.Context) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "TallyProposalsAtVPEnd")(&err) + proposals, err := k.proposalsByVPEnd(ctx, ctx.BlockTime()) if err != nil { return nil @@ -413,14 +438,14 @@ func (k Keeper) TallyProposalsAtVPEnd(ctx sdk.Context) error { proposalID := proposal.Id if proposal.Status == group.PROPOSAL_STATUS_ABORTED || proposal.Status == group.PROPOSAL_STATUS_WITHDRAWN { - if err := k.pruneProposal(ctx, proposalID); err != nil { + if err = k.pruneProposal(ctx, proposalID); err != nil { return err } - if err := k.pruneVotes(ctx, proposalID); err != nil { + if err = k.pruneVotes(ctx, proposalID); err != nil { return err } // Emit event for proposal finalized with its result - if err := ctx.EventManager().EmitTypedEvent( + if err = ctx.EventManager().EmitTypedEvent( &group.EventProposalPruned{ ProposalId: proposal.Id, Status: proposal.Status, @@ -428,11 +453,11 @@ func (k Keeper) TallyProposalsAtVPEnd(ctx sdk.Context) error { return err } } else if proposal.Status == group.PROPOSAL_STATUS_SUBMITTED { - if err := k.doTallyAndUpdate(ctx, &proposal, electorate, policyInfo); err != nil { + if err = k.doTallyAndUpdate(ctx, &proposal, electorate, policyInfo); err != nil { return errorsmod.Wrap(err, "doTallyAndUpdate") } - if err := k.proposalTable.Update(ctx.KVStore(k.key), proposal.Id, &proposal); err != nil { + if err = k.proposalTable.Update(ctx.KVStore(k.key), proposal.Id, &proposal); err != nil { return errorsmod.Wrap(err, "proposal update") } } @@ -441,3 +466,11 @@ func (k Keeper) TallyProposalsAtVPEnd(ctx sdk.Context) error { } return nil } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(group.ModuleName, metrics.Tag("svc", group.ModuleName)) + } + + return k.meter +} diff --git a/x/group/keeper/migrations.go b/x/group/keeper/migrations.go index 402479b97664..24fbe557f483 100644 --- a/x/group/keeper/migrations.go +++ b/x/group/keeper/migrations.go @@ -17,6 +17,7 @@ func NewMigrator(keeper Keeper) Migrator { // Migrate1to2 migrates from version 1 to 2. func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2.Migrate( ctx, m.keeper.key, diff --git a/x/group/keeper/msg_server.go b/x/group/keeper/msg_server.go index 6689cf573931..e25d2c202609 100644 --- a/x/group/keeper/msg_server.go +++ b/x/group/keeper/msg_server.go @@ -26,22 +26,25 @@ var _ group.MsgServer = Keeper{} // Tracking issues https://github.com/cosmos/cosmos-sdk/issues/9054, https://github.com/cosmos/cosmos-sdk/discussions/9072 const gasCostPerIteration = uint64(20) -func (k Keeper) CreateGroup(goCtx context.Context, msg *group.MsgCreateGroup) (*group.MsgCreateGroupResponse, error) { +func (k Keeper) CreateGroup(goCtx context.Context, msg *group.MsgCreateGroup) (meterResult *group.MsgCreateGroupResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "CreateGroup")(&err) + if _, err := k.accKeeper.AddressCodec().StringToBytes(msg.Admin); err != nil { return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid admin address: %s", msg.Admin) } - if err := k.validateMembers(msg.Members); err != nil { + if err = k.validateMembers(msg.Members); err != nil { return nil, errorsmod.Wrap(err, "members") } - if err := k.assertMetadataLength(msg.Metadata, "group metadata"); err != nil { + if err = k.assertMetadataLength(msg.Metadata, "group metadata"); err != nil { return nil, err } totalWeight := math.NewDecFromInt64(0) for _, m := range msg.Members { - if err := k.assertMetadataLength(m.Metadata, "member metadata"); err != nil { + if err = k.assertMetadataLength(m.Metadata, "member metadata"); err != nil { return nil, err } @@ -61,29 +64,29 @@ func (k Keeper) CreateGroup(goCtx context.Context, msg *group.MsgCreateGroup) (* } // Create a new group in the groupTable. - ctx := sdk.UnwrapSDKContext(goCtx) + groupInfo := &group.GroupInfo{ - Id: k.groupTable.Sequence().PeekNextVal(ctx.KVStore(k.key)), + Id: k.groupTable.Sequence().PeekNextVal(sdkCtx.KVStore(k.key)), Admin: msg.Admin, Metadata: msg.Metadata, Version: 1, TotalWeight: totalWeight.String(), - CreatedAt: ctx.BlockTime(), + CreatedAt: sdkCtx.BlockTime(), } - groupID, err := k.groupTable.Create(ctx.KVStore(k.key), groupInfo) + groupID, err := k.groupTable.Create(sdkCtx.KVStore(k.key), groupInfo) if err != nil { return nil, errorsmod.Wrap(err, "could not create group") } // Create new group members in the groupMemberTable. for i, m := range msg.Members { - err := k.groupMemberTable.Create(ctx.KVStore(k.key), &group.GroupMember{ + err = k.groupMemberTable.Create(sdkCtx.KVStore(k.key), &group.GroupMember{ GroupId: groupID, Member: &group.Member{ Address: m.Address, Weight: m.Weight, Metadata: m.Metadata, - AddedAt: ctx.BlockTime(), + AddedAt: sdkCtx.BlockTime(), }, }) if err != nil { @@ -91,14 +94,17 @@ func (k Keeper) CreateGroup(goCtx context.Context, msg *group.MsgCreateGroup) (* } } - if err := ctx.EventManager().EmitTypedEvent(&group.EventCreateGroup{GroupId: groupID}); err != nil { + if err = sdkCtx.EventManager().EmitTypedEvent(&group.EventCreateGroup{GroupId: groupID}); err != nil { return nil, err } return &group.MsgCreateGroupResponse{GroupId: groupID}, nil } -func (k Keeper) UpdateGroupMembers(goCtx context.Context, msg *group.MsgUpdateGroupMembers) (*group.MsgUpdateGroupMembersResponse, error) { +func (k Keeper) UpdateGroupMembers(goCtx context.Context, msg *group.MsgUpdateGroupMembers) (meterResult *group.MsgUpdateGroupMembersResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "UpdateGroupMembers")(&err) + if msg.GroupId == 0 { return nil, errorsmod.Wrap(errors.ErrEmpty, "group id") } @@ -107,11 +113,10 @@ func (k Keeper) UpdateGroupMembers(goCtx context.Context, msg *group.MsgUpdateGr return nil, errorsmod.Wrap(errors.ErrEmpty, "member updates") } - if err := k.validateMembers(msg.MemberUpdates); err != nil { + if err = k.validateMembers(msg.MemberUpdates); err != nil { return nil, errorsmod.Wrap(err, "members") } - ctx := sdk.UnwrapSDKContext(goCtx) action := func(g *group.GroupInfo) error { totalWeight, err := math.NewNonNegativeDecFromString(g.TotalWeight) if err != nil { @@ -119,7 +124,7 @@ func (k Keeper) UpdateGroupMembers(goCtx context.Context, msg *group.MsgUpdateGr } for _, member := range msg.MemberUpdates { - if err := k.assertMetadataLength(member.Metadata, "group member metadata"); err != nil { + if err = k.assertMetadataLength(member.Metadata, "group member metadata"); err != nil { return err } groupMember := group.GroupMember{ @@ -134,7 +139,7 @@ func (k Keeper) UpdateGroupMembers(goCtx context.Context, msg *group.MsgUpdateGr // Checking if the group member is already part of the group var found bool var prevGroupMember group.GroupMember - switch err := k.groupMemberTable.GetOne(ctx.KVStore(k.key), orm.PrimaryKey(&groupMember), &prevGroupMember); { + switch err = k.groupMemberTable.GetOne(sdkCtx.KVStore(k.key), orm.PrimaryKey(&groupMember), &prevGroupMember); { case err == nil: found = true case sdkerrors.ErrNotFound.Is(err): @@ -167,7 +172,7 @@ func (k Keeper) UpdateGroupMembers(goCtx context.Context, msg *group.MsgUpdateGr } // Delete group member in the groupMemberTable. - if err := k.groupMemberTable.Delete(ctx.KVStore(k.key), &groupMember); err != nil { + if err = k.groupMemberTable.Delete(sdkCtx.KVStore(k.key), &groupMember); err != nil { return errorsmod.Wrap(err, "delete member") } continue @@ -185,12 +190,12 @@ func (k Keeper) UpdateGroupMembers(goCtx context.Context, msg *group.MsgUpdateGr } // Save updated group member in the groupMemberTable. groupMember.Member.AddedAt = prevGroupMember.Member.AddedAt - if err := k.groupMemberTable.Update(ctx.KVStore(k.key), &groupMember); err != nil { + if err = k.groupMemberTable.Update(sdkCtx.KVStore(k.key), &groupMember); err != nil { return errorsmod.Wrap(err, "add member") } } else { // else handle create. - groupMember.Member.AddedAt = ctx.BlockTime() - if err := k.groupMemberTable.Create(ctx.KVStore(k.key), &groupMember); err != nil { + groupMember.Member.AddedAt = sdkCtx.BlockTime() + if err = k.groupMemberTable.Create(sdkCtx.KVStore(k.key), &groupMember); err != nil { return errorsmod.Wrap(err, "add member") } } @@ -208,21 +213,24 @@ func (k Keeper) UpdateGroupMembers(goCtx context.Context, msg *group.MsgUpdateGr g.TotalWeight = totalWeight.String() g.Version++ - if err := k.validateDecisionPolicies(ctx, *g); err != nil { + if err = k.validateDecisionPolicies(sdkCtx, *g); err != nil { return err } - return k.groupTable.Update(ctx.KVStore(k.key), g.Id, g) + return k.groupTable.Update(sdkCtx.KVStore(k.key), g.Id, g) } - if err := k.doUpdateGroup(ctx, msg.GetGroupID(), msg.GetAdmin(), action, "members updated"); err != nil { + if err = k.doUpdateGroup(sdkCtx, msg.GetGroupID(), msg.GetAdmin(), action, "members updated"); err != nil { return nil, err } return &group.MsgUpdateGroupMembersResponse{}, nil } -func (k Keeper) UpdateGroupAdmin(goCtx context.Context, msg *group.MsgUpdateGroupAdmin) (*group.MsgUpdateGroupAdminResponse, error) { +func (k Keeper) UpdateGroupAdmin(goCtx context.Context, msg *group.MsgUpdateGroupAdmin) (meterResult *group.MsgUpdateGroupAdminResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "UpdateGroupAdmin")(&err) + if msg.GroupId == 0 { return nil, errorsmod.Wrap(errors.ErrEmpty, "group id") } @@ -239,27 +247,29 @@ func (k Keeper) UpdateGroupAdmin(goCtx context.Context, msg *group.MsgUpdateGrou return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "new admin address") } - ctx := sdk.UnwrapSDKContext(goCtx) action := func(g *group.GroupInfo) error { g.Admin = msg.NewAdmin g.Version++ - return k.groupTable.Update(ctx.KVStore(k.key), g.Id, g) + return k.groupTable.Update(sdkCtx.KVStore(k.key), g.Id, g) } - if err := k.doUpdateGroup(ctx, msg.GetGroupID(), msg.GetAdmin(), action, "admin updated"); err != nil { + if err = k.doUpdateGroup(sdkCtx, msg.GetGroupID(), msg.GetAdmin(), action, "admin updated"); err != nil { return nil, err } return &group.MsgUpdateGroupAdminResponse{}, nil } -func (k Keeper) UpdateGroupMetadata(goCtx context.Context, msg *group.MsgUpdateGroupMetadata) (*group.MsgUpdateGroupMetadataResponse, error) { +func (k Keeper) UpdateGroupMetadata(goCtx context.Context, msg *group.MsgUpdateGroupMetadata) (meterResult *group.MsgUpdateGroupMetadataResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "UpdateGroupMetadata")(&err) + if msg.GroupId == 0 { return nil, errorsmod.Wrap(errors.ErrEmpty, "group id") } - if err := k.assertMetadataLength(msg.Metadata, "group metadata"); err != nil { + if err = k.assertMetadataLength(msg.Metadata, "group metadata"); err != nil { return nil, err } @@ -267,23 +277,25 @@ func (k Keeper) UpdateGroupMetadata(goCtx context.Context, msg *group.MsgUpdateG return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "admin address") } - ctx := sdk.UnwrapSDKContext(goCtx) action := func(g *group.GroupInfo) error { g.Metadata = msg.Metadata g.Version++ - return k.groupTable.Update(ctx.KVStore(k.key), g.Id, g) + return k.groupTable.Update(sdkCtx.KVStore(k.key), g.Id, g) } - if err := k.doUpdateGroup(ctx, msg.GetGroupID(), msg.GetAdmin(), action, "metadata updated"); err != nil { + if err = k.doUpdateGroup(sdkCtx, msg.GetGroupID(), msg.GetAdmin(), action, "metadata updated"); err != nil { return nil, err } return &group.MsgUpdateGroupMetadataResponse{}, nil } -func (k Keeper) CreateGroupWithPolicy(ctx context.Context, msg *group.MsgCreateGroupWithPolicy) (*group.MsgCreateGroupWithPolicyResponse, error) { +func (k Keeper) CreateGroupWithPolicy(ctx context.Context, msg *group.MsgCreateGroupWithPolicy) (meterResult *group.MsgCreateGroupWithPolicyResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "CreateGroupWithPolicy")(&err) + // NOTE: admin, and group message validation is performed in the CreateGroup method - groupRes, err := k.CreateGroup(ctx, &group.MsgCreateGroup{ + groupRes, err := k.CreateGroup(sdkCtx, &group.MsgCreateGroup{ Admin: msg.Admin, Members: msg.Members, Metadata: msg.GroupMetadata, @@ -294,7 +306,7 @@ func (k Keeper) CreateGroupWithPolicy(ctx context.Context, msg *group.MsgCreateG groupID := groupRes.GroupId // NOTE: group policy message validation is performed in the CreateGroupPolicy method - groupPolicyRes, err := k.CreateGroupPolicy(ctx, &group.MsgCreateGroupPolicy{ + groupPolicyRes, err := k.CreateGroupPolicy(sdkCtx, &group.MsgCreateGroupPolicy{ Admin: msg.Admin, GroupId: groupID, Metadata: msg.GroupPolicyMetadata, @@ -310,7 +322,7 @@ func (k Keeper) CreateGroupWithPolicy(ctx context.Context, msg *group.MsgCreateG Admin: msg.Admin, NewAdmin: groupPolicyRes.Address, } - _, err = k.UpdateGroupAdmin(ctx, updateAdminReq) + _, err = k.UpdateGroupAdmin(sdkCtx, updateAdminReq) if err != nil { return nil, err } @@ -320,7 +332,7 @@ func (k Keeper) CreateGroupWithPolicy(ctx context.Context, msg *group.MsgCreateG GroupPolicyAddress: groupPolicyRes.Address, NewAdmin: groupPolicyRes.Address, } - _, err = k.UpdateGroupPolicyAdmin(ctx, updatePolicyAddressReq) + _, err = k.UpdateGroupPolicyAdmin(sdkCtx, updatePolicyAddressReq) if err != nil { return nil, err } @@ -329,12 +341,15 @@ func (k Keeper) CreateGroupWithPolicy(ctx context.Context, msg *group.MsgCreateG return &group.MsgCreateGroupWithPolicyResponse{GroupId: groupID, GroupPolicyAddress: groupPolicyRes.Address}, nil } -func (k Keeper) CreateGroupPolicy(goCtx context.Context, msg *group.MsgCreateGroupPolicy) (*group.MsgCreateGroupPolicyResponse, error) { +func (k Keeper) CreateGroupPolicy(goCtx context.Context, msg *group.MsgCreateGroupPolicy) (meterResult *group.MsgCreateGroupPolicyResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "CreateGroupPolicy")(&err) + if msg.GroupId == 0 { return nil, errorsmod.Wrap(errors.ErrEmpty, "group id") } - if err := k.assertMetadataLength(msg.GetMetadata(), "group policy metadata"); err != nil { + if err = k.assertMetadataLength(msg.GetMetadata(), "group policy metadata"); err != nil { return nil, err } @@ -343,7 +358,7 @@ func (k Keeper) CreateGroupPolicy(goCtx context.Context, msg *group.MsgCreateGro return nil, errorsmod.Wrap(err, "request decision policy") } - if err := policy.ValidateBasic(); err != nil { + if err = policy.ValidateBasic(); err != nil { return nil, errorsmod.Wrap(err, "decision policy") } @@ -352,8 +367,7 @@ func (k Keeper) CreateGroupPolicy(goCtx context.Context, msg *group.MsgCreateGro return nil, errorsmod.Wrap(err, "request admin") } - ctx := sdk.UnwrapSDKContext(goCtx) - groupInfo, err := k.getGroupInfo(ctx, msg.GetGroupID()) + groupInfo, err := k.getGroupInfo(sdkCtx, msg.GetGroupID()) if err != nil { return nil, err } @@ -368,7 +382,7 @@ func (k Keeper) CreateGroupPolicy(goCtx context.Context, msg *group.MsgCreateGro return nil, errorsmod.Wrap(sdkerrors.ErrUnauthorized, "not group admin") } - if err := policy.Validate(groupInfo, k.config); err != nil { + if err = policy.Validate(groupInfo, k.config); err != nil { return nil, err } @@ -377,7 +391,7 @@ func (k Keeper) CreateGroupPolicy(goCtx context.Context, msg *group.MsgCreateGro // loop here in the rare case where a ADR-028-derived address creates a // collision with an existing address. for { - nextAccVal := k.groupPolicySeq.NextVal(ctx.KVStore(k.key)) + nextAccVal := k.groupPolicySeq.NextVal(sdkCtx.KVStore(k.key)) derivationKey := make([]byte, 8) binary.BigEndian.PutUint64(derivationKey, nextAccVal) @@ -386,7 +400,7 @@ func (k Keeper) CreateGroupPolicy(goCtx context.Context, msg *group.MsgCreateGro return nil, err } accountAddr = sdk.AccAddress(ac.Address()) - if k.accKeeper.GetAccount(ctx, accountAddr) != nil { + if k.accKeeper.GetAccount(sdkCtx, accountAddr) != nil { // handle a rare collision, in which case we just go on to the // next sequence value and derive a new address. continue @@ -398,8 +412,8 @@ func (k Keeper) CreateGroupPolicy(goCtx context.Context, msg *group.MsgCreateGro return nil, errorsmod.Wrap(err, "could not create group policy account") } - acc := k.accKeeper.NewAccount(ctx, account) - k.accKeeper.SetAccount(ctx, acc) + acc := k.accKeeper.NewAccount(sdkCtx, account) + k.accKeeper.SetAccount(sdkCtx, acc) break } @@ -411,24 +425,27 @@ func (k Keeper) CreateGroupPolicy(goCtx context.Context, msg *group.MsgCreateGro msg.GetMetadata(), 1, policy, - ctx.BlockTime(), + sdkCtx.BlockTime(), ) if err != nil { return nil, err } - if err := k.groupPolicyTable.Create(ctx.KVStore(k.key), &groupPolicy); err != nil { + if err = k.groupPolicyTable.Create(sdkCtx.KVStore(k.key), &groupPolicy); err != nil { return nil, errorsmod.Wrap(err, "could not create group policy") } - if err := ctx.EventManager().EmitTypedEvent(&group.EventCreateGroupPolicy{Address: accountAddr.String()}); err != nil { + if err = sdkCtx.EventManager().EmitTypedEvent(&group.EventCreateGroupPolicy{Address: accountAddr.String()}); err != nil { return nil, err } return &group.MsgCreateGroupPolicyResponse{Address: accountAddr.String()}, nil } -func (k Keeper) UpdateGroupPolicyAdmin(goCtx context.Context, msg *group.MsgUpdateGroupPolicyAdmin) (*group.MsgUpdateGroupPolicyAdminResponse, error) { +func (k Keeper) UpdateGroupPolicyAdmin(goCtx context.Context, msg *group.MsgUpdateGroupPolicyAdmin) (meterResult *group.MsgUpdateGroupPolicyAdminResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "UpdateGroupPolicyAdmin")(&err) + if strings.EqualFold(msg.Admin, msg.NewAdmin) { return nil, errorsmod.Wrap(errors.ErrInvalid, "new and old admin are same") } @@ -437,33 +454,34 @@ func (k Keeper) UpdateGroupPolicyAdmin(goCtx context.Context, msg *group.MsgUpda return nil, errorsmod.Wrap(sdkerrors.ErrInvalidAddress, "new admin address") } - ctx := sdk.UnwrapSDKContext(goCtx) action := func(groupPolicy *group.GroupPolicyInfo) error { groupPolicy.Admin = msg.NewAdmin groupPolicy.Version++ - return k.groupPolicyTable.Update(ctx.KVStore(k.key), groupPolicy) + return k.groupPolicyTable.Update(sdkCtx.KVStore(k.key), groupPolicy) } - if err := k.doUpdateGroupPolicy(ctx, msg.GroupPolicyAddress, msg.Admin, action, "group policy admin updated"); err != nil { + if err = k.doUpdateGroupPolicy(sdkCtx, msg.GroupPolicyAddress, msg.Admin, action, "group policy admin updated"); err != nil { return nil, err } return &group.MsgUpdateGroupPolicyAdminResponse{}, nil } -func (k Keeper) UpdateGroupPolicyDecisionPolicy(goCtx context.Context, msg *group.MsgUpdateGroupPolicyDecisionPolicy) (*group.MsgUpdateGroupPolicyDecisionPolicyResponse, error) { +func (k Keeper) UpdateGroupPolicyDecisionPolicy(goCtx context.Context, msg *group.MsgUpdateGroupPolicyDecisionPolicy) (meterResult *group.MsgUpdateGroupPolicyDecisionPolicyResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "UpdateGroupPolicyDecisionPolicy")(&err) + policy, err := msg.GetDecisionPolicy() if err != nil { return nil, errorsmod.Wrap(err, "decision policy") } - if err := policy.ValidateBasic(); err != nil { + if err = policy.ValidateBasic(); err != nil { return nil, errorsmod.Wrap(err, "decision policy") } - ctx := sdk.UnwrapSDKContext(goCtx) action := func(groupPolicy *group.GroupPolicyInfo) error { - groupInfo, err := k.getGroupInfo(ctx, groupPolicy.GroupId) + groupInfo, err := k.getGroupInfo(sdkCtx, groupPolicy.GroupId) if err != nil { return err } @@ -479,31 +497,33 @@ func (k Keeper) UpdateGroupPolicyDecisionPolicy(goCtx context.Context, msg *grou } groupPolicy.Version++ - return k.groupPolicyTable.Update(ctx.KVStore(k.key), groupPolicy) + return k.groupPolicyTable.Update(sdkCtx.KVStore(k.key), groupPolicy) } - if err = k.doUpdateGroupPolicy(ctx, msg.GroupPolicyAddress, msg.Admin, action, "group policy's decision policy updated"); err != nil { + if err = k.doUpdateGroupPolicy(sdkCtx, msg.GroupPolicyAddress, msg.Admin, action, "group policy's decision policy updated"); err != nil { return nil, err } return &group.MsgUpdateGroupPolicyDecisionPolicyResponse{}, nil } -func (k Keeper) UpdateGroupPolicyMetadata(goCtx context.Context, msg *group.MsgUpdateGroupPolicyMetadata) (*group.MsgUpdateGroupPolicyMetadataResponse, error) { - ctx := sdk.UnwrapSDKContext(goCtx) +func (k Keeper) UpdateGroupPolicyMetadata(goCtx context.Context, msg *group.MsgUpdateGroupPolicyMetadata) (meterResult *group.MsgUpdateGroupPolicyMetadataResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "UpdateGroupPolicyMetadata")(&err) + metadata := msg.GetMetadata() action := func(groupPolicy *group.GroupPolicyInfo) error { groupPolicy.Metadata = metadata groupPolicy.Version++ - return k.groupPolicyTable.Update(ctx.KVStore(k.key), groupPolicy) + return k.groupPolicyTable.Update(sdkCtx.KVStore(k.key), groupPolicy) } - if err := k.assertMetadataLength(metadata, "group policy metadata"); err != nil { + if err = k.assertMetadataLength(metadata, "group policy metadata"); err != nil { return nil, err } - err := k.doUpdateGroupPolicy(ctx, msg.GroupPolicyAddress, msg.Admin, action, "group policy metadata updated") + err = k.doUpdateGroupPolicy(sdkCtx, msg.GroupPolicyAddress, msg.Admin, action, "group policy metadata updated") if err != nil { return nil, err } @@ -511,12 +531,15 @@ func (k Keeper) UpdateGroupPolicyMetadata(goCtx context.Context, msg *group.MsgU return &group.MsgUpdateGroupPolicyMetadataResponse{}, nil } -func (k Keeper) SubmitProposal(goCtx context.Context, msg *group.MsgSubmitProposal) (*group.MsgSubmitProposalResponse, error) { +func (k Keeper) SubmitProposal(goCtx context.Context, msg *group.MsgSubmitProposal) (meterResult *group.MsgSubmitProposalResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "SubmitProposal")(&err) + if len(msg.Proposers) == 0 { return nil, errorsmod.Wrap(errors.ErrEmpty, "proposers") } - if err := k.validateProposers(msg.Proposers); err != nil { + if err = k.validateProposers(msg.Proposers); err != nil { return nil, err } @@ -525,22 +548,22 @@ func (k Keeper) SubmitProposal(goCtx context.Context, msg *group.MsgSubmitPropos return nil, errorsmod.Wrap(err, "request account address of group policy") } - if err := k.assertMetadataLength(msg.Title, "proposal Title"); err != nil { + if err = k.assertMetadataLength(msg.Title, "proposal Title"); err != nil { return nil, err } - if err := k.assertSummaryLength(msg.Summary); err != nil { + if err = k.assertSummaryLength(msg.Summary); err != nil { return nil, err } - if err := k.assertMetadataLength(msg.Metadata, "metadata"); err != nil { + if err = k.assertMetadataLength(msg.Metadata, "metadata"); err != nil { return nil, err } // verify that if present, the metadata title and summary equals the proposal title and summary if len(msg.Metadata) != 0 { proposalMetadata := govtypes.ProposalMetadata{} - if err := json.Unmarshal([]byte(msg.Metadata), &proposalMetadata); err == nil { + if err = json.Unmarshal([]byte(msg.Metadata), &proposalMetadata); err == nil { if proposalMetadata.Title != msg.Title { return nil, fmt.Errorf("metadata title '%s' must equal proposal title '%s'", proposalMetadata.Title, msg.Title) } @@ -559,30 +582,29 @@ func (k Keeper) SubmitProposal(goCtx context.Context, msg *group.MsgSubmitPropos return nil, errorsmod.Wrap(err, "request msgs") } - if err := validateMsgs(msgs); err != nil { + if err = validateMsgs(msgs); err != nil { return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) - policyAcc, err := k.getGroupPolicyInfo(ctx, msg.GroupPolicyAddress) + policyAcc, err := k.getGroupPolicyInfo(sdkCtx, msg.GroupPolicyAddress) if err != nil { return nil, errorsmod.Wrapf(err, "load group policy: %s", msg.GroupPolicyAddress) } - groupInfo, err := k.getGroupInfo(ctx, policyAcc.GroupId) + groupInfo, err := k.getGroupInfo(sdkCtx, policyAcc.GroupId) if err != nil { return nil, errorsmod.Wrap(err, "get group by groupId of group policy") } // Only members of the group can submit a new proposal. for _, proposer := range msg.Proposers { - if !k.groupMemberTable.Has(ctx.KVStore(k.key), orm.PrimaryKey(&group.GroupMember{GroupId: groupInfo.Id, Member: &group.Member{Address: proposer}})) { + if !k.groupMemberTable.Has(sdkCtx.KVStore(k.key), orm.PrimaryKey(&group.GroupMember{GroupId: groupInfo.Id, Member: &group.Member{Address: proposer}})) { return nil, errorsmod.Wrapf(errors.ErrUnauthorized, "not in group: %s", proposer) } } // Check that if the messages require signers, they are all equal to the given account address of group policy. - if err := ensureMsgAuthZ(msgs, groupPolicyAddr, k.cdc); err != nil { + if err = ensureMsgAuthZ(msgs, groupPolicyAddr, k.cdc); err != nil { return nil, err } @@ -597,31 +619,31 @@ func (k Keeper) SubmitProposal(goCtx context.Context, msg *group.MsgSubmitPropos } m := &group.Proposal{ - Id: k.proposalTable.Sequence().PeekNextVal(ctx.KVStore(k.key)), + Id: k.proposalTable.Sequence().PeekNextVal(sdkCtx.KVStore(k.key)), GroupPolicyAddress: msg.GroupPolicyAddress, Metadata: msg.Metadata, Proposers: msg.Proposers, - SubmitTime: ctx.BlockTime(), + SubmitTime: sdkCtx.BlockTime(), GroupVersion: groupInfo.Version, GroupPolicyVersion: policyAcc.Version, Status: group.PROPOSAL_STATUS_SUBMITTED, ExecutorResult: group.PROPOSAL_EXECUTOR_RESULT_NOT_RUN, - VotingPeriodEnd: ctx.BlockTime().Add(policy.GetVotingPeriod()), // The voting window begins as soon as the proposal is submitted. + VotingPeriodEnd: sdkCtx.BlockTime().Add(policy.GetVotingPeriod()), // The voting window begins as soon as the proposal is submitted. FinalTallyResult: group.DefaultTallyResult(), Title: msg.Title, Summary: msg.Summary, } - if err := m.SetMsgs(msgs); err != nil { + if err = m.SetMsgs(msgs); err != nil { return nil, errorsmod.Wrap(err, "create proposal") } - id, err := k.proposalTable.Create(ctx.KVStore(k.key), m) + id, err := k.proposalTable.Create(sdkCtx.KVStore(k.key), m) if err != nil { return nil, errorsmod.Wrap(err, "create proposal") } - if err := ctx.EventManager().EmitTypedEvent(&group.EventSubmitProposal{ProposalId: id}); err != nil { + if err = sdkCtx.EventManager().EmitTypedEvent(&group.EventSubmitProposal{ProposalId: id}); err != nil { return nil, err } @@ -629,8 +651,8 @@ func (k Keeper) SubmitProposal(goCtx context.Context, msg *group.MsgSubmitPropos if msg.Exec == group.Exec_EXEC_TRY { // Consider proposers as Yes votes for _, proposer := range msg.Proposers { - ctx.GasMeter().ConsumeGas(gasCostPerIteration, "vote on proposal") - _, err = k.Vote(ctx, &group.MsgVote{ + sdkCtx.GasMeter().ConsumeGas(gasCostPerIteration, "vote on proposal") + _, err = k.Vote(sdkCtx, &group.MsgVote{ ProposalId: id, Voter: proposer, Option: group.VOTE_OPTION_YES, @@ -641,7 +663,7 @@ func (k Keeper) SubmitProposal(goCtx context.Context, msg *group.MsgSubmitPropos } // Then try to execute the proposal - _, err = k.Exec(ctx, &group.MsgExec{ + _, err = k.Exec(sdkCtx, &group.MsgExec{ ProposalId: id, // We consider the first proposer as the MsgExecRequest signer // but that could be revisited (eg using the group policy) @@ -655,7 +677,10 @@ func (k Keeper) SubmitProposal(goCtx context.Context, msg *group.MsgSubmitPropos return &group.MsgSubmitProposalResponse{ProposalId: id}, nil } -func (k Keeper) WithdrawProposal(goCtx context.Context, msg *group.MsgWithdrawProposal) (*group.MsgWithdrawProposalResponse, error) { +func (k Keeper) WithdrawProposal(goCtx context.Context, msg *group.MsgWithdrawProposal) (meterResult *group.MsgWithdrawProposalResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "WithdrawProposal")(&err) + if msg.ProposalId == 0 { return nil, errorsmod.Wrap(errors.ErrEmpty, "proposal id") } @@ -664,8 +689,7 @@ func (k Keeper) WithdrawProposal(goCtx context.Context, msg *group.MsgWithdrawPr return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid group policy admin / proposer address: %s", msg.Address) } - ctx := sdk.UnwrapSDKContext(goCtx) - proposal, err := k.getProposal(ctx, msg.ProposalId) + proposal, err := k.getProposal(sdkCtx, msg.ProposalId) if err != nil { return nil, err } @@ -676,7 +700,7 @@ func (k Keeper) WithdrawProposal(goCtx context.Context, msg *group.MsgWithdrawPr } var policyInfo group.GroupPolicyInfo - if policyInfo, err = k.getGroupPolicyInfo(ctx, proposal.GroupPolicyAddress); err != nil { + if policyInfo, err = k.getGroupPolicyInfo(sdkCtx, proposal.GroupPolicyAddress); err != nil { return nil, errorsmod.Wrap(err, "load group policy") } @@ -686,18 +710,21 @@ func (k Keeper) WithdrawProposal(goCtx context.Context, msg *group.MsgWithdrawPr } proposal.Status = group.PROPOSAL_STATUS_WITHDRAWN - if err := k.proposalTable.Update(ctx.KVStore(k.key), msg.ProposalId, &proposal); err != nil { + if err = k.proposalTable.Update(sdkCtx.KVStore(k.key), msg.ProposalId, &proposal); err != nil { return nil, err } - if err := ctx.EventManager().EmitTypedEvent(&group.EventWithdrawProposal{ProposalId: msg.ProposalId}); err != nil { + if err = sdkCtx.EventManager().EmitTypedEvent(&group.EventWithdrawProposal{ProposalId: msg.ProposalId}); err != nil { return nil, err } return &group.MsgWithdrawProposalResponse{}, nil } -func (k Keeper) Vote(goCtx context.Context, msg *group.MsgVote) (*group.MsgVoteResponse, error) { +func (k Keeper) Vote(goCtx context.Context, msg *group.MsgVote) (meterResult *group.MsgVoteResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Vote")(&err) + if msg.ProposalId == 0 { return nil, errorsmod.Wrap(errors.ErrEmpty, "proposal id") } @@ -711,7 +738,7 @@ func (k Keeper) Vote(goCtx context.Context, msg *group.MsgVote) (*group.MsgVoteR return nil, errorsmod.Wrap(errors.ErrInvalid, "vote option") } - if err := k.assertMetadataLength(msg.Metadata, "metadata"); err != nil { + if err = k.assertMetadataLength(msg.Metadata, "metadata"); err != nil { return nil, err } @@ -719,8 +746,7 @@ func (k Keeper) Vote(goCtx context.Context, msg *group.MsgVote) (*group.MsgVoteR return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "invalid voter address: %s", msg.Voter) } - ctx := sdk.UnwrapSDKContext(goCtx) - proposal, err := k.getProposal(ctx, msg.ProposalId) + proposal, err := k.getProposal(sdkCtx, msg.ProposalId) if err != nil { return nil, err } @@ -730,23 +756,23 @@ func (k Keeper) Vote(goCtx context.Context, msg *group.MsgVote) (*group.MsgVoteR return nil, errorsmod.Wrap(errors.ErrInvalid, "proposal not open for voting") } - if ctx.BlockTime().After(proposal.VotingPeriodEnd) { + if sdkCtx.BlockTime().After(proposal.VotingPeriodEnd) { return nil, errorsmod.Wrap(errors.ErrExpired, "voting period has ended already") } - policyInfo, err := k.getGroupPolicyInfo(ctx, proposal.GroupPolicyAddress) + policyInfo, err := k.getGroupPolicyInfo(sdkCtx, proposal.GroupPolicyAddress) if err != nil { return nil, errorsmod.Wrap(err, "load group policy") } - groupInfo, err := k.getGroupInfo(ctx, policyInfo.GroupId) + groupInfo, err := k.getGroupInfo(sdkCtx, policyInfo.GroupId) if err != nil { return nil, err } // Count and store votes. voter := group.GroupMember{GroupId: groupInfo.Id, Member: &group.Member{Address: msg.Voter}} - if err := k.groupMemberTable.GetOne(ctx.KVStore(k.key), orm.PrimaryKey(&voter), &voter); err != nil { + if err = k.groupMemberTable.GetOne(sdkCtx.KVStore(k.key), orm.PrimaryKey(&voter), &voter); err != nil { return nil, errorsmod.Wrapf(err, "voter address: %s", msg.Voter) } newVote := group.Vote{ @@ -754,22 +780,22 @@ func (k Keeper) Vote(goCtx context.Context, msg *group.MsgVote) (*group.MsgVoteR Voter: msg.Voter, Option: msg.Option, Metadata: msg.Metadata, - SubmitTime: ctx.BlockTime(), + SubmitTime: sdkCtx.BlockTime(), } // The ORM will return an error if the vote already exists, // making sure than a voter hasn't already voted. - if err := k.voteTable.Create(ctx.KVStore(k.key), &newVote); err != nil { + if err = k.voteTable.Create(sdkCtx.KVStore(k.key), &newVote); err != nil { return nil, errorsmod.Wrap(err, "store vote") } - if err := ctx.EventManager().EmitTypedEvent(&group.EventVote{ProposalId: msg.ProposalId}); err != nil { + if err = sdkCtx.EventManager().EmitTypedEvent(&group.EventVote{ProposalId: msg.ProposalId}); err != nil { return nil, err } // Try to execute proposal immediately if msg.Exec == group.Exec_EXEC_TRY { - _, err = k.Exec(ctx, &group.MsgExec{ProposalId: msg.ProposalId, Executor: msg.Voter}) + _, err = k.Exec(sdkCtx, &group.MsgExec{ProposalId: msg.ProposalId, Executor: msg.Voter}) if err != nil { return nil, err } @@ -781,7 +807,9 @@ func (k Keeper) Vote(goCtx context.Context, msg *group.MsgVote) (*group.MsgVoteR // doTallyAndUpdate performs a tally, and, if the tally result is final, then: // - updates the proposal's `Status` and `FinalTallyResult` fields, // - prune all the votes. -func (k Keeper) doTallyAndUpdate(ctx sdk.Context, proposal *group.Proposal, groupInfo group.GroupInfo, policyInfo group.GroupPolicyInfo) error { +func (k Keeper) doTallyAndUpdate(ctx sdk.Context, proposal *group.Proposal, groupInfo group.GroupInfo, policyInfo group.GroupPolicyInfo) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "doTallyAndUpdate")(&err) + policy, err := policyInfo.GetDecisionPolicy() if err != nil { return err @@ -793,21 +821,22 @@ func (k Keeper) doTallyAndUpdate(ctx sdk.Context, proposal *group.Proposal, grou result, err = policy.Allow(tallyResult, groupInfo.TotalWeight) } if err != nil { - if err := k.pruneVotes(ctx, proposal.Id); err != nil { + tallyErr := err + if err = k.pruneVotes(ctx, proposal.Id); err != nil { return err } proposal.Status = group.PROPOSAL_STATUS_REJECTED return ctx.EventManager().EmitTypedEvents( &group.EventTallyError{ ProposalId: proposal.Id, - ErrorMessage: err.Error(), + ErrorMessage: tallyErr.Error(), }) } // If the result was final (i.e. enough votes to pass) or if the voting // period ended, then we consider the proposal as final. if isFinal := result.Final || ctx.BlockTime().After(proposal.VotingPeriodEnd); isFinal { - if err := k.pruneVotes(ctx, proposal.Id); err != nil { + if err = k.pruneVotes(ctx, proposal.Id); err != nil { return err } proposal.FinalTallyResult = tallyResult @@ -823,13 +852,15 @@ func (k Keeper) doTallyAndUpdate(ctx sdk.Context, proposal *group.Proposal, grou } // Exec executes the messages from a proposal. -func (k Keeper) Exec(goCtx context.Context, msg *group.MsgExec) (*group.MsgExecResponse, error) { +func (k Keeper) Exec(goCtx context.Context, msg *group.MsgExec) (meterResult *group.MsgExecResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Exec")(&err) + if msg.ProposalId == 0 { return nil, errorsmod.Wrap(errors.ErrEmpty, "proposal id") } - ctx := sdk.UnwrapSDKContext(goCtx) - proposal, err := k.getProposal(ctx, msg.ProposalId) + proposal, err := k.getProposal(sdkCtx, msg.ProposalId) if err != nil { return nil, err } @@ -838,7 +869,7 @@ func (k Keeper) Exec(goCtx context.Context, msg *group.MsgExec) (*group.MsgExecR return nil, errorsmod.Wrapf(errors.ErrInvalid, "not possible to exec with proposal status %s", proposal.Status.String()) } - policyInfo, err := k.getGroupPolicyInfo(ctx, proposal.GroupPolicyAddress) + policyInfo, err := k.getGroupPolicyInfo(sdkCtx, proposal.GroupPolicyAddress) if err != nil { return nil, errorsmod.Wrap(err, "load group policy") } @@ -847,12 +878,12 @@ func (k Keeper) Exec(goCtx context.Context, msg *group.MsgExec) (*group.MsgExecR // didn't end yet, and tallying hasn't been done. In this case, we need to // tally first. if proposal.Status == group.PROPOSAL_STATUS_SUBMITTED { - groupInfo, err := k.getGroupInfo(ctx, policyInfo.GroupId) + groupInfo, err := k.getGroupInfo(sdkCtx, policyInfo.GroupId) if err != nil { return nil, errorsmod.Wrap(err, "load group") } - if err = k.doTallyAndUpdate(ctx, &proposal, groupInfo, policyInfo); err != nil { + if err = k.doTallyAndUpdate(sdkCtx, &proposal, groupInfo, policyInfo); err != nil { return nil, err } } @@ -861,7 +892,7 @@ func (k Keeper) Exec(goCtx context.Context, msg *group.MsgExec) (*group.MsgExecR var logs string if proposal.Status == group.PROPOSAL_STATUS_ACCEPTED && proposal.ExecutorResult != group.PROPOSAL_EXECUTOR_RESULT_SUCCESS { // Caching context so that we don't update the store in case of failure. - cacheCtx, flush := ctx.CacheContext() + cacheCtx, flush := sdkCtx.CacheContext() addr, err := k.accKeeper.AddressCodec().StringToBytes(policyInfo.Address) if err != nil { @@ -872,14 +903,14 @@ func (k Keeper) Exec(goCtx context.Context, msg *group.MsgExec) (*group.MsgExecR if results, err := k.doExecuteMsgs(cacheCtx, k.router, proposal, addr, decisionPolicy); err != nil { proposal.ExecutorResult = group.PROPOSAL_EXECUTOR_RESULT_FAILURE logs = fmt.Sprintf("proposal execution failed on proposal %d, because of error %s", proposal.Id, err.Error()) - k.Logger(ctx).Info("proposal execution failed", "cause", err, "proposalID", proposal.Id) + k.Logger(sdkCtx).Info("proposal execution failed", "cause", err, "proposalID", proposal.Id) } else { proposal.ExecutorResult = group.PROPOSAL_EXECUTOR_RESULT_SUCCESS flush() for _, res := range results { // NOTE: The sdk msg handler creates a new EventManager, so events must be correctly propagated back to the current context - ctx.EventManager().EmitEvents(res.GetEvents()) + sdkCtx.EventManager().EmitEvents(res.GetEvents()) } } } @@ -887,12 +918,12 @@ func (k Keeper) Exec(goCtx context.Context, msg *group.MsgExec) (*group.MsgExecR // Update proposal in proposalTable // If proposal has successfully run, delete it from state. if proposal.ExecutorResult == group.PROPOSAL_EXECUTOR_RESULT_SUCCESS { - if err := k.pruneProposal(ctx, proposal.Id); err != nil { + if err = k.pruneProposal(sdkCtx, proposal.Id); err != nil { return nil, err } // Emit event for proposal finalized with its result - if err := ctx.EventManager().EmitTypedEvent( + if err = sdkCtx.EventManager().EmitTypedEvent( &group.EventProposalPruned{ ProposalId: proposal.Id, Status: proposal.Status, @@ -901,13 +932,13 @@ func (k Keeper) Exec(goCtx context.Context, msg *group.MsgExec) (*group.MsgExecR return nil, err } } else { - store := ctx.KVStore(k.key) - if err := k.proposalTable.Update(store, proposal.Id, &proposal); err != nil { + store := sdkCtx.KVStore(k.key) + if err = k.proposalTable.Update(store, proposal.Id, &proposal); err != nil { return nil, err } } - if err := ctx.EventManager().EmitTypedEvent(&group.EventExec{ + if err = sdkCtx.EventManager().EmitTypedEvent(&group.EventExec{ ProposalId: proposal.Id, Logs: logs, Result: proposal.ExecutorResult, @@ -921,18 +952,20 @@ func (k Keeper) Exec(goCtx context.Context, msg *group.MsgExec) (*group.MsgExecR } // LeaveGroup implements the MsgServer/LeaveGroup method. -func (k Keeper) LeaveGroup(goCtx context.Context, msg *group.MsgLeaveGroup) (*group.MsgLeaveGroupResponse, error) { +func (k Keeper) LeaveGroup(goCtx context.Context, msg *group.MsgLeaveGroup) (meterResult *group.MsgLeaveGroupResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "LeaveGroup")(&err) + if msg.GroupId == 0 { return nil, errorsmod.Wrap(errors.ErrEmpty, "group-id") } - _, err := k.accKeeper.AddressCodec().StringToBytes(msg.Address) + _, err = k.accKeeper.AddressCodec().StringToBytes(msg.Address) if err != nil { return nil, errorsmod.Wrap(err, "group member") } - ctx := sdk.UnwrapSDKContext(goCtx) - groupInfo, err := k.getGroupInfo(ctx, msg.GroupId) + groupInfo, err := k.getGroupInfo(sdkCtx, msg.GroupId) if err != nil { return nil, errorsmod.Wrap(err, "group") } @@ -942,7 +975,7 @@ func (k Keeper) LeaveGroup(goCtx context.Context, msg *group.MsgLeaveGroup) (*gr return nil, err } - gm, err := k.getGroupMember(ctx, &group.GroupMember{ + gm, err := k.getGroupMember(sdkCtx, &group.GroupMember{ GroupId: msg.GroupId, Member: &group.Member{Address: msg.Address}, }) @@ -961,7 +994,7 @@ func (k Keeper) LeaveGroup(goCtx context.Context, msg *group.MsgLeaveGroup) (*gr } // delete group member in the groupMemberTable. - if err := k.groupMemberTable.Delete(ctx.KVStore(k.key), gm); err != nil { + if err = k.groupMemberTable.Delete(sdkCtx.KVStore(k.key), gm); err != nil { return nil, errorsmod.Wrap(err, "group member") } @@ -969,15 +1002,15 @@ func (k Keeper) LeaveGroup(goCtx context.Context, msg *group.MsgLeaveGroup) (*gr groupInfo.TotalWeight = updatedWeight.String() groupInfo.Version++ - if err := k.validateDecisionPolicies(ctx, groupInfo); err != nil { + if err = k.validateDecisionPolicies(sdkCtx, groupInfo); err != nil { return nil, err } - if err := k.groupTable.Update(ctx.KVStore(k.key), groupInfo.Id, &groupInfo); err != nil { + if err = k.groupTable.Update(sdkCtx.KVStore(k.key), groupInfo.Id, &groupInfo); err != nil { return nil, err } - if err := ctx.EventManager().EmitTypedEvent(&group.EventLeaveGroup{ + if err = sdkCtx.EventManager().EmitTypedEvent(&group.EventLeaveGroup{ GroupId: msg.GroupId, Address: msg.Address, }); err != nil { @@ -987,9 +1020,11 @@ func (k Keeper) LeaveGroup(goCtx context.Context, msg *group.MsgLeaveGroup) (*gr return &group.MsgLeaveGroupResponse{}, nil } -func (k Keeper) getGroupMember(ctx sdk.Context, member *group.GroupMember) (*group.GroupMember, error) { +func (k Keeper) getGroupMember(ctx sdk.Context, member *group.GroupMember) (meterResult *group.GroupMember, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "getGroupMember")(&err) + var groupMember group.GroupMember - switch err := k.groupMemberTable.GetOne(ctx.KVStore(k.key), + switch err = k.groupMemberTable.GetOne(ctx.KVStore(k.key), orm.PrimaryKey(member), &groupMember); { case err == nil: break @@ -1009,7 +1044,9 @@ type ( // doUpdateGroupPolicy first makes sure that the group policy admin initiated the group policy update, // before performing the group policy update and emitting an event. -func (k Keeper) doUpdateGroupPolicy(ctx sdk.Context, reqGroupPolicy, reqAdmin string, action groupPolicyActionFn, note string) error { +func (k Keeper) doUpdateGroupPolicy(ctx sdk.Context, reqGroupPolicy, reqAdmin string, action groupPolicyActionFn, note string) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "doUpdateGroupPolicy")(&err) + groupPolicyAddr, err := k.accKeeper.AddressCodec().StringToBytes(reqGroupPolicy) if err != nil { return errorsmod.Wrap(err, "group policy address") @@ -1030,7 +1067,7 @@ func (k Keeper) doUpdateGroupPolicy(ctx sdk.Context, reqGroupPolicy, reqAdmin st return errorsmod.Wrap(sdkerrors.ErrUnauthorized, "not group policy admin") } - if err := action(&groupPolicyInfo); err != nil { + if err = action(&groupPolicyInfo); err != nil { return errorsmod.Wrap(err, note) } @@ -1047,7 +1084,9 @@ func (k Keeper) doUpdateGroupPolicy(ctx sdk.Context, reqGroupPolicy, reqAdmin st // doUpdateGroup first makes sure that the group admin initiated the group update, // before performing the group update and emitting an event. -func (k Keeper) doUpdateGroup(ctx sdk.Context, groupID uint64, reqGroupAdmin string, action actionFn, errNote string) error { +func (k Keeper) doUpdateGroup(ctx sdk.Context, groupID uint64, reqGroupAdmin string, action actionFn, errNote string) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "doUpdateGroup")(&err) + groupInfo, err := k.getGroupInfo(ctx, groupID) if err != nil { return err @@ -1057,11 +1096,11 @@ func (k Keeper) doUpdateGroup(ctx sdk.Context, groupID uint64, reqGroupAdmin str return errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "not group admin; got %s, expected %s", reqGroupAdmin, groupInfo.Admin) } - if err := action(&groupInfo); err != nil { + if err = action(&groupInfo); err != nil { return errorsmod.Wrap(err, errNote) } - if err := ctx.EventManager().EmitTypedEvent(&group.EventUpdateGroup{GroupId: groupID}); err != nil { + if err = ctx.EventManager().EmitTypedEvent(&group.EventUpdateGroup{GroupId: groupID}); err != nil { return err } @@ -1088,7 +1127,9 @@ func (k Keeper) assertSummaryLength(summary string) error { // validateDecisionPolicies loops through all decision policies from the group, // and calls each of their Validate() method. -func (k Keeper) validateDecisionPolicies(ctx sdk.Context, g group.GroupInfo) error { +func (k Keeper) validateDecisionPolicies(ctx sdk.Context, g group.GroupInfo) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "validateDecisionPolicies")(&err) + it, err := k.groupPolicyByGroupIndex.Get(ctx.KVStore(k.key), g.Id) if err != nil { return err diff --git a/x/group/keeper/proposal_executor.go b/x/group/keeper/proposal_executor.go index ecbda22ced12..d2ba8671eef1 100644 --- a/x/group/keeper/proposal_executor.go +++ b/x/group/keeper/proposal_executor.go @@ -16,7 +16,9 @@ import ( // doExecuteMsgs routes the messages to the registered handlers. Messages are limited to those that require no authZ or // by the account of group policy only. Otherwise this gives access to other peoples accounts as the sdk middlewares are bypassed -func (s Keeper) doExecuteMsgs(ctx sdk.Context, router baseapp.MessageRouter, proposal group.Proposal, groupPolicyAcc sdk.AccAddress, decisionPolicy group.DecisionPolicy) ([]sdk.Result, error) { +func (s Keeper) doExecuteMsgs(ctx sdk.Context, router baseapp.MessageRouter, proposal group.Proposal, groupPolicyAcc sdk.AccAddress, decisionPolicy group.DecisionPolicy) (meterResult []sdk.Result, err error) { + defer s.Meter(ctx).FuncTiming(&ctx, "doExecuteMsgs")(&err) + // Ensure it's not too early to execute the messages. minExecutionDate := proposal.SubmitTime.Add(decisionPolicy.GetMinExecutionPeriod()) if ctx.BlockTime().Before(minExecutionDate) { @@ -39,7 +41,7 @@ func (s Keeper) doExecuteMsgs(ctx sdk.Context, router baseapp.MessageRouter, pro } results := make([]sdk.Result, len(msgs)) - if err := ensureMsgAuthZ(msgs, groupPolicyAcc, s.cdc); err != nil { + if err = ensureMsgAuthZ(msgs, groupPolicyAcc, s.cdc); err != nil { return nil, err } for i, msg := range msgs { diff --git a/x/group/keeper/tally.go b/x/group/keeper/tally.go index c390ea8c0d1e..273ce704327b 100644 --- a/x/group/keeper/tally.go +++ b/x/group/keeper/tally.go @@ -12,7 +12,9 @@ import ( // Tally is a function that tallies a proposal by iterating through its votes, // and returns the tally result without modifying the proposal or any state. -func (k Keeper) Tally(ctx sdk.Context, p group.Proposal, groupID uint64) (group.TallyResult, error) { +func (k Keeper) Tally(ctx sdk.Context, p group.Proposal, groupID uint64) (meterResult group.TallyResult, err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "Tally")(&err) + // If proposal has already been tallied and updated, then its status is // accepted/rejected, in which case we just return the previously stored result. // @@ -41,7 +43,7 @@ func (k Keeper) Tally(ctx sdk.Context, p group.Proposal, groupID uint64) (group. } var member group.GroupMember - err := k.groupMemberTable.GetOne(ctx.KVStore(k.key), orm.PrimaryKey(&group.GroupMember{ + err = k.groupMemberTable.GetOne(ctx.KVStore(k.key), orm.PrimaryKey(&group.GroupMember{ GroupId: groupID, Member: &group.Member{Address: vote.Voter}, }), &member) @@ -56,7 +58,7 @@ func (k Keeper) Tally(ctx sdk.Context, p group.Proposal, groupID uint64) (group. return group.TallyResult{}, err } - if err := tallyResult.Add(vote, member.Member.Weight); err != nil { + if err = tallyResult.Add(vote, member.Member.Weight); err != nil { return group.TallyResult{}, errorsmod.Wrap(err, "add new vote") } } diff --git a/x/group/module/abci.go b/x/group/module/abci.go index 4ae25a9e2461..b1004c50433a 100644 --- a/x/group/module/abci.go +++ b/x/group/module/abci.go @@ -7,8 +7,9 @@ import ( // EndBlocker called at every block, updates proposal's `FinalTallyResult` and // prunes expired proposals. -func EndBlocker(ctx sdk.Context, k keeper.Keeper) error { - if err := k.TallyProposalsAtVPEnd(ctx); err != nil { +func EndBlocker(ctx sdk.Context, k keeper.Keeper) (err error) { + defer k.Meter(ctx).FuncTiming(&ctx, "EndBlocker")(&err) + if err = k.TallyProposalsAtVPEnd(ctx); err != nil { return err } diff --git a/x/mint/abci.go b/x/mint/abci.go index e9108d3ee88d..a5d6c0127495 100644 --- a/x/mint/abci.go +++ b/x/mint/abci.go @@ -10,7 +10,9 @@ import ( ) // BeginBlocker mints new tokens for the previous block. -func BeginBlocker(ctx context.Context, k keeper.Keeper, ic types.InflationCalculationFn) error { +func BeginBlocker(ctx context.Context, k keeper.Keeper, ic types.InflationCalculationFn) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BeginBlocker")(&err) defer telemetry.ModuleMeasureSince(types.ModuleName, telemetry.Now(), telemetry.MetricKeyBeginBlocker) // fetch stored minter & params @@ -60,7 +62,6 @@ func BeginBlocker(ctx context.Context, k keeper.Keeper, ic types.InflationCalcul defer telemetry.ModuleSetGauge(types.ModuleName, float32(mintedCoin.Amount.Int64()), "minted_tokens") } - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeMint, diff --git a/x/mint/keeper/genesis.go b/x/mint/keeper/genesis.go index 4ed6ae1fcdea..556318c0ed4a 100644 --- a/x/mint/keeper/genesis.go +++ b/x/mint/keeper/genesis.go @@ -7,11 +7,14 @@ import ( // InitGenesis new mint genesis func (keeper Keeper) InitGenesis(ctx sdk.Context, ak types.AccountKeeper, data *types.GenesisState) { - if err := keeper.Minter.Set(ctx, data.Minter); err != nil { + var err error + defer keeper.Meter(ctx).FuncTiming(&ctx, "InitGenesis")(&err) + + if err = keeper.Minter.Set(ctx, data.Minter); err != nil { panic(err) } - if err := keeper.Params.Set(ctx, data.Params); err != nil { + if err = keeper.Params.Set(ctx, data.Params); err != nil { panic(err) } @@ -20,6 +23,9 @@ func (keeper Keeper) InitGenesis(ctx sdk.Context, ak types.AccountKeeper, data * // ExportGenesis returns a GenesisState for a given context and keeper. func (keeper Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + var err error + defer keeper.Meter(ctx).FuncTiming(&ctx, "ExportGenesis")(&err) + minter, err := keeper.Minter.Get(ctx) if err != nil { panic(err) diff --git a/x/mint/keeper/grpc_query.go b/x/mint/keeper/grpc_query.go index 07ad05fabc95..eaf6a81cbc36 100644 --- a/x/mint/keeper/grpc_query.go +++ b/x/mint/keeper/grpc_query.go @@ -4,6 +4,8 @@ import ( "context" "github.com/cosmos/cosmos-sdk/x/mint/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) var _ types.QueryServer = queryServer{} @@ -17,8 +19,11 @@ type queryServer struct { } // Params returns params of the mint module. -func (q queryServer) Params(ctx context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - params, err := q.k.Params.Get(ctx) +func (q queryServer) Params(ctx context.Context, _ *types.QueryParamsRequest) (meterResult *types.QueryParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Params")(&err) + + params, err := q.k.Params.Get(sdkCtx) if err != nil { return nil, err } @@ -27,8 +32,11 @@ func (q queryServer) Params(ctx context.Context, _ *types.QueryParamsRequest) (* } // Inflation returns minter.Inflation of the mint module. -func (q queryServer) Inflation(ctx context.Context, _ *types.QueryInflationRequest) (*types.QueryInflationResponse, error) { - minter, err := q.k.Minter.Get(ctx) +func (q queryServer) Inflation(ctx context.Context, _ *types.QueryInflationRequest) (meterResult *types.QueryInflationResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "Inflation")(&err) + + minter, err := q.k.Minter.Get(sdkCtx) if err != nil { return nil, err } @@ -37,8 +45,11 @@ func (q queryServer) Inflation(ctx context.Context, _ *types.QueryInflationReque } // AnnualProvisions returns minter.AnnualProvisions of the mint module. -func (q queryServer) AnnualProvisions(ctx context.Context, _ *types.QueryAnnualProvisionsRequest) (*types.QueryAnnualProvisionsResponse, error) { - minter, err := q.k.Minter.Get(ctx) +func (q queryServer) AnnualProvisions(ctx context.Context, _ *types.QueryAnnualProvisionsRequest) (meterResult *types.QueryAnnualProvisionsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer q.k.Meter(ctx).FuncTiming(&sdkCtx, "AnnualProvisions")(&err) + + minter, err := q.k.Minter.Get(sdkCtx) if err != nil { return nil, err } diff --git a/x/mint/keeper/keeper.go b/x/mint/keeper/keeper.go index 3fc2d68e62d3..9284422fd259 100644 --- a/x/mint/keeper/keeper.go +++ b/x/mint/keeper/keeper.go @@ -2,12 +2,13 @@ package keeper import ( "context" - "fmt" "cosmossdk.io/collections" storetypes "cosmossdk.io/core/store" "cosmossdk.io/log" "cosmossdk.io/math" + "fmt" + metrics "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -16,6 +17,7 @@ import ( // Keeper of the mint store type Keeper struct { + meter metrics.Meter cdc codec.BinaryCodec storeService storetypes.KVStoreService stakingKeeper types.StakingKeeper @@ -74,34 +76,55 @@ func (k Keeper) GetAuthority() string { // Logger returns a module-specific logger. func (k Keeper) Logger(ctx context.Context) log.Logger { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Logger")() return sdkCtx.Logger().With("module", "x/"+types.ModuleName) } // StakingTokenSupply implements an alias call to the underlying staking keeper's // StakingTokenSupply to be used in BeginBlocker. -func (k Keeper) StakingTokenSupply(ctx context.Context) (math.Int, error) { - return k.stakingKeeper.StakingTokenSupply(ctx) +func (k Keeper) StakingTokenSupply(ctx context.Context) (meterResult math.Int, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "StakingTokenSupply")(&err) + + return k.stakingKeeper.StakingTokenSupply(sdkCtx) } // BondedRatio implements an alias call to the underlying staking keeper's // BondedRatio to be used in BeginBlocker. -func (k Keeper) BondedRatio(ctx context.Context) (math.LegacyDec, error) { - return k.stakingKeeper.BondedRatio(ctx) +func (k Keeper) BondedRatio(ctx context.Context) (meterResult math.LegacyDec, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BondedRatio")(&err) + + return k.stakingKeeper.BondedRatio(sdkCtx) } // MintCoins implements an alias call to the underlying supply keeper's // MintCoins to be used in BeginBlocker. -func (k Keeper) MintCoins(ctx context.Context, newCoins sdk.Coins) error { +func (k Keeper) MintCoins(ctx context.Context, newCoins sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "MintCoins")(&err) + if newCoins.Empty() { // skip as no coins need to be minted return nil } - return k.bankKeeper.MintCoins(ctx, types.ModuleName, newCoins) + return k.bankKeeper.MintCoins(sdkCtx, types.ModuleName, newCoins) } // AddCollectedFees implements an alias call to the underlying supply keeper's // AddCollectedFees to be used in BeginBlocker. -func (k Keeper) AddCollectedFees(ctx context.Context, fees sdk.Coins) error { - return k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.ModuleName, k.feeCollectorName, fees) +func (k Keeper) AddCollectedFees(ctx context.Context, fees sdk.Coins) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "AddCollectedFees")(&err) + + return k.bankKeeper.SendCoinsFromModuleToModule(sdkCtx, types.ModuleName, k.feeCollectorName, fees) +} + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter } diff --git a/x/mint/keeper/migrator.go b/x/mint/keeper/migrator.go index 3e85e6edba08..7721ba65cc96 100644 --- a/x/mint/keeper/migrator.go +++ b/x/mint/keeper/migrator.go @@ -25,5 +25,6 @@ func NewMigrator(k Keeper, ss exported.Subspace) Migrator { // and managed by the x/params modules and stores them directly into the x/mint // module state. func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2.Migrate(ctx, m.keeper.storeService.OpenKVStore(ctx), m.legacySubspace, m.keeper.cdc) } diff --git a/x/mint/keeper/msg_server.go b/x/mint/keeper/msg_server.go index 4fdde2080f25..3c6f9ef201a7 100644 --- a/x/mint/keeper/msg_server.go +++ b/x/mint/keeper/msg_server.go @@ -7,6 +7,8 @@ import ( govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" "github.com/cosmos/cosmos-sdk/x/mint/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) var _ types.MsgServer = msgServer{} @@ -24,16 +26,19 @@ func NewMsgServerImpl(k Keeper) types.MsgServer { } // UpdateParams updates the params. -func (ms msgServer) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { +func (ms msgServer) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (meterResult *types.MsgUpdateParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer ms.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "UpdateParams")(&err) + if ms.authority != msg.Authority { return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", ms.authority, msg.Authority) } - if err := msg.Params.Validate(); err != nil { + if err = msg.Params.Validate(); err != nil { return nil, err } - if err := ms.Params.Set(ctx, msg.Params); err != nil { + if err = ms.Params.Set(sdkCtx, msg.Params); err != nil { return nil, err } diff --git a/x/nft/go.mod b/x/nft/go.mod index 9dab15cff881..5c477a43541b 100644 --- a/x/nft/go.mod +++ b/x/nft/go.mod @@ -1,8 +1,6 @@ module cosmossdk.io/x/nft -go 1.23.5 - -toolchain go1.23.8 +go 1.23.9 require ( cosmossdk.io/api v0.7.6 @@ -12,6 +10,7 @@ require ( cosmossdk.io/log v1.4.1 cosmossdk.io/math v1.4.0 cosmossdk.io/store v1.1.1 + github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 github.com/cometbft/cometbft v0.38.12 github.com/cometbft/cometbft/api v1.0.0 github.com/cosmos/cosmos-proto v1.0.0-beta.5 @@ -20,9 +19,9 @@ require ( github.com/golang/mock v1.6.0 github.com/golang/protobuf v1.5.4 github.com/grpc-ecosystem/grpc-gateway v1.16.0 - github.com/stretchr/testify v1.10.0 - google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 - google.golang.org/grpc v1.71.0 + github.com/stretchr/testify v1.11.1 + google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 + google.golang.org/grpc v1.75.0 ) require ( @@ -33,23 +32,15 @@ require ( filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect - github.com/DataDog/appsec-internal-go v1.5.0 // indirect - github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0 // indirect - github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1 // indirect github.com/DataDog/datadog-go v3.2.0+incompatible // indirect - github.com/DataDog/datadog-go/v5 v5.3.0 // indirect - github.com/DataDog/go-libddwaf/v2 v2.3.2 // indirect - github.com/DataDog/go-tuf v1.0.2-0.5.2 // indirect - github.com/DataDog/sketches-go v1.4.2 // indirect github.com/DataDog/zstd v1.5.6 // indirect - github.com/InjectiveLabs/metrics v0.0.10 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/alexcesaro/statsd v2.0.0+incompatible // 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.4 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect github.com/cockroachdb/logtags v0.0.0-20241215232642-bb51bb14a506 // indirect @@ -72,20 +63,21 @@ require ( github.com/dgraph-io/ristretto/v2 v2.1.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/ebitengine/purego v0.6.0-alpha.5 // indirect github.com/emicklei/dot v1.6.2 // indirect - github.com/fatih/color v1.15.0 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect + github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/getsentry/sentry-go v0.31.1 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-playground/universal-translator v0.18.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/btree v1.1.3 // indirect github.com/google/flatbuffers v25.2.10+incompatible // indirect github.com/google/go-cmp v0.7.0 // indirect @@ -95,12 +87,11 @@ require ( github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-metrics v0.5.3 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.5.2 // indirect github.com/hashicorp/golang-lru v1.0.2 // indirect github.com/hashicorp/golang-lru/v2 v2.0.7 // indirect @@ -115,6 +106,7 @@ require ( github.com/klauspost/compress v1.18.0 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect + github.com/leodido/go-urn v1.2.4 // indirect github.com/lib/pq v1.10.9 // indirect github.com/linxGnu/grocksdb v1.9.8 // indirect github.com/magiconair/properties v1.8.7 // indirect @@ -127,10 +119,8 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect - github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect - github.com/philhofer/fwd v1.1.2 // 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.21.1 // indirect @@ -144,7 +134,6 @@ require ( 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.5 // indirect - github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/spf13/cast v1.7.1 // indirect @@ -156,29 +145,31 @@ require ( 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/tinylib/msgp v1.1.8 // indirect + github.com/ugorji/go/codec v1.2.11 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect go.etcd.io/bbolt v1.4.0 // indirect go.opentelemetry.io/auto/sdk v1.1.0 // indirect - go.opentelemetry.io/otel v1.34.0 // indirect - go.opentelemetry.io/otel/metric v1.34.0 // indirect - go.opentelemetry.io/otel/trace v1.34.0 // indirect - go.uber.org/atomic v1.11.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect + go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.36.0 // indirect + golang.org/x/crypto v0.41.0 // indirect golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect - golang.org/x/net v0.37.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect - golang.org/x/time v0.5.0 // indirect - golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/term v0.34.0 // indirect + golang.org/x/text v0.28.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect - google.golang.org/protobuf v1.36.5 // indirect - gopkg.in/DataDog/dd-trace-go.v1 v1.62.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect + google.golang.org/protobuf v1.36.8 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -197,6 +188,6 @@ replace ( replace ( // Use CometBFT v1.0.1 with Mempool lanes and DOG - github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.3 - github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 + github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 + github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 ) diff --git a/x/nft/go.sum b/x/nft/go.sum index 45d01375d17a..65dc73b73794 100644 --- a/x/nft/go.sum +++ b/x/nft/go.sum @@ -27,34 +27,17 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 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/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/appsec-internal-go v1.5.0 h1:8kS5zSx5T49uZ8dZTdT19QVAvC/B8ByyZdhQKYQWHno= -github.com/DataDog/appsec-internal-go v1.5.0/go.mod h1:pEp8gjfNLtEOmz+iZqC8bXhu0h4k7NUsW/qiQb34k1U= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0 h1:bUMSNsw1iofWiju9yc1f+kBd33E3hMJtq9GuU602Iy8= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0/go.mod h1:HzySONXnAgSmIQfL6gOv9hWprKJkx8CicuXuUbmgWfo= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1 h1:5nE6N3JSs2IG3xzMthNFhXfOaXlrsdgqmJ73lndFf8c= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1/go.mod h1:Vc+snp0Bey4MrrJyiV2tVxxJb6BmLomPvN1RgAvjGaQ= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/datadog-go/v5 v5.3.0 h1:2q2qjFOb3RwAZNU+ez27ZVDwErJv5/VpbBPprz7Z+s8= -github.com/DataDog/datadog-go/v5 v5.3.0/go.mod h1:XRDJk1pTc00gm+ZDiBKsjh7oOOtJfYfglVCmFb8C2+Q= -github.com/DataDog/go-libddwaf/v2 v2.3.2 h1:pdi9xjWW57IpOpTeOyPuNveEDFLmmInsHDeuZk3TY34= -github.com/DataDog/go-libddwaf/v2 v2.3.2/go.mod h1:gsCdoijYQfj8ce/T2bEDNPZFIYnmHluAgVDpuQOWMZE= -github.com/DataDog/go-tuf v1.0.2-0.5.2 h1:EeZr937eKAWPxJ26IykAdWA4A0jQXJgkhUjqEI/w7+I= -github.com/DataDog/go-tuf v1.0.2-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/gostackparse v0.7.0 h1:i7dLkXHvYzHV308hnkvVGDL3BR4FWl7IsXNPz/IGQh4= -github.com/DataDog/gostackparse v0.7.0/go.mod h1:lTfqcJKqS9KnXQGnyQMCugq3u1FP6UZMfWR0aitKFMM= -github.com/DataDog/sketches-go v1.4.2 h1:gppNudE9d19cQ98RYABOetxIhpTCl4m7CnbRZjvVA/o= -github.com/DataDog/sketches-go v1.4.2/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3 h1:wVl4vPhyTh6uuwT0BfH3pbF9W0QqEnZYRgB/2IDFXR0= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 h1:uXsmBVeBickTjZ2GqPNYXShoboRw1m2Cq1bKv4QCe0o= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= -github.com/InjectiveLabs/metrics v0.0.10 h1:BoOwXnCtRRIPmq06jcI20pXZYE758eusaCI5jDOoN4U= -github.com/InjectiveLabs/metrics v0.0.10/go.mod h1:eYu++0DVUjk/jjV9WgvCo8gQU+16Yoyhp1iu+ghKNME= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 h1:QIKdpbqWRC38xJDRBmUitpksS0ZfwlvSMMYaesZirms= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6/go.mod h1:U34DYdUTNyEdnB89+eqZy+SO9g7sFRwJQg7La+o/pHk= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 h1:GcV53gW9ajrbSoU2ikuCB+dUWHmhMmtfRKwJngZ+ChM= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= +github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 h1:zvIV7ifNcH2Dvl0RrXd2qYRkaDSc+iP0hqaAhfS85MY= +github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8/go.mod h1:fdW28eWh1Ace92UW2TzINdJVaVP7whCmHKkGQZHsxGI= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= @@ -70,8 +53,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexcesaro/statsd v2.0.0+incompatible h1:HG17k1Qk8V1F4UOoq6tx+IUoAbOcI5PHzzEUGeDD72w= -github.com/alexcesaro/statsd v2.0.0+incompatible/go.mod h1:vNepIbQAiyLe1j480173M6NYYaAsGwEcvuDTU3OCUGY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -90,14 +71,16 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= 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/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= -github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.17.0 h1:1X2TS7aHz1ELcC0yU1y2stUs/0ig5oMU6STFZGrhvHI= +github.com/bits-and-blooms/bitset v1.17.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= github.com/btcsuite/btcd/btcutil v1.1.6/go.mod h1:9dFymx8HpuLqBnsPELrImQeTQfKBQqzqGbbV3jK55aE= github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28/ZlunY= github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= +github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= +github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.0 h1:qtNZduETEIWJVIyDl01BeNxur2rW9OwTQ/yBqFRkKEk= github.com/bytedance/sonic v1.10.0/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -106,10 +89,14 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= 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/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= +github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d h1:77cEq6EriyTZ0g/qfRdp61a3Uu/AWrgIq2s0ClJV1g0= github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d/go.mod h1:8EPpVsBuRksnlj1mLy4AWzRNQYxauNi62uWcE3to6eA= github.com/chenzhuoyu/iasm v0.9.0 h1:9fhXjVzq5hUy2gkhhgHl95zG2cEAhw9OSGs8toWWAwo= @@ -196,7 +183,6 @@ github.com/dgraph-io/badger/v4 v4.6.0/go.mod h1:KSJ5VTuZNC3Sd+YhvVjk2nYua9UZnnTr github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I= github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -204,7 +190,6 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh 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 v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -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= @@ -212,8 +197,6 @@ github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/ebitengine/purego v0.6.0-alpha.5 h1:EYID3JOAdmQ4SNZYJHu9V6IqOeRQDBYxqKAg9PyoHFY= -github.com/ebitengine/purego v0.6.0-alpha.5/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= 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= @@ -227,8 +210,8 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -268,8 +251,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG 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-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -291,8 +274,8 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= +github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= 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= @@ -331,8 +314,9 @@ github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= @@ -356,8 +340,6 @@ github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/ 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/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBBos92HalKpaGKHrp+3Uo6yTodo= -github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= @@ -383,13 +365,13 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= 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/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-hclog v1.5.0 h1:bI2ocEMgcVlz55Oj1xZNBsVi900c7II+fWDyV9o+13c= @@ -401,8 +383,6 @@ github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYS github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= @@ -471,8 +451,10 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= +github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -586,16 +568,12 @@ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= 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/outcaste-io/ristretto v0.2.3 h1:AK4zt/fJ76kjlYObOeNwh4T3asEuaCmp26pOvUOL9w0= -github.com/outcaste-io/ristretto v0.2.3/go.mod h1:W8HywhmtlopSB1jeMg3JtdIhf+DYkLAr0VN/s4+MHac= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -606,8 +584,6 @@ github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= -github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= @@ -657,8 +633,6 @@ github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoG github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= 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/richardartoul/molecule v1.0.1-0.20221107223329-32cfee06a052 h1:Qp27Idfgi6ACvFQat5+VJvlYToylpM/hcyLBI3WaKPA= -github.com/richardartoul/molecule v1.0.1-0.20221107223329-32cfee06a052/go.mod h1:uvX/8buq8uVeiZiFht+0lqSLBHF+uGV8BrTv8W/SIwk= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -682,8 +656,6 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg= -github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -697,8 +669,6 @@ github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4k github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= 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/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= 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.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= @@ -731,10 +701,11 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ 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.2/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/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 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.14 h1:xNMoHRJOTwMn63ip6qoWJ2Ymgvj7E2b9jY2FAwY+qRo= @@ -745,13 +716,10 @@ github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2l 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/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= -github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo= github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= @@ -762,7 +730,6 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= 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= @@ -776,26 +743,29 @@ go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= -go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 h1:vl9obrcoWVKp/lwl8tRE33853I8Xru9HFbw/skNeLs8= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0/go.mod h1:GAXRxmLJcVM3u22IjTg74zWBrRCKq8BnOqUVLodpcpw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= +go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= @@ -808,6 +778,7 @@ go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9E go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.18.1/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= +golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/arch v0.4.0 h1:A8WCeEWhLwPBKNbFi5Wv5UTCBx5zzubnXDlMOFAzFMc= golang.org/x/arch v0.4.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -818,9 +789,8 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U 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.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= @@ -840,8 +810,6 @@ golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -864,16 +832,13 @@ golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/ golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= 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-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= 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.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -885,10 +850,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ 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.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -923,7 +886,6 @@ golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7w 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-20210124154548-22da62e12c0c/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= @@ -938,33 +900,26 @@ 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-20220627191245-f75cf1eec38b/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-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/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.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 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.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.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.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= -golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -986,17 +941,15 @@ golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roY 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.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= 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= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= -golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1014,10 +967,10 @@ google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6D 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-20250106144421-5f5ef82da422 h1:GVIKPyP/kLIyVOgOnTwFOrvQaQUzOzGMCxgFUOEmm24= -google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422/go.mod h1:b6h1vNKhxaSoEI+5jc3PJUCustfli/mRab7295pY7rw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1035,8 +988,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp 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.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= +google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= 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= @@ -1050,15 +1003,10 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba 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.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/DataDog/dd-trace-go.v1 v1.62.0 h1:jeZxE4ZlfAc+R0zO5TEmJBwOLet3NThsOfYJeSQg1x0= -gopkg.in/DataDog/dd-trace-go.v1 v1.62.0/go.mod h1:YTvYkk3PTsfw0OWrRFxV/IQ5Gy4nZ5TRvxTAP3JcIzs= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= -gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= 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= @@ -1090,16 +1038,16 @@ 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/gotraceui v0.2.0 h1:dmNsfQ9Vl3GwbiVD7Z8d/osC6WtGGrasyrC2suc4ZIQ= -honnef.co/go/gotraceui v0.2.0/go.mod h1:qHo4/W75cA3bX0QQoSvDjbJa4R8mAyyFjbWAj63XElc= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= 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= honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= 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/x/nft/keeper/class.go b/x/nft/keeper/class.go index 1e73a27beec6..cfd1f7dc5f5a 100644 --- a/x/nft/keeper/class.go +++ b/x/nft/keeper/class.go @@ -8,37 +8,48 @@ import ( "cosmossdk.io/x/nft" "github.com/cosmos/cosmos-sdk/runtime" + + sdk "github.com/cosmos/cosmos-sdk/types" ) // SaveClass defines a method for creating a new nft class -func (k Keeper) SaveClass(ctx context.Context, class nft.Class) error { - if k.HasClass(ctx, class.Id) { +func (k Keeper) SaveClass(ctx context.Context, class nft.Class) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SaveClass")(&err) + + if k.HasClass(sdkCtx, class.Id) { return errors.Wrap(nft.ErrClassExists, class.Id) } bz, err := k.cdc.Marshal(&class) if err != nil { return errors.Wrap(err, "Marshal nft.Class failed") } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) return store.Set(classStoreKey(class.Id), bz) } // UpdateClass defines a method for updating an exist nft class -func (k Keeper) UpdateClass(ctx context.Context, class nft.Class) error { - if !k.HasClass(ctx, class.Id) { +func (k Keeper) UpdateClass(ctx context.Context, class nft.Class) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UpdateClass")(&err) + + if !k.HasClass(sdkCtx, class.Id) { return errors.Wrap(nft.ErrClassNotExists, class.Id) } bz, err := k.cdc.Marshal(&class) if err != nil { return errors.Wrap(err, "Marshal nft.Class failed") } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) return store.Set(classStoreKey(class.Id), bz) } // GetClass defines a method for returning the class information of the specified id func (k Keeper) GetClass(ctx context.Context, classID string) (nft.Class, bool) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetClass")() + + store := k.storeService.OpenKVStore(sdkCtx) var class nft.Class bz, err := store.Get(classStoreKey(classID)) @@ -55,7 +66,10 @@ func (k Keeper) GetClass(ctx context.Context, classID string) (nft.Class, bool) // GetClasses defines a method for returning all classes information func (k Keeper) GetClasses(ctx context.Context) (classes []*nft.Class) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetClasses")() + + store := k.storeService.OpenKVStore(sdkCtx) iterator := storetypes.KVStorePrefixIterator(runtime.KVStoreAdapter(store), ClassKey) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { @@ -68,7 +82,11 @@ func (k Keeper) GetClasses(ctx context.Context) (classes []*nft.Class) { // HasClass determines whether the specified classID exist func (k Keeper) HasClass(ctx context.Context, classID string) bool { - store := k.storeService.OpenKVStore(ctx) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HasClass")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) has, err := store.Has(classStoreKey(classID)) if err != nil { panic(err) diff --git a/x/nft/keeper/genesis.go b/x/nft/keeper/genesis.go index 20631dbbf65b..098a80ea561e 100644 --- a/x/nft/keeper/genesis.go +++ b/x/nft/keeper/genesis.go @@ -11,8 +11,11 @@ import ( // InitGenesis initializes the nft module's genesis state from a given // genesis state. func (k Keeper) InitGenesis(ctx sdk.Context, data *nft.GenesisState) { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "InitGenesis")(&err) + for _, class := range data.Classes { - if err := k.SaveClass(ctx, *class); err != nil { + if err = k.SaveClass(ctx, *class); err != nil { panic(err) } } @@ -23,7 +26,7 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data *nft.GenesisState) { panic(err) } - if err := k.Mint(ctx, *nft, owner); err != nil { + if err = k.Mint(ctx, *nft, owner); err != nil { panic(err) } } @@ -32,6 +35,9 @@ func (k Keeper) InitGenesis(ctx sdk.Context, data *nft.GenesisState) { // ExportGenesis returns a GenesisState for a given context. func (k Keeper) ExportGenesis(ctx sdk.Context) *nft.GenesisState { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "ExportGenesis")(&err) + classes := k.GetClasses(ctx) nftMap := make(map[string][]*nft.NFT) for _, class := range classes { diff --git a/x/nft/keeper/grpc_query.go b/x/nft/keeper/grpc_query.go index e4ccb1cc31f6..1ce461aa81f2 100644 --- a/x/nft/keeper/grpc_query.go +++ b/x/nft/keeper/grpc_query.go @@ -15,7 +15,10 @@ import ( var _ nft.QueryServer = Keeper{} // Balance return the number of NFTs of a given class owned by the owner, same as balanceOf in ERC721 -func (k Keeper) Balance(goCtx context.Context, r *nft.QueryBalanceRequest) (*nft.QueryBalanceResponse, error) { +func (k Keeper) Balance(goCtx context.Context, r *nft.QueryBalanceRequest) (meterResult *nft.QueryBalanceResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Balance")(&err) + if r == nil { return nil, sdkerrors.ErrInvalidRequest.Wrap("empty request") } @@ -29,13 +32,15 @@ func (k Keeper) Balance(goCtx context.Context, r *nft.QueryBalanceRequest) (*nft return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) - balance := k.GetBalance(ctx, r.ClassId, owner) + balance := k.GetBalance(sdkCtx, r.ClassId, owner) return &nft.QueryBalanceResponse{Amount: balance}, nil } // Owner return the owner of the NFT based on its class and id, same as ownerOf in ERC721 -func (k Keeper) Owner(goCtx context.Context, r *nft.QueryOwnerRequest) (*nft.QueryOwnerResponse, error) { +func (k Keeper) Owner(goCtx context.Context, r *nft.QueryOwnerRequest) (meterResult *nft.QueryOwnerResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Owner")(&err) + if r == nil { return nil, sdkerrors.ErrInvalidRequest.Wrap("empty request") } @@ -48,8 +53,7 @@ func (k Keeper) Owner(goCtx context.Context, r *nft.QueryOwnerRequest) (*nft.Que return nil, nft.ErrEmptyNFTID } - ctx := sdk.UnwrapSDKContext(goCtx) - owner := k.GetOwner(ctx, r.ClassId, r.Id) + owner := k.GetOwner(sdkCtx, r.ClassId, r.Id) if owner.Empty() { return &nft.QueryOwnerResponse{Owner: ""}, nil } @@ -61,7 +65,10 @@ func (k Keeper) Owner(goCtx context.Context, r *nft.QueryOwnerRequest) (*nft.Que } // Supply return the number of NFTs from the given class, same as totalSupply of ERC721. -func (k Keeper) Supply(goCtx context.Context, r *nft.QuerySupplyRequest) (*nft.QuerySupplyResponse, error) { +func (k Keeper) Supply(goCtx context.Context, r *nft.QuerySupplyRequest) (meterResult *nft.QuerySupplyResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Supply")(&err) + if r == nil { return nil, sdkerrors.ErrInvalidRequest.Wrap("empty request") } @@ -69,18 +76,20 @@ func (k Keeper) Supply(goCtx context.Context, r *nft.QuerySupplyRequest) (*nft.Q if len(r.ClassId) == 0 { return nil, nft.ErrEmptyClassID } - ctx := sdk.UnwrapSDKContext(goCtx) - supply := k.GetTotalSupply(ctx, r.ClassId) + + supply := k.GetTotalSupply(sdkCtx, r.ClassId) return &nft.QuerySupplyResponse{Amount: supply}, nil } // NFTs queries all NFTs of a given class or owner (at least one must be provided), similar to tokenByIndex in ERC721Enumerable -func (k Keeper) NFTs(goCtx context.Context, r *nft.QueryNFTsRequest) (*nft.QueryNFTsResponse, error) { +func (k Keeper) NFTs(goCtx context.Context, r *nft.QueryNFTsRequest) (meterResult *nft.QueryNFTsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "NFTs")(&err) + if r == nil { return nil, sdkerrors.ErrInvalidRequest.Wrap("empty request") } - var err error var owner sdk.AccAddress if len(r.Owner) > 0 { @@ -92,12 +101,11 @@ func (k Keeper) NFTs(goCtx context.Context, r *nft.QueryNFTsRequest) (*nft.Query var nfts []*nft.NFT var pageRes *query.PageResponse - ctx := sdk.UnwrapSDKContext(goCtx) switch { case len(r.ClassId) > 0 && len(r.Owner) > 0: - if pageRes, err = query.Paginate(k.getClassStoreByOwner(ctx, owner, r.ClassId), r.Pagination, func(key, _ []byte) error { - nft, has := k.GetNFT(ctx, r.ClassId, string(key)) + if pageRes, err = query.Paginate(k.getClassStoreByOwner(sdkCtx, owner, r.ClassId), r.Pagination, func(key, _ []byte) error { + nft, has := k.GetNFT(sdkCtx, r.ClassId, string(key)) if has { nfts = append(nfts, &nft) } @@ -106,10 +114,10 @@ func (k Keeper) NFTs(goCtx context.Context, r *nft.QueryNFTsRequest) (*nft.Query return nil, err } case len(r.ClassId) > 0 && len(r.Owner) == 0: - nftStore := k.getNFTStore(ctx, r.ClassId) + nftStore := k.getNFTStore(sdkCtx, r.ClassId) if pageRes, err = query.Paginate(nftStore, r.Pagination, func(_, value []byte) error { var nft nft.NFT - if err := k.cdc.Unmarshal(value, &nft); err != nil { + if err = k.cdc.Unmarshal(value, &nft); err != nil { return err } nfts = append(nfts, &nft) @@ -118,9 +126,9 @@ func (k Keeper) NFTs(goCtx context.Context, r *nft.QueryNFTsRequest) (*nft.Query return nil, err } case len(r.ClassId) == 0 && len(r.Owner) > 0: - if pageRes, err = query.Paginate(k.prefixStoreNftOfClassByOwner(ctx, owner), r.Pagination, func(key, value []byte) error { + if pageRes, err = query.Paginate(k.prefixStoreNftOfClassByOwner(sdkCtx, owner), r.Pagination, func(key, value []byte) error { classID, nftID := parseNftOfClassByOwnerStoreKey(key) - if n, has := k.GetNFT(ctx, classID, nftID); has { + if n, has := k.GetNFT(sdkCtx, classID, nftID); has { nfts = append(nfts, &n) } return nil @@ -137,7 +145,10 @@ func (k Keeper) NFTs(goCtx context.Context, r *nft.QueryNFTsRequest) (*nft.Query } // NFT return an NFT based on its class and id. -func (k Keeper) NFT(goCtx context.Context, r *nft.QueryNFTRequest) (*nft.QueryNFTResponse, error) { +func (k Keeper) NFT(goCtx context.Context, r *nft.QueryNFTRequest) (meterResult *nft.QueryNFTResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "NFT")(&err) + if r == nil { return nil, sdkerrors.ErrInvalidRequest.Wrap("empty request") } @@ -149,8 +160,7 @@ func (k Keeper) NFT(goCtx context.Context, r *nft.QueryNFTRequest) (*nft.QueryNF return nil, nft.ErrEmptyNFTID } - ctx := sdk.UnwrapSDKContext(goCtx) - n, has := k.GetNFT(ctx, r.ClassId, r.Id) + n, has := k.GetNFT(sdkCtx, r.ClassId, r.Id) if !has { return nil, nft.ErrNFTNotExists.Wrapf("not found nft: class: %s, id: %s", r.ClassId, r.Id) } @@ -158,7 +168,10 @@ func (k Keeper) NFT(goCtx context.Context, r *nft.QueryNFTRequest) (*nft.QueryNF } // Class return an NFT class based on its id -func (k Keeper) Class(goCtx context.Context, r *nft.QueryClassRequest) (*nft.QueryClassResponse, error) { +func (k Keeper) Class(goCtx context.Context, r *nft.QueryClassRequest) (meterResult *nft.QueryClassResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Class")(&err) + if r == nil { return nil, sdkerrors.ErrInvalidRequest.Wrap("empty request") } @@ -167,8 +180,7 @@ func (k Keeper) Class(goCtx context.Context, r *nft.QueryClassRequest) (*nft.Que return nil, nft.ErrEmptyClassID } - ctx := sdk.UnwrapSDKContext(goCtx) - class, has := k.GetClass(ctx, r.ClassId) + class, has := k.GetClass(sdkCtx, r.ClassId) if !has { return nil, nft.ErrClassNotExists.Wrapf("not found class: %s", r.ClassId) } @@ -176,19 +188,21 @@ func (k Keeper) Class(goCtx context.Context, r *nft.QueryClassRequest) (*nft.Que } // Classes return all NFT classes -func (k Keeper) Classes(goCtx context.Context, r *nft.QueryClassesRequest) (*nft.QueryClassesResponse, error) { +func (k Keeper) Classes(goCtx context.Context, r *nft.QueryClassesRequest) (meterResult *nft.QueryClassesResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Classes")(&err) + if r == nil { return nil, sdkerrors.ErrInvalidRequest.Wrap("empty request") } - ctx := sdk.UnwrapSDKContext(goCtx) - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) classStore := prefix.NewStore(runtime.KVStoreAdapter(store), ClassKey) var classes []*nft.Class pageRes, err := query.Paginate(classStore, r.Pagination, func(_, value []byte) error { var class nft.Class - if err := k.cdc.Unmarshal(value, &class); err != nil { + if err = k.cdc.Unmarshal(value, &class); err != nil { return err } classes = append(classes, &class) diff --git a/x/nft/keeper/keeper.go b/x/nft/keeper/keeper.go index d2718d326299..a6b8560b221e 100644 --- a/x/nft/keeper/keeper.go +++ b/x/nft/keeper/keeper.go @@ -1,15 +1,20 @@ package keeper import ( + "context" + "cosmossdk.io/core/address" store "cosmossdk.io/core/store" "cosmossdk.io/x/nft" + metrics "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" + sdk "github.com/cosmos/cosmos-sdk/types" ) // Keeper of the nft store type Keeper struct { + meter metrics.Meter cdc codec.BinaryCodec storeService store.KVStoreService bk nft.BankKeeper @@ -32,3 +37,11 @@ func NewKeeper(storeService store.KVStoreService, ac: ak.AddressCodec(), } } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(nft.ModuleName, metrics.Tag("svc", nft.ModuleName)) + } + + return k.meter +} diff --git a/x/nft/keeper/msg_server.go b/x/nft/keeper/msg_server.go index 2f48298714f4..f8dc2b539d58 100644 --- a/x/nft/keeper/msg_server.go +++ b/x/nft/keeper/msg_server.go @@ -14,7 +14,10 @@ import ( var _ nft.MsgServer = Keeper{} // Send implements Send method of the types.MsgServer. -func (k Keeper) Send(goCtx context.Context, msg *nft.MsgSend) (*nft.MsgSendResponse, error) { +func (k Keeper) Send(goCtx context.Context, msg *nft.MsgSend) (meterResult *nft.MsgSendResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Send")(&err) + if len(msg.ClassId) == 0 { return nil, nft.ErrEmptyClassID } @@ -33,17 +36,16 @@ func (k Keeper) Send(goCtx context.Context, msg *nft.MsgSend) (*nft.MsgSendRespo return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid receiver address (%s)", msg.Receiver) } - ctx := sdk.UnwrapSDKContext(goCtx) - owner := k.GetOwner(ctx, msg.ClassId, msg.Id) + owner := k.GetOwner(sdkCtx, msg.ClassId, msg.Id) if !bytes.Equal(owner, sender) { return nil, errorsmod.Wrapf(sdkerrors.ErrUnauthorized, "%s is not the owner of nft %s", msg.Sender, msg.Id) } - if err := k.Transfer(ctx, msg.ClassId, msg.Id, receiver); err != nil { + if err = k.Transfer(sdkCtx, msg.ClassId, msg.Id, receiver); err != nil { return nil, err } - ctx.EventManager().EmitTypedEvent(&nft.EventSend{ + sdkCtx.EventManager().EmitTypedEvent(&nft.EventSend{ ClassId: msg.ClassId, Id: msg.Id, Sender: msg.Sender, diff --git a/x/nft/keeper/nft.go b/x/nft/keeper/nft.go index d99af1322c73..47c30cd851cb 100644 --- a/x/nft/keeper/nft.go +++ b/x/nft/keeper/nft.go @@ -12,31 +12,37 @@ import ( ) // Mint defines a method for minting a new nft -func (k Keeper) Mint(ctx context.Context, token nft.NFT, receiver sdk.AccAddress) error { - if !k.HasClass(ctx, token.ClassId) { +func (k Keeper) Mint(ctx context.Context, token nft.NFT, receiver sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Mint")(&err) + + if !k.HasClass(sdkCtx, token.ClassId) { return errors.Wrap(nft.ErrClassNotExists, token.ClassId) } - if k.HasNFT(ctx, token.ClassId, token.Id) { + if k.HasNFT(sdkCtx, token.ClassId, token.Id) { return errors.Wrap(nft.ErrNFTExists, token.Id) } - return k.mintWithNoCheck(ctx, token, receiver) + return k.mintWithNoCheck(sdkCtx, token, receiver) } // mintWithNoCheck defines a method for minting a new nft // Note: this method does not check whether the class already exists in nft. // The upper-layer application needs to check it when it needs to use it. -func (k Keeper) mintWithNoCheck(ctx context.Context, token nft.NFT, receiver sdk.AccAddress) error { - k.setNFT(ctx, token) - k.setOwner(ctx, token.ClassId, token.Id, receiver) - k.incrTotalSupply(ctx, token.ClassId) +func (k Keeper) mintWithNoCheck(ctx context.Context, token nft.NFT, receiver sdk.AccAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "mintWithNoCheck")(&err) + + k.setNFT(sdkCtx, token) + k.setOwner(sdkCtx, token.ClassId, token.Id, receiver) + k.incrTotalSupply(sdkCtx, token.ClassId) recStr, err := k.ac.BytesToString(receiver.Bytes()) if err != nil { return err } - return sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent(&nft.EventMint{ + return sdkCtx.EventManager().EmitTypedEvent(&nft.EventMint{ ClassId: token.ClassId, Id: token.Id, Owner: recStr, @@ -45,35 +51,41 @@ func (k Keeper) mintWithNoCheck(ctx context.Context, token nft.NFT, receiver sdk // Burn defines a method for burning a nft from a specific account. // Note: When the upper module uses this method, it needs to authenticate nft -func (k Keeper) Burn(ctx context.Context, classID, nftID string) error { - if !k.HasClass(ctx, classID) { +func (k Keeper) Burn(ctx context.Context, classID, nftID string) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Burn")(&err) + + if !k.HasClass(sdkCtx, classID) { return errors.Wrap(nft.ErrClassNotExists, classID) } - if !k.HasNFT(ctx, classID, nftID) { + if !k.HasNFT(sdkCtx, classID, nftID) { return errors.Wrap(nft.ErrNFTNotExists, nftID) } - k.burnWithNoCheck(ctx, classID, nftID) + k.burnWithNoCheck(sdkCtx, classID, nftID) return nil } // burnWithNoCheck defines a method for burning a nft from a specific account. // Note: this method does not check whether the class already exists in nft. // The upper-layer application needs to check it when it needs to use it -func (k Keeper) burnWithNoCheck(ctx context.Context, classID, nftID string) error { - owner := k.GetOwner(ctx, classID, nftID) - nftStore := k.getNFTStore(ctx, classID) +func (k Keeper) burnWithNoCheck(ctx context.Context, classID, nftID string) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "burnWithNoCheck")(&err) + + owner := k.GetOwner(sdkCtx, classID, nftID) + nftStore := k.getNFTStore(sdkCtx, classID) nftStore.Delete([]byte(nftID)) - k.deleteOwner(ctx, classID, nftID, owner) - k.decrTotalSupply(ctx, classID) + k.deleteOwner(sdkCtx, classID, nftID, owner) + k.decrTotalSupply(sdkCtx, classID) ownerStr, err := k.ac.BytesToString(owner.Bytes()) if err != nil { return err } - return sdk.UnwrapSDKContext(ctx).EventManager().EmitTypedEvent(&nft.EventBurn{ + return sdkCtx.EventManager().EmitTypedEvent(&nft.EventBurn{ ClassId: classID, Id: nftID, Owner: ownerStr, @@ -82,15 +94,18 @@ func (k Keeper) burnWithNoCheck(ctx context.Context, classID, nftID string) erro // Update defines a method for updating an exist nft // Note: When the upper module uses this method, it needs to authenticate nft -func (k Keeper) Update(ctx context.Context, token nft.NFT) error { - if !k.HasClass(ctx, token.ClassId) { +func (k Keeper) Update(ctx context.Context, token nft.NFT) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Update")(&err) + + if !k.HasClass(sdkCtx, token.ClassId) { return errors.Wrap(nft.ErrClassNotExists, token.ClassId) } - if !k.HasNFT(ctx, token.ClassId, token.Id) { + if !k.HasNFT(sdkCtx, token.ClassId, token.Id) { return errors.Wrap(nft.ErrNFTNotExists, token.Id) } - k.updateWithNoCheck(ctx, token) + k.updateWithNoCheck(sdkCtx, token) return nil } @@ -98,7 +113,10 @@ func (k Keeper) Update(ctx context.Context, token nft.NFT) error { // Note: this method does not check whether the class already exists in nft. // The upper-layer application needs to check it when it needs to use it func (k Keeper) updateWithNoCheck(ctx context.Context, token nft.NFT) { - k.setNFT(ctx, token) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "updateWithNoCheck")() + + k.setNFT(sdkCtx, token) } // Transfer defines a method for sending a nft from one account to another account. @@ -107,16 +125,19 @@ func (k Keeper) Transfer(ctx context.Context, classID string, nftID string, receiver sdk.AccAddress, -) error { - if !k.HasClass(ctx, classID) { +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Transfer")(&err) + + if !k.HasClass(sdkCtx, classID) { return errors.Wrap(nft.ErrClassNotExists, classID) } - if !k.HasNFT(ctx, classID, nftID) { + if !k.HasNFT(sdkCtx, classID, nftID) { return errors.Wrap(nft.ErrNFTNotExists, nftID) } - k.transferWithNoCheck(ctx, classID, nftID, receiver) + k.transferWithNoCheck(sdkCtx, classID, nftID, receiver) return nil } @@ -127,16 +148,22 @@ func (k Keeper) transferWithNoCheck(ctx context.Context, classID string, nftID string, receiver sdk.AccAddress, -) error { - owner := k.GetOwner(ctx, classID, nftID) - k.deleteOwner(ctx, classID, nftID, owner) - k.setOwner(ctx, classID, nftID, receiver) +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "transferWithNoCheck")(&err) + + owner := k.GetOwner(sdkCtx, classID, nftID) + k.deleteOwner(sdkCtx, classID, nftID, owner) + k.setOwner(sdkCtx, classID, nftID, receiver) return nil } // GetNFT returns the nft information of the specified classID and nftID func (k Keeper) GetNFT(ctx context.Context, classID, nftID string) (nft.NFT, bool) { - store := k.getNFTStore(ctx, classID) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetNFT")() + + store := k.getNFTStore(sdkCtx, classID) bz := store.Get([]byte(nftID)) if len(bz) == 0 { return nft.NFT{}, false @@ -148,11 +175,14 @@ func (k Keeper) GetNFT(ctx context.Context, classID, nftID string) (nft.NFT, boo // GetNFTsOfClassByOwner returns all nft information of the specified classID under the specified owner func (k Keeper) GetNFTsOfClassByOwner(ctx context.Context, classID string, owner sdk.AccAddress) (nfts []nft.NFT) { - ownerStore := k.getClassStoreByOwner(ctx, owner, classID) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetNFTsOfClassByOwner")() + + ownerStore := k.getClassStoreByOwner(sdkCtx, owner, classID) iterator := ownerStore.Iterator(nil, nil) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { - nft, has := k.GetNFT(ctx, classID, string(iterator.Key())) + nft, has := k.GetNFT(sdkCtx, classID, string(iterator.Key())) if has { nfts = append(nfts, nft) } @@ -162,7 +192,10 @@ func (k Keeper) GetNFTsOfClassByOwner(ctx context.Context, classID string, owner // GetNFTsOfClass returns all nft information under the specified classID func (k Keeper) GetNFTsOfClass(ctx context.Context, classID string) (nfts []nft.NFT) { - nftStore := k.getNFTStore(ctx, classID) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetNFTsOfClass")() + + nftStore := k.getNFTStore(sdkCtx, classID) iterator := nftStore.Iterator(nil, nil) defer iterator.Close() for ; iterator.Valid(); iterator.Next() { @@ -175,7 +208,11 @@ func (k Keeper) GetNFTsOfClass(ctx context.Context, classID string) (nfts []nft. // GetOwner returns the owner information of the specified nft func (k Keeper) GetOwner(ctx context.Context, classID, nftID string) sdk.AccAddress { - store := k.storeService.OpenKVStore(ctx) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetOwner")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(ownerStoreKey(classID, nftID)) if err != nil { panic(err) @@ -185,13 +222,20 @@ func (k Keeper) GetOwner(ctx context.Context, classID, nftID string) sdk.AccAddr // GetBalance returns the specified account, the number of all nfts under the specified classID func (k Keeper) GetBalance(ctx context.Context, classID string, owner sdk.AccAddress) uint64 { - nfts := k.GetNFTsOfClassByOwner(ctx, classID, owner) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetBalance")() + + nfts := k.GetNFTsOfClassByOwner(sdkCtx, classID, owner) return uint64(len(nfts)) } // GetTotalSupply returns the number of all nfts under the specified classID func (k Keeper) GetTotalSupply(ctx context.Context, classID string) uint64 { - store := k.storeService.OpenKVStore(ctx) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetTotalSupply")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(classTotalSupply(classID)) if err != nil { panic(err) @@ -201,63 +245,94 @@ func (k Keeper) GetTotalSupply(ctx context.Context, classID string) uint64 { // HasNFT determines whether the specified classID and nftID exist func (k Keeper) HasNFT(ctx context.Context, classID, id string) bool { - store := k.getNFTStore(ctx, classID) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HasNFT")() + + store := k.getNFTStore(sdkCtx, classID) return store.Has([]byte(id)) } func (k Keeper) setNFT(ctx context.Context, token nft.NFT) { - nftStore := k.getNFTStore(ctx, token.ClassId) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "setNFT")() + + nftStore := k.getNFTStore(sdkCtx, token.ClassId) bz := k.cdc.MustMarshal(&token) nftStore.Set([]byte(token.Id), bz) } func (k Keeper) setOwner(ctx context.Context, classID, nftID string, owner sdk.AccAddress) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "setOwner")() + + store := k.storeService.OpenKVStore(sdkCtx) store.Set(ownerStoreKey(classID, nftID), owner.Bytes()) - ownerStore := k.getClassStoreByOwner(ctx, owner, classID) + ownerStore := k.getClassStoreByOwner(sdkCtx, owner, classID) ownerStore.Set([]byte(nftID), Placeholder) } func (k Keeper) deleteOwner(ctx context.Context, classID, nftID string, owner sdk.AccAddress) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "deleteOwner")() + + store := k.storeService.OpenKVStore(sdkCtx) store.Delete(ownerStoreKey(classID, nftID)) - ownerStore := k.getClassStoreByOwner(ctx, owner, classID) + ownerStore := k.getClassStoreByOwner(sdkCtx, owner, classID) ownerStore.Delete([]byte(nftID)) } func (k Keeper) getNFTStore(ctx context.Context, classID string) prefix.Store { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getNFTStore")() + + store := k.storeService.OpenKVStore(sdkCtx) return prefix.NewStore(runtime.KVStoreAdapter(store), nftStoreKey(classID)) } func (k Keeper) getClassStoreByOwner(ctx context.Context, owner sdk.AccAddress, classID string) prefix.Store { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getClassStoreByOwner")() + + store := k.storeService.OpenKVStore(sdkCtx) key := nftOfClassByOwnerStoreKey(owner, classID) return prefix.NewStore(runtime.KVStoreAdapter(store), key) } func (k Keeper) prefixStoreNftOfClassByOwner(ctx context.Context, owner sdk.AccAddress) prefix.Store { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "prefixStoreNftOfClassByOwner")() + + store := k.storeService.OpenKVStore(sdkCtx) key := prefixNftOfClassByOwnerStoreKey(owner) return prefix.NewStore(runtime.KVStoreAdapter(store), key) } func (k Keeper) incrTotalSupply(ctx context.Context, classID string) { - supply := k.GetTotalSupply(ctx, classID) + 1 - k.updateTotalSupply(ctx, classID, supply) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "incrTotalSupply")() + + supply := k.GetTotalSupply(sdkCtx, classID) + 1 + k.updateTotalSupply(sdkCtx, classID, supply) } func (k Keeper) decrTotalSupply(ctx context.Context, classID string) { - supply := k.GetTotalSupply(ctx, classID) - 1 - k.updateTotalSupply(ctx, classID, supply) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "decrTotalSupply")() + + supply := k.GetTotalSupply(sdkCtx, classID) - 1 + k.updateTotalSupply(sdkCtx, classID, supply) } func (k Keeper) updateTotalSupply(ctx context.Context, classID string, supply uint64) { - store := k.storeService.OpenKVStore(ctx) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "updateTotalSupply")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) supplyKey := classTotalSupply(classID) - err := store.Set(supplyKey, sdk.Uint64ToBigEndian(supply)) + err = store.Set(supplyKey, sdk.Uint64ToBigEndian(supply)) if err != nil { panic(err) } diff --git a/x/nft/keeper/nft_batch.go b/x/nft/keeper/nft_batch.go index 889e67fe334c..d5cecb4ef978 100644 --- a/x/nft/keeper/nft_batch.go +++ b/x/nft/keeper/nft_batch.go @@ -13,19 +13,22 @@ import ( func (k Keeper) BatchMint(ctx context.Context, tokens []nft.NFT, receiver sdk.AccAddress, -) error { +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BatchMint")(&err) + checked := make(map[string]bool, len(tokens)) for _, token := range tokens { - if !checked[token.ClassId] && !k.HasClass(ctx, token.ClassId) { + if !checked[token.ClassId] && !k.HasClass(sdkCtx, token.ClassId) { return errors.Wrap(nft.ErrClassNotExists, token.ClassId) } - if k.HasNFT(ctx, token.ClassId, token.Id) { + if k.HasNFT(sdkCtx, token.ClassId, token.Id) { return errors.Wrap(nft.ErrNFTExists, token.Id) } checked[token.ClassId] = true - if err := k.mintWithNoCheck(ctx, token, receiver); err != nil { + if err = k.mintWithNoCheck(sdkCtx, token, receiver); err != nil { return err } } @@ -34,15 +37,18 @@ func (k Keeper) BatchMint(ctx context.Context, // BatchBurn defines a method for burning a batch of nfts from a specific classID. // Note: When the upper module uses this method, it needs to authenticate nft -func (k Keeper) BatchBurn(ctx context.Context, classID string, nftIDs []string) error { - if !k.HasClass(ctx, classID) { +func (k Keeper) BatchBurn(ctx context.Context, classID string, nftIDs []string) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BatchBurn")(&err) + + if !k.HasClass(sdkCtx, classID) { return errors.Wrap(nft.ErrClassNotExists, classID) } for _, nftID := range nftIDs { - if !k.HasNFT(ctx, classID, nftID) { + if !k.HasNFT(sdkCtx, classID, nftID) { return errors.Wrap(nft.ErrNFTNotExists, nftID) } - if err := k.burnWithNoCheck(ctx, classID, nftID); err != nil { + if err = k.burnWithNoCheck(sdkCtx, classID, nftID); err != nil { return err } } @@ -51,18 +57,21 @@ func (k Keeper) BatchBurn(ctx context.Context, classID string, nftIDs []string) // BatchUpdate defines a method for updating a batch of exist nfts // Note: When the upper module uses this method, it needs to authenticate nft -func (k Keeper) BatchUpdate(ctx context.Context, tokens []nft.NFT) error { +func (k Keeper) BatchUpdate(ctx context.Context, tokens []nft.NFT) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BatchUpdate")(&err) + checked := make(map[string]bool, len(tokens)) for _, token := range tokens { - if !checked[token.ClassId] && !k.HasClass(ctx, token.ClassId) { + if !checked[token.ClassId] && !k.HasClass(sdkCtx, token.ClassId) { return errors.Wrap(nft.ErrClassNotExists, token.ClassId) } - if !k.HasNFT(ctx, token.ClassId, token.Id) { + if !k.HasNFT(sdkCtx, token.ClassId, token.Id) { return errors.Wrap(nft.ErrNFTNotExists, token.Id) } checked[token.ClassId] = true - k.updateWithNoCheck(ctx, token) + k.updateWithNoCheck(sdkCtx, token) } return nil } @@ -73,15 +82,18 @@ func (k Keeper) BatchTransfer(ctx context.Context, classID string, nftIDs []string, receiver sdk.AccAddress, -) error { - if !k.HasClass(ctx, classID) { +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BatchTransfer")(&err) + + if !k.HasClass(sdkCtx, classID) { return errors.Wrap(nft.ErrClassNotExists, classID) } for _, nftID := range nftIDs { - if !k.HasNFT(ctx, classID, nftID) { + if !k.HasNFT(sdkCtx, classID, nftID) { return errors.Wrap(nft.ErrNFTNotExists, nftID) } - if err := k.transferWithNoCheck(ctx, classID, nftID, receiver); err != nil { + if err = k.transferWithNoCheck(sdkCtx, classID, nftID, receiver); err != nil { return errors.Wrap(nft.ErrNFTNotExists, nftID) } } diff --git a/x/params/keeper/grpc_query.go b/x/params/keeper/grpc_query.go index 54d1c33a17a3..f159c4229ecf 100644 --- a/x/params/keeper/grpc_query.go +++ b/x/params/keeper/grpc_query.go @@ -15,7 +15,10 @@ import ( var _ proposal.QueryServer = Keeper{} // Params returns subspace params -func (k Keeper) Params(c context.Context, req *proposal.QueryParamsRequest) (*proposal.QueryParamsResponse, error) { +func (k Keeper) Params(c context.Context, req *proposal.QueryParamsRequest) (meterResult *proposal.QueryParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.Meter(c).FuncTiming(&sdkCtx, "Params")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -29,8 +32,7 @@ func (k Keeper) Params(c context.Context, req *proposal.QueryParamsRequest) (*pr return nil, errors.Wrap(proposal.ErrUnknownSubspace, req.Subspace) } - ctx := sdk.UnwrapSDKContext(c) - rawValue := ss.GetRaw(ctx, []byte(req.Key)) + rawValue := ss.GetRaw(sdkCtx, []byte(req.Key)) param := proposal.NewParamChange(req.Subspace, req.Key, string(rawValue)) return &proposal.QueryParamsResponse{Param: param}, nil @@ -41,7 +43,10 @@ func (k Keeper) Params(c context.Context, req *proposal.QueryParamsRequest) (*pr func (k Keeper) Subspaces( goCtx context.Context, req *proposal.QuerySubspacesRequest, -) (*proposal.QuerySubspacesResponse, error) { +) (meterResult *proposal.QuerySubspacesResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Meter(goCtx).FuncTiming(&sdkCtx, "Subspaces")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -51,10 +56,9 @@ func (k Keeper) Subspaces( Subspaces: make([]*proposal.Subspace, len(spaces)), } - ctx := sdk.UnwrapSDKContext(goCtx) for i, ss := range spaces { var keys []string - ss.IterateKeys(ctx, func(key []byte) bool { + ss.IterateKeys(sdkCtx, func(key []byte) bool { keys = append(keys, string(key)) return false }) diff --git a/x/params/keeper/keeper.go b/x/params/keeper/keeper.go index 6d14eef6f9c2..f343e8bc33a7 100644 --- a/x/params/keeper/keeper.go +++ b/x/params/keeper/keeper.go @@ -1,8 +1,10 @@ package keeper import ( + "context" "cosmossdk.io/log" storetypes "cosmossdk.io/store/types" + metrics "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -12,6 +14,7 @@ import ( // Keeper of the global paramstore type Keeper struct { + meter metrics.Meter cdc codec.BinaryCodec legacyAmino *codec.LegacyAmino key storetypes.StoreKey @@ -32,6 +35,8 @@ func NewKeeper(cdc codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey // Logger returns a module-specific logger. func (k Keeper) Logger(ctx sdk.Context) log.Logger { + defer k.Meter(ctx).FuncTiming(&ctx, "Logger")() + return ctx.Logger().With("module", "x/"+proposal.ModuleName) } @@ -72,3 +77,11 @@ func (k Keeper) GetSubspaces() []types.Subspace { return spaces } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(proposal.ModuleName, metrics.Tag("svc", proposal.ModuleName)) + } + + return k.meter +} diff --git a/x/slashing/abci.go b/x/slashing/abci.go index 42a95b7b10ff..bfe81362d60f 100644 --- a/x/slashing/abci.go +++ b/x/slashing/abci.go @@ -13,15 +13,16 @@ import ( // BeginBlocker check for infraction evidence or downtime of validators // on every begin block -func BeginBlocker(ctx context.Context, k keeper.Keeper) error { +func BeginBlocker(ctx context.Context, k keeper.Keeper) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BeginBlocker")(&err) defer telemetry.ModuleMeasureSince(types.ModuleName, telemetry.Now(), telemetry.MetricKeyBeginBlocker) // Iterate over all the validators which *should* have signed this block // store whether or not they have actually signed it and slash/unbond any // which have missed too many blocks in a row (downtime slashing) - sdkCtx := sdk.UnwrapSDKContext(ctx) for _, voteInfo := range sdkCtx.VoteInfos() { - err := k.HandleValidatorSignature(ctx, voteInfo.Validator.Address, voteInfo.Validator.Power, comet.BlockIDFlag(voteInfo.BlockIdFlag)) + err = k.HandleValidatorSignature(ctx, voteInfo.Validator.Address, voteInfo.Validator.Power, comet.BlockIDFlag(voteInfo.BlockIdFlag)) if err != nil { return err } diff --git a/x/slashing/keeper/genesis.go b/x/slashing/keeper/genesis.go index bb83aabbaeeb..b97281cce89f 100644 --- a/x/slashing/keeper/genesis.go +++ b/x/slashing/keeper/genesis.go @@ -9,6 +9,9 @@ import ( // InitGenesis initializes default parameters and the keeper's address to // pubkey map. func (keeper Keeper) InitGenesis(ctx sdk.Context, stakingKeeper types.StakingKeeper, data *types.GenesisState) { + var err error + defer keeper.Meter(ctx).FuncTiming(&ctx, "InitGenesis")(&err) + stakingKeeper.IterateValidators(ctx, func(index int64, validator stakingtypes.ValidatorI) bool { consPk, err := validator.ConsPubKey() @@ -36,13 +39,13 @@ func (keeper Keeper) InitGenesis(ctx sdk.Context, stakingKeeper types.StakingKee } for _, missed := range array.MissedBlocks { - if err := keeper.SetMissedBlockBitmapValue(ctx, address, missed.Index, missed.Missed); err != nil { + if err = keeper.SetMissedBlockBitmapValue(ctx, address, missed.Index, missed.Missed); err != nil { panic(err) } } } - if err := keeper.SetParams(ctx, data.Params); err != nil { + if err = keeper.SetParams(ctx, data.Params); err != nil { panic(err) } } @@ -51,6 +54,9 @@ func (keeper Keeper) InitGenesis(ctx sdk.Context, stakingKeeper types.StakingKee // to a genesis file, which can be imported again // with InitGenesis func (keeper Keeper) ExportGenesis(ctx sdk.Context) (data *types.GenesisState) { + var err error + defer keeper.Meter(ctx).FuncTiming(&ctx, "ExportGenesis")(&err) + params, err := keeper.GetParams(ctx) if err != nil { panic(err) diff --git a/x/slashing/keeper/grpc_query.go b/x/slashing/keeper/grpc_query.go index 2edce8b78718..6339c549d695 100644 --- a/x/slashing/keeper/grpc_query.go +++ b/x/slashing/keeper/grpc_query.go @@ -11,6 +11,8 @@ import ( "github.com/cosmos/cosmos-sdk/runtime" "github.com/cosmos/cosmos-sdk/types/query" "github.com/cosmos/cosmos-sdk/x/slashing/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) var _ types.QueryServer = Querier{} @@ -24,18 +26,24 @@ func NewQuerier(keeper Keeper) Querier { } // Params returns parameters of x/slashing module -func (k Keeper) Params(ctx context.Context, req *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { +func (k Keeper) Params(ctx context.Context, req *types.QueryParamsRequest) (meterResult *types.QueryParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Params")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - params, err := k.GetParams(ctx) + params, err := k.GetParams(sdkCtx) return &types.QueryParamsResponse{Params: params}, err } // SigningInfo returns signing-info of a specific validator. -func (k Keeper) SigningInfo(ctx context.Context, req *types.QuerySigningInfoRequest) (*types.QuerySigningInfoResponse, error) { +func (k Keeper) SigningInfo(ctx context.Context, req *types.QuerySigningInfoRequest) (meterResult *types.QuerySigningInfoResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SigningInfo")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -49,7 +57,7 @@ func (k Keeper) SigningInfo(ctx context.Context, req *types.QuerySigningInfoRequ return nil, err } - signingInfo, err := k.GetValidatorSigningInfo(ctx, consAddr) + signingInfo, err := k.GetValidatorSigningInfo(sdkCtx, consAddr) if err != nil { return nil, status.Errorf(codes.NotFound, "SigningInfo not found for validator %s", req.ConsAddress) } @@ -58,18 +66,21 @@ func (k Keeper) SigningInfo(ctx context.Context, req *types.QuerySigningInfoRequ } // SigningInfos returns signing-infos of all validators. -func (k Keeper) SigningInfos(ctx context.Context, req *types.QuerySigningInfosRequest) (*types.QuerySigningInfosResponse, error) { +func (k Keeper) SigningInfos(ctx context.Context, req *types.QuerySigningInfosRequest) (meterResult *types.QuerySigningInfosResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SigningInfos")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) var signInfos []types.ValidatorSigningInfo sigInfoStore := prefix.NewStore(runtime.KVStoreAdapter(store), types.ValidatorSigningInfoKeyPrefix) pageRes, err := query.Paginate(sigInfoStore, req.Pagination, func(key, value []byte) error { var info types.ValidatorSigningInfo - err := k.cdc.Unmarshal(value, &info) + err = k.cdc.Unmarshal(value, &info) if err != nil { return err } diff --git a/x/slashing/keeper/hooks.go b/x/slashing/keeper/hooks.go index f90ba4da96d6..184183165aa8 100644 --- a/x/slashing/keeper/hooks.go +++ b/x/slashing/keeper/hooks.go @@ -25,9 +25,10 @@ func (k Keeper) Hooks() Hooks { } // AfterValidatorBonded updates the signing info start height or create a new signing info -func (h Hooks) AfterValidatorBonded(ctx context.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) error { +func (h Hooks) AfterValidatorBonded(ctx context.Context, consAddr sdk.ConsAddress, valAddr sdk.ValAddress) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) - signingInfo, err := h.k.GetValidatorSigningInfo(ctx, consAddr) + defer h.k.Meter(ctx).FuncTiming(&sdkCtx, "AfterValidatorBonded")(&err) + signingInfo, err := h.k.GetValidatorSigningInfo(sdkCtx, consAddr) if err == nil { signingInfo.StartHeight = sdkCtx.BlockHeight() } else { @@ -41,18 +42,22 @@ func (h Hooks) AfterValidatorBonded(ctx context.Context, consAddr sdk.ConsAddres ) } - return h.k.SetValidatorSigningInfo(ctx, consAddr, signingInfo) + return h.k.SetValidatorSigningInfo(sdkCtx, consAddr, signingInfo) } // AfterValidatorRemoved deletes the address-pubkey relation when a validator is removed, -func (h Hooks) AfterValidatorRemoved(ctx context.Context, consAddr sdk.ConsAddress, _ sdk.ValAddress) error { - return h.k.deleteAddrPubkeyRelation(ctx, crypto.Address(consAddr)) +func (h Hooks) AfterValidatorRemoved(ctx context.Context, consAddr sdk.ConsAddress, _ sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer h.k.Meter(ctx).FuncTiming(&sdkCtx, "AfterValidatorRemoved")(&err) + + return h.k.deleteAddrPubkeyRelation(sdkCtx, crypto.Address(consAddr)) } // AfterValidatorCreated adds the address-pubkey relation when a validator is created. -func (h Hooks) AfterValidatorCreated(ctx context.Context, valAddr sdk.ValAddress) error { +func (h Hooks) AfterValidatorCreated(ctx context.Context, valAddr sdk.ValAddress) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) - validator, err := h.k.sk.Validator(ctx, valAddr) + defer h.k.Meter(ctx).FuncTiming(&sdkCtx, "AfterValidatorCreated")(&err) + validator, err := h.k.sk.Validator(sdkCtx, valAddr) if err != nil { return err } diff --git a/x/slashing/keeper/infractions.go b/x/slashing/keeper/infractions.go index 003963069f7a..51b7ada7e6bd 100644 --- a/x/slashing/keeper/infractions.go +++ b/x/slashing/keeper/infractions.go @@ -15,16 +15,17 @@ import ( ) // HandleValidatorSignature handles a validator signature, must be called once per validator per block. -func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.Address, power int64, signed comet.BlockIDFlag) error { +func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.Address, power int64, signed comet.BlockIDFlag) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) - logger := k.Logger(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HandleValidatorSignature")(&err) + logger := k.Logger(sdkCtx) height := sdkCtx.BlockHeight() // fetch the validator public key consAddr := sdk.ConsAddress(addr) // don't update missed blocks when validator's jailed - isJailed, err := k.sk.IsValidatorJailed(ctx, consAddr) + isJailed, err := k.sk.IsValidatorJailed(sdkCtx, consAddr) if err != nil { return err } @@ -34,12 +35,12 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A } // fetch signing info - signInfo, err := k.GetValidatorSigningInfo(ctx, consAddr) + signInfo, err := k.GetValidatorSigningInfo(sdkCtx, consAddr) if err != nil { return err } - signedBlocksWindow, err := k.SignedBlocksWindow(ctx) + signedBlocksWindow, err := k.SignedBlocksWindow(sdkCtx) if err != nil { return err } @@ -53,7 +54,7 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A signInfo.IndexOffset++ // determine if the validator signed the previous block - previous, err := k.GetMissedBlockBitmapValue(ctx, consAddr, index) + previous, err := k.GetMissedBlockBitmapValue(sdkCtx, consAddr, index) if err != nil { return errors.Wrap(err, "failed to get the validator's bitmap value") } @@ -63,7 +64,7 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A case !previous && missed: // Bitmap value has changed from not missed to missed, so we flip the bit // and increment the counter. - if err := k.SetMissedBlockBitmapValue(ctx, consAddr, index, true); err != nil { + if err = k.SetMissedBlockBitmapValue(sdkCtx, consAddr, index, true); err != nil { return err } @@ -72,7 +73,7 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A case previous && !missed: // Bitmap value has changed from missed to not missed, so we flip the bit // and decrement the counter. - if err := k.SetMissedBlockBitmapValue(ctx, consAddr, index, false); err != nil { + if err = k.SetMissedBlockBitmapValue(sdkCtx, consAddr, index, false); err != nil { return err } @@ -82,7 +83,7 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A // bitmap value at this index has not changed, no need to update counter } - minSignedPerWindow, err := k.MinSignedPerWindow(ctx) + minSignedPerWindow, err := k.MinSignedPerWindow(sdkCtx) if err != nil { return err } @@ -111,7 +112,7 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A // if we are past the minimum height and the validator has missed too many blocks, punish them if height > minHeight && signInfo.MissedBlocksCounter > maxMissed { - validator, err := k.sk.ValidatorByConsAddr(ctx, consAddr) + validator, err := k.sk.ValidatorByConsAddr(sdkCtx, consAddr) if err != nil { return err } @@ -124,12 +125,12 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A // That's fine since this is just used to filter unbonding delegations & redelegations. distributionHeight := height - sdk.ValidatorUpdateDelay - 1 - slashFractionDowntime, err := k.SlashFractionDowntime(ctx) + slashFractionDowntime, err := k.SlashFractionDowntime(sdkCtx) if err != nil { return err } - coinsBurned, err := k.sk.SlashWithInfractionReason(ctx, consAddr, distributionHeight, power, slashFractionDowntime, stakingtypes.Infraction_INFRACTION_DOWNTIME) + coinsBurned, err := k.sk.SlashWithInfractionReason(sdkCtx, consAddr, distributionHeight, power, slashFractionDowntime, stakingtypes.Infraction_INFRACTION_DOWNTIME) if err != nil { return err } @@ -146,7 +147,7 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A ) k.sk.Jail(sdkCtx, consAddr) - downtimeJailDur, err := k.DowntimeJailDuration(ctx) + downtimeJailDur, err := k.DowntimeJailDuration(sdkCtx) if err != nil { return err } @@ -156,7 +157,7 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A // immediately slashed for downtime upon re-bonding. signInfo.MissedBlocksCounter = 0 signInfo.IndexOffset = 0 - err = k.DeleteMissedBlockBitmap(ctx, consAddr) + err = k.DeleteMissedBlockBitmap(sdkCtx, consAddr) if err != nil { return err } @@ -180,5 +181,5 @@ func (k Keeper) HandleValidatorSignature(ctx context.Context, addr cryptotypes.A } // Set the updated signing info - return k.SetValidatorSigningInfo(ctx, consAddr, signInfo) + return k.SetValidatorSigningInfo(sdkCtx, consAddr, signInfo) } diff --git a/x/slashing/keeper/keeper.go b/x/slashing/keeper/keeper.go index b710e78e3f94..3ed39b6c92d4 100644 --- a/x/slashing/keeper/keeper.go +++ b/x/slashing/keeper/keeper.go @@ -2,11 +2,12 @@ package keeper import ( "context" - "fmt" storetypes "cosmossdk.io/core/store" "cosmossdk.io/log" sdkmath "cosmossdk.io/math" + "fmt" + metrics "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" cryptotypes "github.com/cosmos/cosmos-sdk/crypto/types" @@ -17,6 +18,7 @@ import ( // Keeper of the slashing store type Keeper struct { + meter metrics.Meter storeService storetypes.KVStoreService cdc codec.BinaryCodec legacyAmino *codec.LegacyAmino @@ -46,23 +48,30 @@ func (k Keeper) GetAuthority() string { // Logger returns a module-specific logger. func (k Keeper) Logger(ctx context.Context) log.Logger { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Logger")() return sdkCtx.Logger().With("module", "x/"+types.ModuleName) } // AddPubkey sets a address-pubkey relation -func (k Keeper) AddPubkey(ctx context.Context, pubkey cryptotypes.PubKey) error { +func (k Keeper) AddPubkey(ctx context.Context, pubkey cryptotypes.PubKey) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "AddPubkey")(&err) + bz, err := k.cdc.MarshalInterface(pubkey) if err != nil { return err } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) key := types.AddrPubkeyRelationKey(pubkey.Address()) return store.Set(key, bz) } // GetPubkey returns the pubkey from the adddress-pubkey relation -func (k Keeper) GetPubkey(ctx context.Context, a cryptotypes.Address) (cryptotypes.PubKey, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetPubkey(ctx context.Context, a cryptotypes.Address) (meterResult cryptotypes.PubKey, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetPubkey")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.AddrPubkeyRelationKey(a)) if err != nil { return nil, err @@ -76,14 +85,20 @@ func (k Keeper) GetPubkey(ctx context.Context, a cryptotypes.Address) (cryptotyp // Slash attempts to slash a validator. The slash is delegated to the staking // module to make the necessary validator changes. It specifies no intraction reason. -func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, fraction sdkmath.LegacyDec, power, distributionHeight int64) error { - return k.SlashWithInfractionReason(ctx, consAddr, fraction, power, distributionHeight, stakingtypes.Infraction_INFRACTION_UNSPECIFIED) +func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, fraction sdkmath.LegacyDec, power, distributionHeight int64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Slash")(&err) + + return k.SlashWithInfractionReason(sdkCtx, consAddr, fraction, power, distributionHeight, stakingtypes.Infraction_INFRACTION_UNSPECIFIED) } // SlashWithInfractionReason attempts to slash a validator. The slash is delegated to the staking // module to make the necessary validator changes. It specifies an intraction reason. -func (k Keeper) SlashWithInfractionReason(ctx context.Context, consAddr sdk.ConsAddress, fraction sdkmath.LegacyDec, power, distributionHeight int64, infraction stakingtypes.Infraction) error { - coinsBurned, err := k.sk.SlashWithInfractionReason(ctx, consAddr, distributionHeight, power, fraction, infraction) +func (k Keeper) SlashWithInfractionReason(ctx context.Context, consAddr sdk.ConsAddress, fraction sdkmath.LegacyDec, power, distributionHeight int64, infraction stakingtypes.Infraction) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SlashWithInfractionReason")(&err) + + coinsBurned, err := k.sk.SlashWithInfractionReason(sdkCtx, consAddr, distributionHeight, power, fraction, infraction) if err != nil { return err } @@ -95,8 +110,6 @@ func (k Keeper) SlashWithInfractionReason(ctx context.Context, consAddr sdk.Cons case stakingtypes.Infraction_INFRACTION_DOWNTIME: reasonAttr = sdk.NewAttribute(types.AttributeKeyReason, types.AttributeValueMissingSignature) } - - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( types.EventTypeSlash, @@ -111,8 +124,9 @@ func (k Keeper) SlashWithInfractionReason(ctx context.Context, consAddr sdk.Cons // Jail attempts to jail a validator. The slash is delegated to the staking module // to make the necessary validator changes. -func (k Keeper) Jail(ctx context.Context, consAddr sdk.ConsAddress) error { +func (k Keeper) Jail(ctx context.Context, consAddr sdk.ConsAddress) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Jail")(&err) k.sk.Jail(sdkCtx, consAddr) sdkCtx.EventManager().EmitEvent( sdk.NewEvent( @@ -123,7 +137,18 @@ func (k Keeper) Jail(ctx context.Context, consAddr sdk.ConsAddress) error { return nil } -func (k Keeper) deleteAddrPubkeyRelation(ctx context.Context, addr cryptotypes.Address) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) deleteAddrPubkeyRelation(ctx context.Context, addr cryptotypes.Address) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "deleteAddrPubkeyRelation")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.AddrPubkeyRelationKey(addr)) } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter +} diff --git a/x/slashing/keeper/migrations.go b/x/slashing/keeper/migrations.go index 356db7336f1a..9eab07d40212 100644 --- a/x/slashing/keeper/migrations.go +++ b/x/slashing/keeper/migrations.go @@ -22,6 +22,7 @@ func NewMigrator(keeper Keeper, ss exported.Subspace) Migrator { // Migrate1to2 migrates from version 1 to 2. func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return v2.MigrateStore(ctx, m.keeper.storeService) } @@ -30,6 +31,7 @@ func (m Migrator) Migrate1to2(ctx sdk.Context) error { // and managed by the x/params modules and stores them directly into the x/slashing // module state. func (m Migrator) Migrate2to3(ctx sdk.Context) error { + store := runtime.KVStoreAdapter(m.keeper.storeService.OpenKVStore(ctx)) return v3.Migrate(ctx, store, m.legacySubspace, m.keeper.cdc) } @@ -38,6 +40,7 @@ func (m Migrator) Migrate2to3(ctx sdk.Context) error { // version 3 to version 4. Specifically, it migrates the validator missed block // bitmap. func (m Migrator) Migrate3to4(ctx sdk.Context) error { + store := runtime.KVStoreAdapter(m.keeper.storeService.OpenKVStore(ctx)) params, err := m.keeper.GetParams(ctx) if err != nil { diff --git a/x/slashing/keeper/msg_server.go b/x/slashing/keeper/msg_server.go index 70e5fc66d23c..8c5be37c012e 100644 --- a/x/slashing/keeper/msg_server.go +++ b/x/slashing/keeper/msg_server.go @@ -25,17 +25,19 @@ func NewMsgServerImpl(keeper Keeper) types.MsgServer { // UpdateParams implements MsgServer.UpdateParams method. // It defines a method to update the x/slashing module parameters. -func (k msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { +func (k msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParams) (meterResult *types.MsgUpdateParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "UpdateParams")(&err) + if k.authority != msg.Authority { return nil, errors.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.authority, msg.Authority) } - if err := msg.Params.Validate(); err != nil { + if err = msg.Params.Validate(); err != nil { return nil, err } - ctx := sdk.UnwrapSDKContext(goCtx) - if err := k.SetParams(ctx, msg.Params); err != nil { + if err = k.SetParams(sdkCtx, msg.Params); err != nil { return nil, err } @@ -45,14 +47,16 @@ func (k msgServer) UpdateParams(goCtx context.Context, msg *types.MsgUpdateParam // Unjail implements MsgServer.Unjail method. // Validators must submit a transaction to unjail itself after // having been jailed (and thus unbonded) for downtime -func (k msgServer) Unjail(goCtx context.Context, msg *types.MsgUnjail) (*types.MsgUnjailResponse, error) { +func (k msgServer) Unjail(goCtx context.Context, msg *types.MsgUnjail) (meterResult *types.MsgUnjailResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "Unjail")(&err) + valAddr, err := k.sk.ValidatorAddressCodec().StringToBytes(msg.ValidatorAddr) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("validator input address: %s", err) } - ctx := sdk.UnwrapSDKContext(goCtx) - if err := k.Keeper.Unjail(ctx, valAddr); err != nil { + if err = k.Keeper.Unjail(sdkCtx, valAddr); err != nil { return nil, err } diff --git a/x/slashing/keeper/params.go b/x/slashing/keeper/params.go index 5fb7fac627d2..43af84bea791 100644 --- a/x/slashing/keeper/params.go +++ b/x/slashing/keeper/params.go @@ -7,17 +7,25 @@ import ( sdkmath "cosmossdk.io/math" "github.com/cosmos/cosmos-sdk/x/slashing/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) // SignedBlocksWindow - sliding window for downtime slashing -func (k Keeper) SignedBlocksWindow(ctx context.Context) (int64, error) { - params, err := k.GetParams(ctx) +func (k Keeper) SignedBlocksWindow(ctx context.Context) (meterResult int64, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SignedBlocksWindow")(&err) + + params, err := k.GetParams(sdkCtx) return params.SignedBlocksWindow, err } // MinSignedPerWindow - minimum blocks signed per window -func (k Keeper) MinSignedPerWindow(ctx context.Context) (int64, error) { - params, err := k.GetParams(ctx) +func (k Keeper) MinSignedPerWindow(ctx context.Context) (meterResult int64, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "MinSignedPerWindow")(&err) + + params, err := k.GetParams(sdkCtx) if err != nil { return 0, err } @@ -31,26 +39,38 @@ func (k Keeper) MinSignedPerWindow(ctx context.Context) (int64, error) { } // DowntimeJailDuration - Downtime unbond duration -func (k Keeper) DowntimeJailDuration(ctx context.Context) (time.Duration, error) { - params, err := k.GetParams(ctx) +func (k Keeper) DowntimeJailDuration(ctx context.Context) (meterResult time.Duration, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DowntimeJailDuration")(&err) + + params, err := k.GetParams(sdkCtx) return params.DowntimeJailDuration, err } // SlashFractionDoubleSign - fraction of power slashed in case of double sign -func (k Keeper) SlashFractionDoubleSign(ctx context.Context) (sdkmath.LegacyDec, error) { - params, err := k.GetParams(ctx) +func (k Keeper) SlashFractionDoubleSign(ctx context.Context) (meterResult sdkmath.LegacyDec, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SlashFractionDoubleSign")(&err) + + params, err := k.GetParams(sdkCtx) return params.SlashFractionDoubleSign, err } // SlashFractionDowntime - fraction of power slashed for downtime -func (k Keeper) SlashFractionDowntime(ctx context.Context) (sdkmath.LegacyDec, error) { - params, err := k.GetParams(ctx) +func (k Keeper) SlashFractionDowntime(ctx context.Context) (meterResult sdkmath.LegacyDec, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SlashFractionDowntime")(&err) + + params, err := k.GetParams(sdkCtx) return params.SlashFractionDowntime, err } // GetParams returns the current x/slashing module parameters. func (k Keeper) GetParams(ctx context.Context) (params types.Params, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetParams")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.ParamsKey) if err != nil { return params, err @@ -65,8 +85,11 @@ func (k Keeper) GetParams(ctx context.Context) (params types.Params, err error) // SetParams sets the x/slashing module parameters. // CONTRACT: This method performs no validation of the parameters. -func (k Keeper) SetParams(ctx context.Context, params types.Params) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetParams(ctx context.Context, params types.Params) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetParams")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.cdc.Marshal(¶ms) if err != nil { return err diff --git a/x/slashing/keeper/signing_info.go b/x/slashing/keeper/signing_info.go index 97e85f4cab1b..277a232ac429 100644 --- a/x/slashing/keeper/signing_info.go +++ b/x/slashing/keeper/signing_info.go @@ -16,8 +16,11 @@ import ( // GetValidatorSigningInfo retruns the ValidatorSigningInfo for a specific validator // ConsAddress. If not found it returns ErrNoSigningInfoFound, but other errors // may be returned if there is an error reading from the store. -func (k Keeper) GetValidatorSigningInfo(ctx context.Context, address sdk.ConsAddress) (types.ValidatorSigningInfo, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetValidatorSigningInfo(ctx context.Context, address sdk.ConsAddress) (meterResult types.ValidatorSigningInfo, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorSigningInfo")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) var info types.ValidatorSigningInfo bz, err := store.Get(types.ValidatorSigningInfoKey(address)) if err != nil { @@ -35,13 +38,19 @@ func (k Keeper) GetValidatorSigningInfo(ctx context.Context, address sdk.ConsAdd // HasValidatorSigningInfo returns if a given validator has signing information // persisted. func (k Keeper) HasValidatorSigningInfo(ctx context.Context, consAddr sdk.ConsAddress) bool { - _, err := k.GetValidatorSigningInfo(ctx, consAddr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HasValidatorSigningInfo")() + + _, err := k.GetValidatorSigningInfo(sdkCtx, consAddr) return err == nil } // SetValidatorSigningInfo sets the validator signing info to a consensus address key -func (k Keeper) SetValidatorSigningInfo(ctx context.Context, address sdk.ConsAddress, info types.ValidatorSigningInfo) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetValidatorSigningInfo(ctx context.Context, address sdk.ConsAddress, info types.ValidatorSigningInfo) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidatorSigningInfo")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.cdc.Marshal(&info) if err != nil { return err @@ -53,8 +62,11 @@ func (k Keeper) SetValidatorSigningInfo(ctx context.Context, address sdk.ConsAdd // IterateValidatorSigningInfos iterates over the stored ValidatorSigningInfo func (k Keeper) IterateValidatorSigningInfos(ctx context.Context, handler func(address sdk.ConsAddress, info types.ValidatorSigningInfo) (stop bool), -) error { - store := k.storeService.OpenKVStore(ctx) +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateValidatorSigningInfos")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) iter, err := store.Iterator(types.ValidatorSigningInfoKeyPrefix, storetypes.PrefixEndBytes(types.ValidatorSigningInfoKeyPrefix)) if err != nil { return err @@ -77,20 +89,26 @@ func (k Keeper) IterateValidatorSigningInfos(ctx context.Context, // JailUntil attempts to set a validator's JailedUntil attribute in its signing // info. It will panic if the signing info does not exist for the validator. -func (k Keeper) JailUntil(ctx context.Context, consAddr sdk.ConsAddress, jailTime time.Time) error { - signInfo, err := k.GetValidatorSigningInfo(ctx, consAddr) +func (k Keeper) JailUntil(ctx context.Context, consAddr sdk.ConsAddress, jailTime time.Time) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "JailUntil")(&err) + + signInfo, err := k.GetValidatorSigningInfo(sdkCtx, consAddr) if err != nil { return errors.Wrap(err, "cannot jail validator that does not have any signing information") } signInfo.JailedUntil = jailTime - return k.SetValidatorSigningInfo(ctx, consAddr, signInfo) + return k.SetValidatorSigningInfo(sdkCtx, consAddr, signInfo) } // Tombstone attempts to tombstone a validator. It will panic if signing info for // the given validator does not exist. -func (k Keeper) Tombstone(ctx context.Context, consAddr sdk.ConsAddress) error { - signInfo, err := k.GetValidatorSigningInfo(ctx, consAddr) +func (k Keeper) Tombstone(ctx context.Context, consAddr sdk.ConsAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Tombstone")(&err) + + signInfo, err := k.GetValidatorSigningInfo(sdkCtx, consAddr) if err != nil { return types.ErrNoSigningInfoFound.Wrap("cannot tombstone validator that does not have any signing information") } @@ -100,12 +118,15 @@ func (k Keeper) Tombstone(ctx context.Context, consAddr sdk.ConsAddress) error { } signInfo.Tombstoned = true - return k.SetValidatorSigningInfo(ctx, consAddr, signInfo) + return k.SetValidatorSigningInfo(sdkCtx, consAddr, signInfo) } // IsTombstoned returns if a given validator by consensus address is tombstoned. func (k Keeper) IsTombstoned(ctx context.Context, consAddr sdk.ConsAddress) bool { - signInfo, err := k.GetValidatorSigningInfo(ctx, consAddr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IsTombstoned")() + + signInfo, err := k.GetValidatorSigningInfo(sdkCtx, consAddr) if err != nil { return false } @@ -115,16 +136,22 @@ func (k Keeper) IsTombstoned(ctx context.Context, consAddr sdk.ConsAddress) bool // getMissedBlockBitmapChunk gets the bitmap chunk at the given chunk index for // a validator's missed block signing window. -func (k Keeper) getMissedBlockBitmapChunk(ctx context.Context, addr sdk.ConsAddress, chunkIndex int64) ([]byte, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) getMissedBlockBitmapChunk(ctx context.Context, addr sdk.ConsAddress, chunkIndex int64) (meterResult []byte, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getMissedBlockBitmapChunk")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) chunk, err := store.Get(types.ValidatorMissedBlockBitmapKey(addr, chunkIndex)) return chunk, err } // setMissedBlockBitmapChunk sets the bitmap chunk at the given chunk index for // a validator's missed block signing window. -func (k Keeper) setMissedBlockBitmapChunk(ctx context.Context, addr sdk.ConsAddress, chunkIndex int64, chunk []byte) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) setMissedBlockBitmapChunk(ctx context.Context, addr sdk.ConsAddress, chunkIndex int64, chunk []byte) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "setMissedBlockBitmapChunk")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) key := types.ValidatorMissedBlockBitmapKey(addr, chunkIndex) return store.Set(key, chunk) } @@ -135,18 +162,21 @@ func (k Keeper) setMissedBlockBitmapChunk(ctx context.Context, addr sdk.ConsAddr // where each bit represents a height, and is determined by the validator's // IndexOffset modulo SignedBlocksWindow. This index is used to fetch the chunk // in the bitmap and the relative bit in that chunk. -func (k Keeper) GetMissedBlockBitmapValue(ctx context.Context, addr sdk.ConsAddress, index int64) (bool, error) { +func (k Keeper) GetMissedBlockBitmapValue(ctx context.Context, addr sdk.ConsAddress, index int64) (meterResult bool, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetMissedBlockBitmapValue")(&err) + // get the chunk or "word" in the logical bitmap chunkIndex := index / types.MissedBlockBitmapChunkSize bs := bitset.New(uint(types.MissedBlockBitmapChunkSize)) - chunk, err := k.getMissedBlockBitmapChunk(ctx, addr, chunkIndex) + chunk, err := k.getMissedBlockBitmapChunk(sdkCtx, addr, chunkIndex) if err != nil { return false, errors.Wrapf(err, "failed to get bitmap chunk; index: %d", index) } if chunk != nil { - if err := bs.UnmarshalBinary(chunk); err != nil { + if err = bs.UnmarshalBinary(chunk); err != nil { return false, errors.Wrapf(err, "failed to decode bitmap chunk; index: %d", index) } } @@ -164,18 +194,21 @@ func (k Keeper) GetMissedBlockBitmapValue(ctx context.Context, addr sdk.ConsAddr // determined by the validator's IndexOffset modulo SignedBlocksWindow. This // index is used to fetch the chunk in the bitmap and the relative bit in that // chunk. -func (k Keeper) SetMissedBlockBitmapValue(ctx context.Context, addr sdk.ConsAddress, index int64, missed bool) error { +func (k Keeper) SetMissedBlockBitmapValue(ctx context.Context, addr sdk.ConsAddress, index int64, missed bool) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetMissedBlockBitmapValue")(&err) + // get the chunk or "word" in the logical bitmap chunkIndex := index / types.MissedBlockBitmapChunkSize bs := bitset.New(uint(types.MissedBlockBitmapChunkSize)) - chunk, err := k.getMissedBlockBitmapChunk(ctx, addr, chunkIndex) + chunk, err := k.getMissedBlockBitmapChunk(sdkCtx, addr, chunkIndex) if err != nil { return errors.Wrapf(err, "failed to get bitmap chunk; index: %d", index) } if chunk != nil { - if err := bs.UnmarshalBinary(chunk); err != nil { + if err = bs.UnmarshalBinary(chunk); err != nil { return errors.Wrapf(err, "failed to decode bitmap chunk; index: %d", index) } } @@ -193,13 +226,16 @@ func (k Keeper) SetMissedBlockBitmapValue(ctx context.Context, addr sdk.ConsAddr return errors.Wrapf(err, "failed to encode bitmap chunk; index: %d", index) } - k.setMissedBlockBitmapChunk(ctx, addr, chunkIndex, updatedChunk) + k.setMissedBlockBitmapChunk(sdkCtx, addr, chunkIndex, updatedChunk) return nil } // DeleteMissedBlockBitmap removes a validator's missed block bitmap from state. -func (k Keeper) DeleteMissedBlockBitmap(ctx context.Context, addr sdk.ConsAddress) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteMissedBlockBitmap(ctx context.Context, addr sdk.ConsAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteMissedBlockBitmap")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := types.ValidatorMissedBlockBitmapPrefixKey(addr) iter, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -222,8 +258,11 @@ func (k Keeper) DeleteMissedBlockBitmap(ctx context.Context, addr sdk.ConsAddres // // Note: A callback will only be executed over all bitmap chunks that exist in // state. -func (k Keeper) IterateMissedBlockBitmap(ctx context.Context, addr sdk.ConsAddress, cb func(index int64, missed bool) (stop bool)) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) IterateMissedBlockBitmap(ctx context.Context, addr sdk.ConsAddress, cb func(index int64, missed bool) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateMissedBlockBitmap")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := types.ValidatorMissedBlockBitmapPrefixKey(addr) iter, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -235,7 +274,7 @@ func (k Keeper) IterateMissedBlockBitmap(ctx context.Context, addr sdk.ConsAddre for ; iter.Valid(); iter.Next() { bs := bitset.New(uint(types.MissedBlockBitmapChunkSize)) - if err := bs.UnmarshalBinary(iter.Value()); err != nil { + if err = bs.UnmarshalBinary(iter.Value()); err != nil { return errors.Wrapf(err, "failed to decode bitmap chunk; index: %v", string(iter.Key())) } @@ -252,14 +291,17 @@ func (k Keeper) IterateMissedBlockBitmap(ctx context.Context, addr sdk.ConsAddre } // GetValidatorMissedBlocks returns array of missed blocks for given validator. -func (k Keeper) GetValidatorMissedBlocks(ctx context.Context, addr sdk.ConsAddress) ([]types.MissedBlock, error) { - signedBlocksWindow, err := k.SignedBlocksWindow(ctx) +func (k Keeper) GetValidatorMissedBlocks(ctx context.Context, addr sdk.ConsAddress) (meterResult []types.MissedBlock, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorMissedBlocks")(&err) + + signedBlocksWindow, err := k.SignedBlocksWindow(sdkCtx) if err != nil { return nil, err } missedBlocks := make([]types.MissedBlock, 0, signedBlocksWindow) - err = k.IterateMissedBlockBitmap(ctx, addr, func(index int64, missed bool) (stop bool) { + err = k.IterateMissedBlockBitmap(sdkCtx, addr, func(index int64, missed bool) (stop bool) { if missed { missedBlocks = append(missedBlocks, types.NewMissedBlock(index, missed)) } diff --git a/x/slashing/keeper/unjail.go b/x/slashing/keeper/unjail.go index b3ab0706e243..7c7260fcb00f 100644 --- a/x/slashing/keeper/unjail.go +++ b/x/slashing/keeper/unjail.go @@ -11,8 +11,11 @@ import ( // Unjail calls the staking Unjail function to unjail a validator if the // jailed period has concluded -func (k Keeper) Unjail(ctx context.Context, validatorAddr sdk.ValAddress) error { - validator, err := k.sk.Validator(ctx, validatorAddr) +func (k Keeper) Unjail(ctx context.Context, validatorAddr sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Unjail")(&err) + + validator, err := k.sk.Validator(sdkCtx, validatorAddr) if err != nil { return err } @@ -21,7 +24,7 @@ func (k Keeper) Unjail(ctx context.Context, validatorAddr sdk.ValAddress) error } // cannot be unjailed if no self-delegation exists - selfDel, err := k.sk.Delegation(ctx, sdk.AccAddress(validatorAddr), validatorAddr) + selfDel, err := k.sk.Delegation(sdkCtx, sdk.AccAddress(validatorAddr), validatorAddr) if err != nil { return err } @@ -55,7 +58,7 @@ func (k Keeper) Unjail(ctx context.Context, validatorAddr sdk.ValAddress) error // that the validator was never bonded and must've been jailed due to falling // below their minimum self-delegation. The validator can unjail at any point // assuming they've now bonded above their minimum self-delegation. - info, err := k.GetValidatorSigningInfo(ctx, consAddr) + info, err := k.GetValidatorSigningInfo(sdkCtx, consAddr) if err == nil { // cannot be unjailed if tombstoned if info.Tombstoned { @@ -63,11 +66,10 @@ func (k Keeper) Unjail(ctx context.Context, validatorAddr sdk.ValAddress) error } // cannot be unjailed until out of jail - sdkCtx := sdk.UnwrapSDKContext(ctx) if sdkCtx.BlockHeader().Time.Before(info.JailedUntil) { return types.ErrValidatorJailed } } - return k.sk.Unjail(ctx, consAddr) + return k.sk.Unjail(sdkCtx, consAddr) } diff --git a/x/staking/keeper/abci.go b/x/staking/keeper/abci.go index 8131fa6dd16f..4a9cab80ab04 100644 --- a/x/staking/keeper/abci.go +++ b/x/staking/keeper/abci.go @@ -7,17 +7,25 @@ import ( "github.com/cosmos/cosmos-sdk/telemetry" "github.com/cosmos/cosmos-sdk/x/staking/types" + + sdk "github.com/cosmos/cosmos-sdk/types" ) // BeginBlocker will persist the current header and validator set as a historical entry // and prune the oldest entry based on the HistoricalEntries parameter -func (k *Keeper) BeginBlocker(ctx context.Context) error { +func (k *Keeper) BeginBlocker(ctx context.Context) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BeginBlocker")(&err) + defer telemetry.ModuleMeasureSince(types.ModuleName, telemetry.Now(), telemetry.MetricKeyBeginBlocker) - return k.TrackHistoricalInfo(ctx) + return k.TrackHistoricalInfo(sdkCtx) } // EndBlocker called at every block, update validator set -func (k *Keeper) EndBlocker(ctx context.Context) ([]abci.ValidatorUpdate, error) { +func (k *Keeper) EndBlocker(ctx context.Context) (meterResult []abci.ValidatorUpdate, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "EndBlocker")(&err) + defer telemetry.ModuleMeasureSince(types.ModuleName, telemetry.Now(), telemetry.MetricKeyEndBlocker) - return k.BlockValidatorUpdates(ctx) + return k.BlockValidatorUpdates(sdkCtx) } diff --git a/x/staking/keeper/alias_functions.go b/x/staking/keeper/alias_functions.go index 4379043cc6d6..01ac9d7402c8 100644 --- a/x/staking/keeper/alias_functions.go +++ b/x/staking/keeper/alias_functions.go @@ -12,8 +12,11 @@ import ( // Validator Set // IterateValidators iterates through the validator set and perform the provided function -func (k Keeper) IterateValidators(ctx context.Context, fn func(index int64, validator types.ValidatorI) (stop bool)) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) IterateValidators(ctx context.Context, fn func(index int64, validator types.ValidatorI) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateValidators")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) iterator, err := store.Iterator(types.ValidatorsKey, storetypes.PrefixEndBytes(types.ValidatorsKey)) if err != nil { return err @@ -39,9 +42,12 @@ func (k Keeper) IterateValidators(ctx context.Context, fn func(index int64, vali } // IterateBondedValidatorsByPower iterates through the bonded validator set and perform the provided function -func (k Keeper) IterateBondedValidatorsByPower(ctx context.Context, fn func(index int64, validator types.ValidatorI) (stop bool)) error { - store := k.storeService.OpenKVStore(ctx) - maxValidators, err := k.MaxValidators(ctx) +func (k Keeper) IterateBondedValidatorsByPower(ctx context.Context, fn func(index int64, validator types.ValidatorI) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateBondedValidatorsByPower")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) + maxValidators, err := k.MaxValidators(sdkCtx) if err != nil { return err } @@ -55,7 +61,7 @@ func (k Keeper) IterateBondedValidatorsByPower(ctx context.Context, fn func(inde i := int64(0) for ; iterator.Valid() && i < int64(maxValidators); iterator.Next() { address := iterator.Value() - validator := k.mustGetValidator(ctx, address) + validator := k.mustGetValidator(sdkCtx, address) if validator.IsBonded() { stop := fn(i, validator) // XXX is this safe will the validator unexposed fields be able to get written to? @@ -70,8 +76,11 @@ func (k Keeper) IterateBondedValidatorsByPower(ctx context.Context, fn func(inde } // IterateLastValidators iterates through the active validator set and perform the provided function -func (k Keeper) IterateLastValidators(ctx context.Context, fn func(index int64, validator types.ValidatorI) (stop bool)) error { - iterator, err := k.LastValidatorsIterator(ctx) +func (k Keeper) IterateLastValidators(ctx context.Context, fn func(index int64, validator types.ValidatorI) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateLastValidators")(&err) + + iterator, err := k.LastValidatorsIterator(sdkCtx) if err != nil { return err } @@ -82,7 +91,7 @@ func (k Keeper) IterateLastValidators(ctx context.Context, fn func(index int64, for ; iterator.Valid(); iterator.Next() { address := types.AddressFromLastValidatorPowerKey(iterator.Key()) - validator, err := k.GetValidator(ctx, address) + validator, err := k.GetValidator(sdkCtx, address) if err != nil { return err } @@ -97,13 +106,19 @@ func (k Keeper) IterateLastValidators(ctx context.Context, fn func(index int64, } // Validator gets the Validator interface for a particular address -func (k Keeper) Validator(ctx context.Context, address sdk.ValAddress) (types.ValidatorI, error) { - return k.GetValidator(ctx, address) +func (k Keeper) Validator(ctx context.Context, address sdk.ValAddress) (meterResult types.ValidatorI, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Validator")(&err) + + return k.GetValidator(sdkCtx, address) } // ValidatorByConsAddr gets the validator interface for a particular pubkey -func (k Keeper) ValidatorByConsAddr(ctx context.Context, addr sdk.ConsAddress) (types.ValidatorI, error) { - return k.GetValidatorByConsAddr(ctx, addr) +func (k Keeper) ValidatorByConsAddr(ctx context.Context, addr sdk.ConsAddress) (meterResult types.ValidatorI, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ValidatorByConsAddr")(&err) + + return k.GetValidatorByConsAddr(sdkCtx, addr) } // Delegation Set @@ -114,8 +129,11 @@ func (k Keeper) GetValidatorSet() types.ValidatorSet { } // Delegation gets the delegation interface for a particular set of delegator and validator addresses -func (k Keeper) Delegation(ctx context.Context, addrDel sdk.AccAddress, addrVal sdk.ValAddress) (types.DelegationI, error) { - bond, err := k.GetDelegation(ctx, addrDel, addrVal) +func (k Keeper) Delegation(ctx context.Context, addrDel sdk.AccAddress, addrVal sdk.ValAddress) (meterResult types.DelegationI, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Delegation")(&err) + + bond, err := k.GetDelegation(sdkCtx, addrDel, addrVal) if err != nil { return nil, err } @@ -126,8 +144,11 @@ func (k Keeper) Delegation(ctx context.Context, addrDel sdk.AccAddress, addrVal // IterateDelegations iterates through all of the delegations from a delegator func (k Keeper) IterateDelegations(ctx context.Context, delAddr sdk.AccAddress, fn func(index int64, del types.DelegationI) (stop bool), -) error { - store := k.storeService.OpenKVStore(ctx) +) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateDelegations")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) delegatorPrefixKey := types.GetDelegationsKey(delAddr) iterator, err := store.Iterator(delegatorPrefixKey, storetypes.PrefixEndBytes(delegatorPrefixKey)) if err != nil { @@ -154,7 +175,10 @@ func (k Keeper) IterateDelegations(ctx context.Context, delAddr sdk.AccAddress, // GetAllSDKDelegations returns all delegations used during genesis dump // TODO: remove this func, change all usage for iterate functionality func (k Keeper) GetAllSDKDelegations(ctx context.Context) (delegations []types.Delegation, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllSDKDelegations")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) iterator, err := store.Iterator(types.DelegationKey, storetypes.PrefixEndBytes(types.DelegationKey)) if err != nil { return delegations, err diff --git a/x/staking/keeper/delegation.go b/x/staking/keeper/delegation.go index 606cb1e51c89..afa365556b4d 100644 --- a/x/staking/keeper/delegation.go +++ b/x/staking/keeper/delegation.go @@ -18,8 +18,11 @@ import ( ) // GetDelegation returns a specific delegation. -func (k Keeper) GetDelegation(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (types.Delegation, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetDelegation(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (meterResult types.Delegation, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDelegation")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) key := types.GetDelegationKey(delAddr, valAddr) value, err := store.Get(key) @@ -35,8 +38,11 @@ func (k Keeper) GetDelegation(ctx context.Context, delAddr sdk.AccAddress, valAd } // IterateAllDelegations iterates through all of the delegations. -func (k Keeper) IterateAllDelegations(ctx context.Context, cb func(delegation types.Delegation) (stop bool)) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) IterateAllDelegations(ctx context.Context, cb func(delegation types.Delegation) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateAllDelegations")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) iterator, err := store.Iterator(types.DelegationKey, storetypes.PrefixEndBytes(types.DelegationKey)) if err != nil { return err @@ -55,7 +61,10 @@ func (k Keeper) IterateAllDelegations(ctx context.Context, cb func(delegation ty // GetAllDelegations returns all delegations used during genesis dump. func (k Keeper) GetAllDelegations(ctx context.Context) (delegations []types.Delegation, err error) { - err = k.IterateAllDelegations(ctx, func(delegation types.Delegation) bool { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllDelegations")(&err) + + err = k.IterateAllDelegations(sdkCtx, func(delegation types.Delegation) bool { delegations = append(delegations, delegation) return false }) @@ -66,7 +75,10 @@ func (k Keeper) GetAllDelegations(ctx context.Context) (delegations []types.Dele // GetValidatorDelegations returns all delegations to a specific validator. // Useful for querier. func (k Keeper) GetValidatorDelegations(ctx context.Context, valAddr sdk.ValAddress) (delegations []types.Delegation, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorDelegations")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := types.GetDelegationsByValPrefixKey(valAddr) iterator, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -86,7 +98,7 @@ func (k Keeper) GetValidatorDelegations(ctx context.Context, valAddr sdk.ValAddr return delegations, err } - if err := k.cdc.Unmarshal(bz, &delegation); err != nil { + if err = k.cdc.Unmarshal(bz, &delegation); err != nil { return delegations, err } @@ -99,8 +111,11 @@ func (k Keeper) GetValidatorDelegations(ctx context.Context, valAddr sdk.ValAddr // GetDelegatorDelegations returns a given amount of all the delegations from a // delegator. func (k Keeper) GetDelegatorDelegations(ctx context.Context, delegator sdk.AccAddress, maxRetrieve uint16) (delegations []types.Delegation, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDelegatorDelegations")(&err) + delegations = make([]types.Delegation, maxRetrieve) - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) delegatorPrefixKey := types.GetDelegationsKey(delegator) iterator, err := store.Iterator(delegatorPrefixKey, storetypes.PrefixEndBytes(delegatorPrefixKey)) @@ -123,7 +138,10 @@ func (k Keeper) GetDelegatorDelegations(ctx context.Context, delegator sdk.AccAd } // SetDelegation sets a delegation. -func (k Keeper) SetDelegation(ctx context.Context, delegation types.Delegation) error { +func (k Keeper) SetDelegation(ctx context.Context, delegation types.Delegation) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetDelegation")(&err) + delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(delegation.DelegatorAddress) if err != nil { return err @@ -134,7 +152,7 @@ func (k Keeper) SetDelegation(ctx context.Context, delegation types.Delegation) return err } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) b := types.MustMarshalDelegation(k.cdc, delegation) err = store.Set(types.GetDelegationKey(delegatorAddress, valAddr), b) if err != nil { @@ -146,7 +164,10 @@ func (k Keeper) SetDelegation(ctx context.Context, delegation types.Delegation) } // RemoveDelegation removes a delegation -func (k Keeper) RemoveDelegation(ctx context.Context, delegation types.Delegation) error { +func (k Keeper) RemoveDelegation(ctx context.Context, delegation types.Delegation) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "RemoveDelegation")(&err) + delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(delegation.DelegatorAddress) if err != nil { return err @@ -158,11 +179,11 @@ func (k Keeper) RemoveDelegation(ctx context.Context, delegation types.Delegatio } // TODO: Consider calling hooks outside of the store wrapper functions, it's unobvious. - if err := k.Hooks().BeforeDelegationRemoved(ctx, delegatorAddress, valAddr); err != nil { + if err = k.Hooks().BeforeDelegationRemoved(sdkCtx, delegatorAddress, valAddr); err != nil { return err } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) err = store.Delete(types.GetDelegationKey(delegatorAddress, valAddr)) if err != nil { return err @@ -173,9 +194,12 @@ func (k Keeper) RemoveDelegation(ctx context.Context, delegation types.Delegatio // GetUnbondingDelegations returns a given amount of all the delegator unbonding-delegations. func (k Keeper) GetUnbondingDelegations(ctx context.Context, delegator sdk.AccAddress, maxRetrieve uint16) (unbondingDelegations []types.UnbondingDelegation, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetUnbondingDelegations")(&err) + unbondingDelegations = make([]types.UnbondingDelegation, maxRetrieve) - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) delegatorPrefixKey := types.GetUBDsKey(delegator) iterator, err := store.Iterator(delegatorPrefixKey, storetypes.PrefixEndBytes(delegatorPrefixKey)) @@ -199,7 +223,10 @@ func (k Keeper) GetUnbondingDelegations(ctx context.Context, delegator sdk.AccAd // GetUnbondingDelegation returns a unbonding delegation. func (k Keeper) GetUnbondingDelegation(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (ubd types.UnbondingDelegation, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetUnbondingDelegation")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) key := types.GetUBDKey(delAddr, valAddr) value, err := store.Get(key) if err != nil { @@ -216,7 +243,10 @@ func (k Keeper) GetUnbondingDelegation(ctx context.Context, delAddr sdk.AccAddre // GetUnbondingDelegationsFromValidator returns all unbonding delegations from a // particular validator. func (k Keeper) GetUnbondingDelegationsFromValidator(ctx context.Context, valAddr sdk.ValAddress) (ubds []types.UnbondingDelegation, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetUnbondingDelegationsFromValidator")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := types.GetUBDsByValIndexKey(valAddr) iterator, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -241,8 +271,11 @@ func (k Keeper) GetUnbondingDelegationsFromValidator(ctx context.Context, valAdd } // IterateUnbondingDelegations iterates through all of the unbonding delegations. -func (k Keeper) IterateUnbondingDelegations(ctx context.Context, fn func(index int64, ubd types.UnbondingDelegation) (stop bool)) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) IterateUnbondingDelegations(ctx context.Context, fn func(index int64, ubd types.UnbondingDelegation) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateUnbondingDelegations")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := types.UnbondingDelegationKey iterator, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -265,9 +298,12 @@ func (k Keeper) IterateUnbondingDelegations(ctx context.Context, fn func(index i } // GetDelegatorUnbonding returns the total amount a delegator has unbonding. -func (k Keeper) GetDelegatorUnbonding(ctx context.Context, delegator sdk.AccAddress) (math.Int, error) { +func (k Keeper) GetDelegatorUnbonding(ctx context.Context, delegator sdk.AccAddress) (meterResult math.Int, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDelegatorUnbonding")(&err) + unbonding := math.ZeroInt() - err := k.IterateDelegatorUnbondingDelegations(ctx, delegator, func(ubd types.UnbondingDelegation) bool { + err = k.IterateDelegatorUnbondingDelegations(sdkCtx, delegator, func(ubd types.UnbondingDelegation) bool { for _, entry := range ubd.Entries { unbonding = unbonding.Add(entry.Balance) } @@ -277,8 +313,11 @@ func (k Keeper) GetDelegatorUnbonding(ctx context.Context, delegator sdk.AccAddr } // IterateDelegatorUnbondingDelegations iterates through a delegator's unbonding delegations. -func (k Keeper) IterateDelegatorUnbondingDelegations(ctx context.Context, delegator sdk.AccAddress, cb func(ubd types.UnbondingDelegation) (stop bool)) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) IterateDelegatorUnbondingDelegations(ctx context.Context, delegator sdk.AccAddress, cb func(ubd types.UnbondingDelegation) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateDelegatorUnbondingDelegations")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := types.GetUBDsKey(delegator) iterator, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -300,15 +339,18 @@ func (k Keeper) IterateDelegatorUnbondingDelegations(ctx context.Context, delega } // GetDelegatorBonded returs the total amount a delegator has bonded. -func (k Keeper) GetDelegatorBonded(ctx context.Context, delegator sdk.AccAddress) (math.Int, error) { +func (k Keeper) GetDelegatorBonded(ctx context.Context, delegator sdk.AccAddress) (meterResult math.Int, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDelegatorBonded")(&err) + bonded := math.LegacyZeroDec() - err := k.IterateDelegatorDelegations(ctx, delegator, func(delegation types.Delegation) bool { + err = k.IterateDelegatorDelegations(sdkCtx, delegator, func(delegation types.Delegation) bool { validatorAddr, err := k.validatorAddressCodec.StringToBytes(delegation.ValidatorAddress) if err != nil { panic(err) // shouldn't happen } - validator, err := k.GetValidator(ctx, validatorAddr) + validator, err := k.GetValidator(sdkCtx, validatorAddr) if err == nil { shares := delegation.Shares tokens := validator.TokensFromSharesTruncated(shares) @@ -320,8 +362,11 @@ func (k Keeper) GetDelegatorBonded(ctx context.Context, delegator sdk.AccAddress } // IterateDelegatorDelegations iterates through one delegator's delegations. -func (k Keeper) IterateDelegatorDelegations(ctx context.Context, delegator sdk.AccAddress, cb func(delegation types.Delegation) (stop bool)) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) IterateDelegatorDelegations(ctx context.Context, delegator sdk.AccAddress, cb func(delegation types.Delegation) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateDelegatorDelegations")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := types.GetDelegationsKey(delegator) iterator, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -342,8 +387,11 @@ func (k Keeper) IterateDelegatorDelegations(ctx context.Context, delegator sdk.A } // IterateDelegatorRedelegations iterates through one delegator's redelegations. -func (k Keeper) IterateDelegatorRedelegations(ctx context.Context, delegator sdk.AccAddress, cb func(red types.Redelegation) (stop bool)) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) IterateDelegatorRedelegations(ctx context.Context, delegator sdk.AccAddress, cb func(red types.Redelegation) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateDelegatorRedelegations")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) delegatorPrefixKey := types.GetREDsKey(delegator) iterator, err := store.Iterator(delegatorPrefixKey, storetypes.PrefixEndBytes(delegatorPrefixKey)) if err != nil { @@ -363,13 +411,16 @@ func (k Keeper) IterateDelegatorRedelegations(ctx context.Context, delegator sdk } // HasMaxUnbondingDelegationEntries checks if unbonding delegation has maximum number of entries. -func (k Keeper) HasMaxUnbondingDelegationEntries(ctx context.Context, delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress) (bool, error) { - ubd, err := k.GetUnbondingDelegation(ctx, delegatorAddr, validatorAddr) +func (k Keeper) HasMaxUnbondingDelegationEntries(ctx context.Context, delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress) (meterResult bool, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HasMaxUnbondingDelegationEntries")(&err) + + ubd, err := k.GetUnbondingDelegation(sdkCtx, delegatorAddr, validatorAddr) if err != nil && !errors.Is(err, types.ErrNoUnbondingDelegation) { return false, err } - maxEntries, err := k.MaxEntries(ctx) + maxEntries, err := k.MaxEntries(sdkCtx) if err != nil { return false, err } @@ -377,13 +428,16 @@ func (k Keeper) HasMaxUnbondingDelegationEntries(ctx context.Context, delegatorA } // SetUnbondingDelegation sets the unbonding delegation and associated index. -func (k Keeper) SetUnbondingDelegation(ctx context.Context, ubd types.UnbondingDelegation) error { +func (k Keeper) SetUnbondingDelegation(ctx context.Context, ubd types.UnbondingDelegation) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetUnbondingDelegation")(&err) + delAddr, err := k.authKeeper.AddressCodec().StringToBytes(ubd.DelegatorAddress) if err != nil { return err } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) bz := types.MustMarshalUBD(k.cdc, ubd) valAddr, err := k.validatorAddressCodec.StringToBytes(ubd.ValidatorAddress) if err != nil { @@ -399,13 +453,16 @@ func (k Keeper) SetUnbondingDelegation(ctx context.Context, ubd types.UnbondingD } // RemoveUnbondingDelegation removes the unbonding delegation object and associated index. -func (k Keeper) RemoveUnbondingDelegation(ctx context.Context, ubd types.UnbondingDelegation) error { +func (k Keeper) RemoveUnbondingDelegation(ctx context.Context, ubd types.UnbondingDelegation) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "RemoveUnbondingDelegation")(&err) + delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(ubd.DelegatorAddress) if err != nil { return err } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) addr, err := k.validatorAddressCodec.StringToBytes(ubd.ValidatorAddress) if err != nil { return err @@ -424,14 +481,17 @@ func (k Keeper) RemoveUnbondingDelegation(ctx context.Context, ubd types.Unbondi func (k Keeper) SetUnbondingDelegationEntry( ctx context.Context, delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, creationHeight int64, minTime time.Time, balance math.Int, -) (types.UnbondingDelegation, error) { - id, err := k.IncrementUnbondingID(ctx) +) (meterResult types.UnbondingDelegation, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetUnbondingDelegationEntry")(&err) + + id, err := k.IncrementUnbondingID(sdkCtx) if err != nil { return types.UnbondingDelegation{}, err } isNewUbdEntry := true - ubd, err := k.GetUnbondingDelegation(ctx, delegatorAddr, validatorAddr) + ubd, err := k.GetUnbondingDelegation(sdkCtx, delegatorAddr, validatorAddr) if err == nil { isNewUbdEntry = ubd.AddEntry(creationHeight, minTime, balance, id) } else if errors.Is(err, types.ErrNoUnbondingDelegation) { @@ -440,7 +500,7 @@ func (k Keeper) SetUnbondingDelegationEntry( return ubd, err } - if err = k.SetUnbondingDelegation(ctx, ubd); err != nil { + if err = k.SetUnbondingDelegation(sdkCtx, ubd); err != nil { return ubd, err } @@ -448,12 +508,12 @@ func (k Keeper) SetUnbondingDelegationEntry( // calls to AfterUnbondingInitiated are not idempotent if isNewUbdEntry { // Add to the UBDByUnbondingOp index to look up the UBD by the UBDE ID - if err = k.SetUnbondingDelegationByUnbondingID(ctx, ubd, id); err != nil { + if err = k.SetUnbondingDelegationByUnbondingID(sdkCtx, ubd, id); err != nil { return ubd, err } - if err := k.Hooks().AfterUnbondingInitiated(ctx, id); err != nil { - k.Logger(ctx).Error("failed to call after unbonding initiated hook", "error", err) + if err = k.Hooks().AfterUnbondingInitiated(sdkCtx, id); err != nil { + k.Logger(sdkCtx).Error("failed to call after unbonding initiated hook", "error", err) } } return ubd, nil @@ -465,7 +525,10 @@ func (k Keeper) SetUnbondingDelegationEntry( // is a slice of DVPairs corresponding to unbonding delegations that expire at a // certain time. func (k Keeper) GetUBDQueueTimeSlice(ctx context.Context, timestamp time.Time) (dvPairs []types.DVPair, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetUBDQueueTimeSlice")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.GetUnbondingDelegationTimeKey(timestamp)) if bz == nil || err != nil { @@ -479,8 +542,11 @@ func (k Keeper) GetUBDQueueTimeSlice(ctx context.Context, timestamp time.Time) ( } // SetUBDQueueTimeSlice sets a specific unbonding queue timeslice. -func (k Keeper) SetUBDQueueTimeSlice(ctx context.Context, timestamp time.Time, keys []types.DVPair) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetUBDQueueTimeSlice(ctx context.Context, timestamp time.Time, keys []types.DVPair) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetUBDQueueTimeSlice")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.cdc.Marshal(&types.DVPairs{Pairs: keys}) if err != nil { return err @@ -490,28 +556,34 @@ func (k Keeper) SetUBDQueueTimeSlice(ctx context.Context, timestamp time.Time, k // InsertUBDQueue inserts an unbonding delegation to the appropriate timeslice // in the unbonding queue. -func (k Keeper) InsertUBDQueue(ctx context.Context, ubd types.UnbondingDelegation, completionTime time.Time) error { +func (k Keeper) InsertUBDQueue(ctx context.Context, ubd types.UnbondingDelegation, completionTime time.Time) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "InsertUBDQueue")(&err) + dvPair := types.DVPair{DelegatorAddress: ubd.DelegatorAddress, ValidatorAddress: ubd.ValidatorAddress} - timeSlice, err := k.GetUBDQueueTimeSlice(ctx, completionTime) + timeSlice, err := k.GetUBDQueueTimeSlice(sdkCtx, completionTime) if err != nil { return err } if len(timeSlice) == 0 { - if err = k.SetUBDQueueTimeSlice(ctx, completionTime, []types.DVPair{dvPair}); err != nil { + if err = k.SetUBDQueueTimeSlice(sdkCtx, completionTime, []types.DVPair{dvPair}); err != nil { return err } return nil } timeSlice = append(timeSlice, dvPair) - return k.SetUBDQueueTimeSlice(ctx, completionTime, timeSlice) + return k.SetUBDQueueTimeSlice(sdkCtx, completionTime, timeSlice) } // UBDQueueIterator returns all the unbonding queue timeslices from time 0 until endTime. -func (k Keeper) UBDQueueIterator(ctx context.Context, endTime time.Time) (corestore.Iterator, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) UBDQueueIterator(ctx context.Context, endTime time.Time) (meterResult corestore.Iterator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UBDQueueIterator")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Iterator(types.UnbondingQueueKey, storetypes.InclusiveEndBytes(types.GetUnbondingDelegationTimeKey(endTime))) } @@ -519,10 +591,13 @@ func (k Keeper) UBDQueueIterator(ctx context.Context, endTime time.Time) (corest // DequeueAllMatureUBDQueue returns a concatenated list of all the timeslices inclusively previous to // currTime, and deletes the timeslices from the queue. func (k Keeper) DequeueAllMatureUBDQueue(ctx context.Context, currTime time.Time) (matureUnbonds []types.DVPair, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DequeueAllMatureUBDQueue")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) // gets an iterator for all timeslices from time 0 until the current Blockheader time - unbondingTimesliceIterator, err := k.UBDQueueIterator(ctx, currTime) + unbondingTimesliceIterator, err := k.UBDQueueIterator(sdkCtx, currTime) if err != nil { return matureUnbonds, err } @@ -548,9 +623,12 @@ func (k Keeper) DequeueAllMatureUBDQueue(ctx context.Context, currTime time.Time // GetRedelegations returns a given amount of all the delegator redelegations. func (k Keeper) GetRedelegations(ctx context.Context, delegator sdk.AccAddress, maxRetrieve uint16) (redelegations []types.Redelegation, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetRedelegations")(&err) + redelegations = make([]types.Redelegation, maxRetrieve) - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) delegatorPrefixKey := types.GetREDsKey(delegator) iterator, err := store.Iterator(delegatorPrefixKey, storetypes.PrefixEndBytes(delegatorPrefixKey)) if err != nil { @@ -572,7 +650,10 @@ func (k Keeper) GetRedelegations(ctx context.Context, delegator sdk.AccAddress, // GetRedelegation returns a redelegation. func (k Keeper) GetRedelegation(ctx context.Context, delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress) (red types.Redelegation, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetRedelegation")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) key := types.GetREDKey(delAddr, valSrcAddr, valDstAddr) value, err := store.Get(key) @@ -590,7 +671,10 @@ func (k Keeper) GetRedelegation(ctx context.Context, delAddr sdk.AccAddress, val // GetRedelegationsFromSrcValidator returns all redelegations from a particular // validator. func (k Keeper) GetRedelegationsFromSrcValidator(ctx context.Context, valAddr sdk.ValAddress) (reds []types.Redelegation, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetRedelegationsFromSrcValidator")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := types.GetREDsFromValSrcIndexKey(valAddr) iterator, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -615,8 +699,11 @@ func (k Keeper) GetRedelegationsFromSrcValidator(ctx context.Context, valAddr sd } // HasReceivingRedelegation checks if validator is receiving a redelegation. -func (k Keeper) HasReceivingRedelegation(ctx context.Context, delAddr sdk.AccAddress, valDstAddr sdk.ValAddress) (bool, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) HasReceivingRedelegation(ctx context.Context, delAddr sdk.AccAddress, valDstAddr sdk.ValAddress) (meterResult bool, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HasReceivingRedelegation")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := types.GetREDsByDelToValDstIndexKey(delAddr, valDstAddr) iterator, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -627,8 +714,11 @@ func (k Keeper) HasReceivingRedelegation(ctx context.Context, delAddr sdk.AccAdd } // HasMaxRedelegationEntries checks if the redelegation entries reached maximum limit. -func (k Keeper) HasMaxRedelegationEntries(ctx context.Context, delegatorAddr sdk.AccAddress, validatorSrcAddr, validatorDstAddr sdk.ValAddress) (bool, error) { - red, err := k.GetRedelegation(ctx, delegatorAddr, validatorSrcAddr, validatorDstAddr) +func (k Keeper) HasMaxRedelegationEntries(ctx context.Context, delegatorAddr sdk.AccAddress, validatorSrcAddr, validatorDstAddr sdk.ValAddress) (meterResult bool, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HasMaxRedelegationEntries")(&err) + + red, err := k.GetRedelegation(sdkCtx, delegatorAddr, validatorSrcAddr, validatorDstAddr) if err != nil { if err == types.ErrNoRedelegation { return false, nil @@ -636,7 +726,7 @@ func (k Keeper) HasMaxRedelegationEntries(ctx context.Context, delegatorAddr sdk return false, err } - maxEntries, err := k.MaxEntries(ctx) + maxEntries, err := k.MaxEntries(sdkCtx) if err != nil { return false, err } @@ -645,13 +735,16 @@ func (k Keeper) HasMaxRedelegationEntries(ctx context.Context, delegatorAddr sdk } // SetRedelegation sets a redelegation and associated index. -func (k Keeper) SetRedelegation(ctx context.Context, red types.Redelegation) error { +func (k Keeper) SetRedelegation(ctx context.Context, red types.Redelegation) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetRedelegation")(&err) + delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(red.DelegatorAddress) if err != nil { return err } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) bz := types.MustMarshalRED(k.cdc, red) valSrcAddr, err := k.validatorAddressCodec.StringToBytes(red.ValidatorSrcAddress) if err != nil { @@ -680,13 +773,16 @@ func (k Keeper) SetRedelegationEntry(ctx context.Context, validatorDstAddr sdk.ValAddress, creationHeight int64, minTime time.Time, balance math.Int, sharesSrc, sharesDst math.LegacyDec, -) (types.Redelegation, error) { - id, err := k.IncrementUnbondingID(ctx) +) (meterResult types.Redelegation, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetRedelegationEntry")(&err) + + id, err := k.IncrementUnbondingID(sdkCtx) if err != nil { return types.Redelegation{}, err } - red, err := k.GetRedelegation(ctx, delegatorAddr, validatorSrcAddr, validatorDstAddr) + red, err := k.GetRedelegation(sdkCtx, delegatorAddr, validatorSrcAddr, validatorDstAddr) if err == nil { red.AddEntry(creationHeight, minTime, balance, sharesDst, id) } else if errors.Is(err, types.ErrNoRedelegation) { @@ -696,17 +792,17 @@ func (k Keeper) SetRedelegationEntry(ctx context.Context, return types.Redelegation{}, err } - if err = k.SetRedelegation(ctx, red); err != nil { + if err = k.SetRedelegation(sdkCtx, red); err != nil { return types.Redelegation{}, err } // Add to the UBDByEntry index to look up the UBD by the UBDE ID - if err = k.SetRedelegationByUnbondingID(ctx, red, id); err != nil { + if err = k.SetRedelegationByUnbondingID(sdkCtx, red, id); err != nil { return types.Redelegation{}, err } - if err := k.Hooks().AfterUnbondingInitiated(ctx, id); err != nil { - k.Logger(ctx).Error("failed to call after unbonding initiated hook", "error", err) + if err = k.Hooks().AfterUnbondingInitiated(sdkCtx, id); err != nil { + k.Logger(sdkCtx).Error("failed to call after unbonding initiated hook", "error", err) // TODO (Facu): Should we return here? We are ignoring this error } @@ -714,8 +810,11 @@ func (k Keeper) SetRedelegationEntry(ctx context.Context, } // IterateRedelegations iterates through all redelegations. -func (k Keeper) IterateRedelegations(ctx context.Context, fn func(index int64, red types.Redelegation) (stop bool)) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) IterateRedelegations(ctx context.Context, fn func(index int64, red types.Redelegation) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateRedelegations")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) iterator, err := store.Iterator(types.RedelegationKey, storetypes.PrefixEndBytes(types.RedelegationKey)) if err != nil { return err @@ -737,13 +836,16 @@ func (k Keeper) IterateRedelegations(ctx context.Context, fn func(index int64, r } // RemoveRedelegation removes a redelegation object and associated index. -func (k Keeper) RemoveRedelegation(ctx context.Context, red types.Redelegation) error { +func (k Keeper) RemoveRedelegation(ctx context.Context, red types.Redelegation) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "RemoveRedelegation")(&err) + delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(red.DelegatorAddress) if err != nil { return err } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) valSrcAddr, err := k.validatorAddressCodec.StringToBytes(red.ValidatorSrcAddress) if err != nil { return err @@ -770,7 +872,10 @@ func (k Keeper) RemoveRedelegation(ctx context.Context, red types.Redelegation) // timeslice is a slice of DVVTriplets corresponding to redelegations that // expire at a certain time. func (k Keeper) GetRedelegationQueueTimeSlice(ctx context.Context, timestamp time.Time) (dvvTriplets []types.DVVTriplet, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetRedelegationQueueTimeSlice")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.GetRedelegationTimeKey(timestamp)) if err != nil { return nil, err @@ -790,8 +895,11 @@ func (k Keeper) GetRedelegationQueueTimeSlice(ctx context.Context, timestamp tim } // SetRedelegationQueueTimeSlice sets a specific redelegation queue timeslice. -func (k Keeper) SetRedelegationQueueTimeSlice(ctx context.Context, timestamp time.Time, keys []types.DVVTriplet) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetRedelegationQueueTimeSlice(ctx context.Context, timestamp time.Time, keys []types.DVVTriplet) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetRedelegationQueueTimeSlice")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.cdc.Marshal(&types.DVVTriplets{Triplets: keys}) if err != nil { return err @@ -801,8 +909,11 @@ func (k Keeper) SetRedelegationQueueTimeSlice(ctx context.Context, timestamp tim // InsertRedelegationQueue insert an redelegation delegation to the appropriate // timeslice in the redelegation queue. -func (k Keeper) InsertRedelegationQueue(ctx context.Context, red types.Redelegation, completionTime time.Time) error { - timeSlice, err := k.GetRedelegationQueueTimeSlice(ctx, completionTime) +func (k Keeper) InsertRedelegationQueue(ctx context.Context, red types.Redelegation, completionTime time.Time) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "InsertRedelegationQueue")(&err) + + timeSlice, err := k.GetRedelegationQueueTimeSlice(sdkCtx, completionTime) if err != nil { return err } @@ -813,17 +924,20 @@ func (k Keeper) InsertRedelegationQueue(ctx context.Context, red types.Redelegat } if len(timeSlice) == 0 { - return k.SetRedelegationQueueTimeSlice(ctx, completionTime, []types.DVVTriplet{dvvTriplet}) + return k.SetRedelegationQueueTimeSlice(sdkCtx, completionTime, []types.DVVTriplet{dvvTriplet}) } timeSlice = append(timeSlice, dvvTriplet) - return k.SetRedelegationQueueTimeSlice(ctx, completionTime, timeSlice) + return k.SetRedelegationQueueTimeSlice(sdkCtx, completionTime, timeSlice) } // RedelegationQueueIterator returns all the redelegation queue timeslices from // time 0 until endTime. -func (k Keeper) RedelegationQueueIterator(ctx context.Context, endTime time.Time) (storetypes.Iterator, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) RedelegationQueueIterator(ctx context.Context, endTime time.Time) (meterResult storetypes.Iterator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "RedelegationQueueIterator")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Iterator(types.RedelegationQueueKey, storetypes.InclusiveEndBytes(types.GetRedelegationTimeKey(endTime))) } @@ -831,11 +945,13 @@ func (k Keeper) RedelegationQueueIterator(ctx context.Context, endTime time.Time // timeslices inclusively previous to currTime, and deletes the timeslices from // the queue. func (k Keeper) DequeueAllMatureRedelegationQueue(ctx context.Context, currTime time.Time) (matureRedelegations []types.DVVTriplet, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DequeueAllMatureRedelegationQueue")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) // gets an iterator for all timeslices from time 0 until the current Blockheader time - sdkCtx := sdk.UnwrapSDKContext(ctx) - redelegationTimesliceIterator, err := k.RedelegationQueueIterator(ctx, sdkCtx.HeaderInfo().Time) + redelegationTimesliceIterator, err := k.RedelegationQueueIterator(sdkCtx, sdkCtx.HeaderInfo().Time) if err != nil { return nil, err } @@ -864,6 +980,9 @@ func (k Keeper) Delegate( ctx context.Context, delAddr sdk.AccAddress, bondAmt math.Int, tokenSrc types.BondStatus, validator types.Validator, subtractAccount bool, ) (newShares math.LegacyDec, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Delegate")(&err) + // In some situations, the exchange rate becomes invalid, e.g. if // Validator loses all tokens due to slashing. In this case, // make all future delegations invalid. @@ -877,10 +996,10 @@ func (k Keeper) Delegate( } // Get or create the delegation object and call the appropriate hook if present - delegation, err := k.GetDelegation(ctx, delAddr, valbz) + delegation, err := k.GetDelegation(sdkCtx, delAddr, valbz) if err == nil { // found - err = k.Hooks().BeforeDelegationSharesModified(ctx, delAddr, valbz) + err = k.Hooks().BeforeDelegationSharesModified(sdkCtx, delAddr, valbz) } else if errors.Is(err, types.ErrNoDelegation) { // not found delAddrStr, err1 := k.authKeeper.AddressCodec().BytesToString(delAddr) @@ -889,7 +1008,7 @@ func (k Keeper) Delegate( } delegation = types.NewDelegation(delAddrStr, validator.GetOperator(), math.LegacyZeroDec()) - err = k.Hooks().BeforeDelegationCreated(ctx, delAddr, valbz) + err = k.Hooks().BeforeDelegationCreated(sdkCtx, delAddr, valbz) } else { return math.LegacyZeroDec(), err } @@ -917,13 +1036,13 @@ func (k Keeper) Delegate( panic("invalid validator status") } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return math.LegacyDec{}, err } coins := sdk.NewCoins(sdk.NewCoin(bondDenom, bondAmt)) - if err := k.bankKeeper.DelegateCoinsFromAccountToModule(ctx, delAddr, sendName, coins); err != nil { + if err = k.bankKeeper.DelegateCoinsFromAccountToModule(sdkCtx, delAddr, sendName, coins); err != nil { return math.LegacyDec{}, err } } else { @@ -935,13 +1054,13 @@ func (k Keeper) Delegate( // do nothing case (tokenSrc == types.Unbonded || tokenSrc == types.Unbonding) && validator.IsBonded(): // transfer pools - err = k.notBondedTokensToBonded(ctx, bondAmt) + err = k.notBondedTokensToBonded(sdkCtx, bondAmt) if err != nil { return math.LegacyDec{}, err } case tokenSrc == types.Bonded && !validator.IsBonded(): // transfer pools - err = k.bondedTokensToNotBonded(ctx, bondAmt) + err = k.bondedTokensToNotBonded(sdkCtx, bondAmt) if err != nil { return math.LegacyDec{}, err } @@ -950,19 +1069,19 @@ func (k Keeper) Delegate( } } - _, newShares, err = k.AddValidatorTokensAndShares(ctx, validator, bondAmt) + _, newShares, err = k.AddValidatorTokensAndShares(sdkCtx, validator, bondAmt) if err != nil { return newShares, err } // Update delegation delegation.Shares = delegation.Shares.Add(newShares) - if err = k.SetDelegation(ctx, delegation); err != nil { + if err = k.SetDelegation(sdkCtx, delegation); err != nil { return newShares, err } // Call the after-modification hook - if err := k.Hooks().AfterDelegationModified(ctx, delAddr, valbz); err != nil { + if err = k.Hooks().AfterDelegationModified(sdkCtx, delAddr, valbz); err != nil { return newShares, err } @@ -973,8 +1092,11 @@ func (k Keeper) Delegate( func (k Keeper) Unbond( ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress, shares math.LegacyDec, ) (amount math.Int, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Unbond")(&err) + // check if a delegation object exists in the store - delegation, err := k.GetDelegation(ctx, delAddr, valAddr) + delegation, err := k.GetDelegation(sdkCtx, delAddr, valAddr) if errors.Is(err, types.ErrNoDelegation) { return amount, types.ErrNoDelegatorForAddress } else if err != nil { @@ -982,7 +1104,7 @@ func (k Keeper) Unbond( } // call the before-delegation-modified hook - if err := k.Hooks().BeforeDelegationSharesModified(ctx, delAddr, valAddr); err != nil { + if err = k.Hooks().BeforeDelegationSharesModified(sdkCtx, delAddr, valAddr); err != nil { return amount, err } @@ -992,7 +1114,7 @@ func (k Keeper) Unbond( } // get validator - validator, err := k.GetValidator(ctx, valAddr) + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { return amount, err } @@ -1016,17 +1138,17 @@ func (k Keeper) Unbond( // self-delegation below their minimum, we jail the validator. if isValidatorOperator && !validator.Jailed && validator.TokensFromShares(delegation.Shares).TruncateInt().LT(validator.MinSelfDelegation) { - err = k.jailValidator(ctx, validator) + err = k.jailValidator(sdkCtx, validator) if err != nil { return amount, err } - validator = k.mustGetValidator(ctx, valbz) + validator = k.mustGetValidator(sdkCtx, valbz) } if delegation.Shares.IsZero() { - err = k.RemoveDelegation(ctx, delegation) + err = k.RemoveDelegation(sdkCtx, delegation) } else { - if err = k.SetDelegation(ctx, delegation); err != nil { + if err = k.SetDelegation(sdkCtx, delegation); err != nil { return amount, err } @@ -1036,7 +1158,7 @@ func (k Keeper) Unbond( } // call the after delegation modification hook - err = k.Hooks().AfterDelegationModified(ctx, delegatorAddress, valAddr) + err = k.Hooks().AfterDelegationModified(sdkCtx, delegatorAddress, valAddr) } if err != nil { @@ -1045,14 +1167,14 @@ func (k Keeper) Unbond( // remove the shares and coins from the validator // NOTE that the amount is later (in keeper.Delegation) moved between staking module pools - validator, amount, err = k.RemoveValidatorTokensAndShares(ctx, validator, shares) + validator, amount, err = k.RemoveValidatorTokensAndShares(sdkCtx, validator, shares) if err != nil { return amount, err } if validator.DelegatorShares.IsZero() && validator.IsUnbonded() { // if not unbonded, we must instead remove validator in EndBlocker once it finishes its unbonding period - if err = k.RemoveValidator(ctx, valbz); err != nil { + if err = k.RemoveValidator(sdkCtx, valbz); err != nil { return amount, err } } @@ -1066,12 +1188,14 @@ func (k Keeper) Unbond( func (k Keeper) getBeginInfo( ctx context.Context, valSrcAddr sdk.ValAddress, ) (completionTime time.Time, height int64, completeNow bool, err error) { - validator, err := k.GetValidator(ctx, valSrcAddr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getBeginInfo")(&err) + + validator, err := k.GetValidator(sdkCtx, valSrcAddr) if err != nil && errors.Is(err, types.ErrNoValidatorFound) { return } - sdkCtx := sdk.UnwrapSDKContext(ctx) - unbondingTime, err := k.UnbondingTime(ctx) + unbondingTime, err := k.UnbondingTime(sdkCtx) if err != nil { return } @@ -1103,13 +1227,16 @@ func (k Keeper) getBeginInfo( // processed during the staking EndBlocker. func (k Keeper) Undelegate( ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress, sharesAmount math.LegacyDec, -) (time.Time, math.Int, error) { - validator, err := k.GetValidator(ctx, valAddr) +) (meterResult time.Time, meterResult1 math.Int, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Undelegate")(&err) + + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { return time.Time{}, math.Int{}, err } - hasMaxEntries, err := k.HasMaxUnbondingDelegationEntries(ctx, delAddr, valAddr) + hasMaxEntries, err := k.HasMaxUnbondingDelegationEntries(sdkCtx, delAddr, valAddr) if err != nil { return time.Time{}, math.Int{}, err } @@ -1118,32 +1245,30 @@ func (k Keeper) Undelegate( return time.Time{}, math.Int{}, types.ErrMaxUnbondingDelegationEntries } - returnAmount, err := k.Unbond(ctx, delAddr, valAddr, sharesAmount) + returnAmount, err := k.Unbond(sdkCtx, delAddr, valAddr, sharesAmount) if err != nil { return time.Time{}, math.Int{}, err } // transfer the validator tokens to the not bonded pool if validator.IsBonded() { - err = k.bondedTokensToNotBonded(ctx, returnAmount) + err = k.bondedTokensToNotBonded(sdkCtx, returnAmount) if err != nil { return time.Time{}, math.Int{}, err } } - unbondingTime, err := k.UnbondingTime(ctx) + unbondingTime, err := k.UnbondingTime(sdkCtx) if err != nil { return time.Time{}, math.Int{}, err } - - sdkCtx := sdk.UnwrapSDKContext(ctx) completionTime := sdkCtx.BlockHeader().Time.Add(unbondingTime) - ubd, err := k.SetUnbondingDelegationEntry(ctx, delAddr, valAddr, sdkCtx.BlockHeight(), completionTime, returnAmount) + ubd, err := k.SetUnbondingDelegationEntry(sdkCtx, delAddr, valAddr, sdkCtx.BlockHeight(), completionTime, returnAmount) if err != nil { return time.Time{}, math.Int{}, err } - err = k.InsertUBDQueue(ctx, ubd, completionTime) + err = k.InsertUBDQueue(sdkCtx, ubd, completionTime) if err != nil { return time.Time{}, math.Int{}, err } @@ -1154,19 +1279,21 @@ func (k Keeper) Undelegate( // CompleteUnbonding completes the unbonding of all mature entries in the // retrieved unbonding delegation object and returns the total unbonding balance // or an error upon failure. -func (k Keeper) CompleteUnbonding(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (sdk.Coins, error) { - ubd, err := k.GetUnbondingDelegation(ctx, delAddr, valAddr) +func (k Keeper) CompleteUnbonding(ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress) (meterResult sdk.Coins, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "CompleteUnbonding")(&err) + + ubd, err := k.GetUnbondingDelegation(sdkCtx, delAddr, valAddr) if err != nil { return nil, err } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return nil, err } balances := sdk.NewCoins() - sdkCtx := sdk.UnwrapSDKContext(ctx) ctxTime := sdkCtx.BlockHeader().Time delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(ubd.DelegatorAddress) @@ -1180,15 +1307,15 @@ func (k Keeper) CompleteUnbonding(ctx context.Context, delAddr sdk.AccAddress, v if entry.IsMature(ctxTime) && !entry.OnHold() { ubd.RemoveEntry(int64(i)) i-- - if err = k.DeleteUnbondingIndex(ctx, entry.UnbondingId); err != nil { + if err = k.DeleteUnbondingIndex(sdkCtx, entry.UnbondingId); err != nil { return nil, err } // track undelegation only when remaining or truncated shares are non-zero if !entry.Balance.IsZero() { amt := sdk.NewCoin(bondDenom, entry.Balance) - if err := k.bankKeeper.UndelegateCoinsFromModuleToAccount( - ctx, types.NotBondedPoolName, delegatorAddress, sdk.NewCoins(amt), + if err = k.bankKeeper.UndelegateCoinsFromModuleToAccount( + sdkCtx, types.NotBondedPoolName, delegatorAddress, sdk.NewCoins(amt), ); err != nil { return nil, err } @@ -1200,9 +1327,9 @@ func (k Keeper) CompleteUnbonding(ctx context.Context, delAddr sdk.AccAddress, v // set the unbonding delegation or remove it if there are no more entries if len(ubd.Entries) == 0 { - err = k.RemoveUnbondingDelegation(ctx, ubd) + err = k.RemoveUnbondingDelegation(sdkCtx, ubd) } else { - err = k.SetUnbondingDelegation(ctx, ubd) + err = k.SetUnbondingDelegation(sdkCtx, ubd) } if err != nil { @@ -1217,18 +1344,21 @@ func (k Keeper) CompleteUnbonding(ctx context.Context, delAddr sdk.AccAddress, v func (k Keeper) BeginRedelegation( ctx context.Context, delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress, sharesAmount math.LegacyDec, ) (completionTime time.Time, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BeginRedelegation")(&err) + if bytes.Equal(valSrcAddr, valDstAddr) { return time.Time{}, types.ErrSelfRedelegation } - dstValidator, err := k.GetValidator(ctx, valDstAddr) + dstValidator, err := k.GetValidator(sdkCtx, valDstAddr) if errors.Is(err, types.ErrNoValidatorFound) { return time.Time{}, types.ErrBadRedelegationDst } else if err != nil { return time.Time{}, err } - srcValidator, err := k.GetValidator(ctx, valSrcAddr) + srcValidator, err := k.GetValidator(sdkCtx, valSrcAddr) if errors.Is(err, types.ErrNoValidatorFound) { return time.Time{}, types.ErrBadRedelegationSrc } else if err != nil { @@ -1236,7 +1366,7 @@ func (k Keeper) BeginRedelegation( } // check if this is a transitive redelegation - hasRecRedel, err := k.HasReceivingRedelegation(ctx, delAddr, valSrcAddr) + hasRecRedel, err := k.HasReceivingRedelegation(sdkCtx, delAddr, valSrcAddr) if err != nil { return time.Time{}, err } @@ -1245,7 +1375,7 @@ func (k Keeper) BeginRedelegation( return time.Time{}, types.ErrTransitiveRedelegation } - hasMaxRedels, err := k.HasMaxRedelegationEntries(ctx, delAddr, valSrcAddr, valDstAddr) + hasMaxRedels, err := k.HasMaxRedelegationEntries(sdkCtx, delAddr, valSrcAddr, valDstAddr) if err != nil { return time.Time{}, err } @@ -1254,7 +1384,7 @@ func (k Keeper) BeginRedelegation( return time.Time{}, types.ErrMaxRedelegationEntries } - returnAmount, err := k.Unbond(ctx, delAddr, valSrcAddr, sharesAmount) + returnAmount, err := k.Unbond(sdkCtx, delAddr, valSrcAddr, sharesAmount) if err != nil { return time.Time{}, err } @@ -1263,13 +1393,13 @@ func (k Keeper) BeginRedelegation( return time.Time{}, types.ErrTinyRedelegationAmount } - sharesCreated, err := k.Delegate(ctx, delAddr, returnAmount, srcValidator.GetStatus(), dstValidator, false) + sharesCreated, err := k.Delegate(sdkCtx, delAddr, returnAmount, srcValidator.GetStatus(), dstValidator, false) if err != nil { return time.Time{}, err } // create the unbonding delegation - completionTime, height, completeNow, err := k.getBeginInfo(ctx, valSrcAddr) + completionTime, height, completeNow, err := k.getBeginInfo(sdkCtx, valSrcAddr) if err != nil { return time.Time{}, err } @@ -1279,14 +1409,14 @@ func (k Keeper) BeginRedelegation( } red, err := k.SetRedelegationEntry( - ctx, delAddr, valSrcAddr, valDstAddr, + sdkCtx, delAddr, valSrcAddr, valDstAddr, height, completionTime, returnAmount, sharesAmount, sharesCreated, ) if err != nil { return time.Time{}, err } - err = k.InsertRedelegationQueue(ctx, red, completionTime) + err = k.InsertRedelegationQueue(sdkCtx, red, completionTime) if err != nil { return time.Time{}, err } @@ -1299,19 +1429,21 @@ func (k Keeper) BeginRedelegation( // balance or an error upon failure. func (k Keeper) CompleteRedelegation( ctx context.Context, delAddr sdk.AccAddress, valSrcAddr, valDstAddr sdk.ValAddress, -) (sdk.Coins, error) { - red, err := k.GetRedelegation(ctx, delAddr, valSrcAddr, valDstAddr) +) (meterResult sdk.Coins, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "CompleteRedelegation")(&err) + + red, err := k.GetRedelegation(sdkCtx, delAddr, valSrcAddr, valDstAddr) if err != nil { return nil, err } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return nil, err } balances := sdk.NewCoins() - sdkCtx := sdk.UnwrapSDKContext(ctx) ctxTime := sdkCtx.BlockHeader().Time // loop through all the entries and complete mature redelegation entries @@ -1320,7 +1452,7 @@ func (k Keeper) CompleteRedelegation( if entry.IsMature(ctxTime) && !entry.OnHold() { red.RemoveEntry(int64(i)) i-- - if err = k.DeleteUnbondingIndex(ctx, entry.UnbondingId); err != nil { + if err = k.DeleteUnbondingIndex(sdkCtx, entry.UnbondingId); err != nil { return nil, err } @@ -1332,9 +1464,9 @@ func (k Keeper) CompleteRedelegation( // set the redelegation or remove it if there are no more entries if len(red.Entries) == 0 { - err = k.RemoveRedelegation(ctx, red) + err = k.RemoveRedelegation(sdkCtx, red) } else { - err = k.SetRedelegation(ctx, red) + err = k.SetRedelegation(sdkCtx, red) } if err != nil { @@ -1350,12 +1482,15 @@ func (k Keeper) CompleteRedelegation( func (k Keeper) ValidateUnbondAmount( ctx context.Context, delAddr sdk.AccAddress, valAddr sdk.ValAddress, amt math.Int, ) (shares math.LegacyDec, err error) { - validator, err := k.GetValidator(ctx, valAddr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ValidateUnbondAmount")(&err) + + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { return shares, err } - del, err := k.GetDelegation(ctx, delAddr, valAddr) + del, err := k.GetDelegation(sdkCtx, delAddr, valAddr) if err != nil { return shares, err } diff --git a/x/staking/keeper/delegation_receiver.go b/x/staking/keeper/delegation_receiver.go index 7d8310c98ff0..95362667c00a 100644 --- a/x/staking/keeper/delegation_receiver.go +++ b/x/staking/keeper/delegation_receiver.go @@ -11,25 +11,37 @@ import ( // SetDelegationTransferReceiver adds a receiver address to the allowed receivers list for a delegator func (k Keeper) SetDelegationTransferReceiver(ctx context.Context, receiverAddr sdk.AccAddress) { - store := k.delegationTransferReceiversStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetDelegationTransferReceiver")() + + store := k.delegationTransferReceiversStore(sdkCtx) store.Set(receiverAddr.Bytes(), receiverAddr.Bytes()) } // DeleteDelegationTransferReceiver removes a receiver address from the allowed receivers list for a delegator func (k Keeper) DeleteDelegationTransferReceiver(ctx context.Context, receiverAddr sdk.AccAddress) { - store := k.delegationTransferReceiversStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteDelegationTransferReceiver")() + + store := k.delegationTransferReceiversStore(sdkCtx) store.Delete(receiverAddr.Bytes()) } // IsAllowedDelegationTransferReceiver checks if a receiver address is in the allowed receivers list for a delegator func (k Keeper) IsAllowedDelegationTransferReceiver(ctx context.Context, receiverAddr sdk.AccAddress) bool { - store := k.delegationTransferReceiversStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IsAllowedDelegationTransferReceiver")() + + store := k.delegationTransferReceiversStore(sdkCtx) return store.Has(receiverAddr.Bytes()) } // GetAllAllowedDelegationTransferReceivers returns all allowed receiver addresses func (k Keeper) GetAllAllowedDelegationTransferReceivers(ctx context.Context) []string { - store := k.delegationTransferReceiversStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllAllowedDelegationTransferReceivers")() + + store := k.delegationTransferReceiversStore(sdkCtx) iterator := store.Iterator(nil, nil) defer iterator.Close() @@ -42,6 +54,9 @@ func (k Keeper) GetAllAllowedDelegationTransferReceivers(ctx context.Context) [] // delegationTransferReceiversStore returns a prefix store for delegation transfer receivers func (k Keeper) delegationTransferReceiversStore(ctx context.Context) prefix.Store { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "delegationTransferReceiversStore")() + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) return prefix.NewStore(store, types.DelegationTransferReceiversKey) } diff --git a/x/staking/keeper/genesis.go b/x/staking/keeper/genesis.go index 738614ab8613..fd085fbf8a1a 100644 --- a/x/staking/keeper/genesis.go +++ b/x/staking/keeper/genesis.go @@ -18,6 +18,10 @@ import ( // data. Finally, it updates the bonded validators. // Returns final validator set after applying all declaration and delegations func (k Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) (res []abci.ValidatorUpdate) { + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "InitGenesis")(&err) + bondedTokens := math.ZeroInt() notBondedTokens := math.ZeroInt() @@ -26,29 +30,27 @@ func (k Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) (res // initialized for the validator set e.g. with a one-block offset - the // first TM block is at height 1, so state updates applied from // genesis.json are in block 0. - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx = sdkCtx.WithBlockHeight(1 - sdk.ValidatorUpdateDelay) - ctx = sdkCtx - if err := k.SetParams(ctx, data.Params); err != nil { + if err = k.SetParams(sdkCtx, data.Params); err != nil { panic(err) } - if err := k.SetLastTotalPower(ctx, data.LastTotalPower); err != nil { + if err = k.SetLastTotalPower(sdkCtx, data.LastTotalPower); err != nil { panic(err) } for _, validator := range data.Validators { - if err := k.SetValidator(ctx, validator); err != nil { + if err = k.SetValidator(sdkCtx, validator); err != nil { panic(err) } // Manually set indices for the first time - if err := k.SetValidatorByConsAddr(ctx, validator); err != nil { + if err = k.SetValidatorByConsAddr(sdkCtx, validator); err != nil { panic(err) } - if err := k.SetValidatorByPowerIndex(ctx, validator); err != nil { + if err = k.SetValidatorByPowerIndex(sdkCtx, validator); err != nil { panic(err) } @@ -58,14 +60,14 @@ func (k Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) (res if err != nil { panic(err) } - if err := k.Hooks().AfterValidatorCreated(ctx, valbz); err != nil { + if err = k.Hooks().AfterValidatorCreated(sdkCtx, valbz); err != nil { panic(err) } } // update timeslice if necessary if validator.IsUnbonding() { - if err := k.InsertUnbondingValidatorQueue(ctx, validator); err != nil { + if err = k.InsertUnbondingValidatorQueue(sdkCtx, validator); err != nil { panic(err) } } @@ -78,14 +80,16 @@ func (k Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) (res notBondedTokens = notBondedTokens.Add(validator.GetTokens()) default: - panic("invalid validator status") + err = fmt.Errorf("invalid validator status") + panic(err) } } for _, delegation := range data.Delegations { delegatorAddress, err := k.authKeeper.AddressCodec().StringToBytes(delegation.DelegatorAddress) if err != nil { - panic(fmt.Errorf("invalid delegator address: %s", err)) + err = fmt.Errorf("invalid delegator address: %s", err) + panic(err) } valAddr, err := k.validatorAddressCodec.StringToBytes(delegation.GetValidatorAddr()) @@ -95,30 +99,30 @@ func (k Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) (res // Call the before-creation hook if not exported if !data.Exported { - if err := k.Hooks().BeforeDelegationCreated(ctx, delegatorAddress, valAddr); err != nil { + if err = k.Hooks().BeforeDelegationCreated(sdkCtx, delegatorAddress, valAddr); err != nil { panic(err) } } - if err := k.SetDelegation(ctx, delegation); err != nil { + if err = k.SetDelegation(sdkCtx, delegation); err != nil { panic(err) } // Call the after-modification hook if not exported if !data.Exported { - if err := k.Hooks().AfterDelegationModified(ctx, delegatorAddress, valAddr); err != nil { + if err = k.Hooks().AfterDelegationModified(sdkCtx, delegatorAddress, valAddr); err != nil { panic(err) } } } for _, ubd := range data.UnbondingDelegations { - if err := k.SetUnbondingDelegation(ctx, ubd); err != nil { + if err = k.SetUnbondingDelegation(sdkCtx, ubd); err != nil { panic(err) } for _, entry := range ubd.Entries { - if err := k.InsertUBDQueue(ctx, ubd, entry.CompletionTime); err != nil { + if err = k.InsertUBDQueue(sdkCtx, ubd, entry.CompletionTime); err != nil { panic(err) } notBondedTokens = notBondedTokens.Add(entry.Balance) @@ -126,12 +130,12 @@ func (k Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) (res } for _, red := range data.Redelegations { - if err := k.SetRedelegation(ctx, red); err != nil { + if err = k.SetRedelegation(sdkCtx, red); err != nil { panic(err) } for _, entry := range red.Entries { - if err := k.InsertRedelegationQueue(ctx, red, entry.CompletionTime); err != nil { + if err = k.InsertRedelegationQueue(sdkCtx, red, entry.CompletionTime); err != nil { panic(err) } } @@ -141,37 +145,41 @@ func (k Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) (res notBondedCoins := sdk.NewCoins(sdk.NewCoin(data.Params.BondDenom, notBondedTokens)) // check if the unbonded and bonded pools accounts exists - bondedPool := k.GetBondedPool(ctx) + bondedPool := k.GetBondedPool(sdkCtx) if bondedPool == nil { - panic(fmt.Sprintf("%s module account has not been set", types.BondedPoolName)) + err = fmt.Errorf("%s module account has not been set", types.BondedPoolName) + panic(err) } // TODO: remove with genesis 2-phases refactor https://github.com/cosmos/cosmos-sdk/issues/2862 - bondedBalance := k.bankKeeper.GetAllBalances(ctx, bondedPool.GetAddress()) + bondedBalance := k.bankKeeper.GetAllBalances(sdkCtx, bondedPool.GetAddress()) if bondedBalance.IsZero() { - k.authKeeper.SetModuleAccount(ctx, bondedPool) + k.authKeeper.SetModuleAccount(sdkCtx, bondedPool) } // if balance is different from bonded coins panic because genesis is most likely malformed if !bondedBalance.Equal(bondedCoins) { - panic(fmt.Sprintf("bonded pool balance is different from bonded coins: %s <-> %s", bondedBalance, bondedCoins)) + err = fmt.Errorf("bonded pool balance is different from bonded coins: %s <-> %s", bondedBalance, bondedCoins) + panic(err) } - notBondedPool := k.GetNotBondedPool(ctx) + notBondedPool := k.GetNotBondedPool(sdkCtx) if notBondedPool == nil { - panic(fmt.Sprintf("%s module account has not been set", types.NotBondedPoolName)) + err = fmt.Errorf("%s module account has not been set", types.NotBondedPoolName) + panic(err) } - notBondedBalance := k.bankKeeper.GetAllBalances(ctx, notBondedPool.GetAddress()) + notBondedBalance := k.bankKeeper.GetAllBalances(sdkCtx, notBondedPool.GetAddress()) if notBondedBalance.IsZero() { - k.authKeeper.SetModuleAccount(ctx, notBondedPool) + k.authKeeper.SetModuleAccount(sdkCtx, notBondedPool) } // If balance is different from non bonded coins panic because genesis is most // likely malformed. if !notBondedBalance.Equal(notBondedCoins) { - panic(fmt.Sprintf("not bonded pool balance is different from not bonded coins: %s <-> %s", notBondedBalance, notBondedCoins)) + err = fmt.Errorf("not bonded pool balance is different from not bonded coins: %s <-> %s", notBondedBalance, notBondedCoins) + panic(err) } // don't need to run CometBFT updates if we exported @@ -182,24 +190,23 @@ func (k Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) (res panic(err) } - err = k.SetLastValidatorPower(ctx, valAddr, lv.Power) + err = k.SetLastValidatorPower(sdkCtx, valAddr, lv.Power) if err != nil { panic(err) } - validator, err := k.GetValidator(ctx, valAddr) + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { - panic(fmt.Sprintf("validator %s not found", lv.Address)) + err = fmt.Errorf("validator %s not found", lv.Address) + panic(err) } - update := validator.ABCIValidatorUpdate(k.PowerReduction(ctx)) + update := validator.ABCIValidatorUpdate(k.PowerReduction(sdkCtx)) update.Power = lv.Power // keep the next-val-set offset, use the last power for the first block res = append(res, update) } } else { - var err error - - res, err = k.ApplyAndReturnValidatorSetUpdates(ctx) + res, err = k.ApplyAndReturnValidatorSetUpdates(sdkCtx) if err != nil { panic(err) } @@ -212,9 +219,12 @@ func (k Keeper) InitGenesis(ctx context.Context, data *types.GenesisState) (res // GenesisState will contain the pool, params, validators, and bonds found in // the keeper. func (k Keeper) ExportGenesis(ctx sdk.Context) *types.GenesisState { + var err error + defer k.Meter(ctx).FuncTiming(&ctx, "ExportGenesis")(&err) + var unbondingDelegations []types.UnbondingDelegation - err := k.IterateUnbondingDelegations(ctx, func(_ int64, ubd types.UnbondingDelegation) (stop bool) { + err = k.IterateUnbondingDelegations(ctx, func(_ int64, ubd types.UnbondingDelegation) (stop bool) { unbondingDelegations = append(unbondingDelegations, ubd) return false }) diff --git a/x/staking/keeper/grpc_query.go b/x/staking/keeper/grpc_query.go index d4b7aec1aaaa..cd7e7177896f 100644 --- a/x/staking/keeper/grpc_query.go +++ b/x/staking/keeper/grpc_query.go @@ -28,7 +28,10 @@ func NewQuerier(keeper *Keeper) Querier { } // Validators queries all validators that match the given status -func (k Querier) Validators(ctx context.Context, req *types.QueryValidatorsRequest) (*types.QueryValidatorsResponse, error) { +func (k Querier) Validators(ctx context.Context, req *types.QueryValidatorsRequest) (meterResult *types.QueryValidatorsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "Validators")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -38,7 +41,7 @@ func (k Querier) Validators(ctx context.Context, req *types.QueryValidatorsReque return nil, status.Errorf(codes.InvalidArgument, "invalid validator status %s", req.Status) } - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) valStore := prefix.NewStore(store, types.ValidatorsKey) validators, pageRes, err := query.GenericFilteredPaginate(k.cdc, valStore, req.Pagination, func(key []byte, val *types.Validator) (*types.Validator, error) { @@ -63,7 +66,10 @@ func (k Querier) Validators(ctx context.Context, req *types.QueryValidatorsReque } // Validator queries validator info for given validator address -func (k Querier) Validator(ctx context.Context, req *types.QueryValidatorRequest) (*types.QueryValidatorResponse, error) { +func (k Querier) Validator(ctx context.Context, req *types.QueryValidatorRequest) (meterResult *types.QueryValidatorResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "Validator")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -77,7 +83,7 @@ func (k Querier) Validator(ctx context.Context, req *types.QueryValidatorRequest return nil, err } - validator, err := k.GetValidator(ctx, valAddr) + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { return nil, status.Errorf(codes.NotFound, "validator %s not found", req.ValidatorAddr) } @@ -86,7 +92,10 @@ func (k Querier) Validator(ctx context.Context, req *types.QueryValidatorRequest } // ValidatorDelegations queries delegate info for given validator -func (k Querier) ValidatorDelegations(ctx context.Context, req *types.QueryValidatorDelegationsRequest) (*types.QueryValidatorDelegationsResponse, error) { +func (k Querier) ValidatorDelegations(ctx context.Context, req *types.QueryValidatorDelegationsRequest) (meterResult *types.QueryValidatorDelegationsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "ValidatorDelegations")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -100,7 +109,7 @@ func (k Querier) ValidatorDelegations(ctx context.Context, req *types.QueryValid return nil, err } - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) delStore := prefix.NewStore(store, types.GetDelegationsByValPrefixKey(valAddr)) var ( @@ -120,7 +129,7 @@ func (k Querier) ValidatorDelegations(ctx context.Context, req *types.QueryValid return nil }) if err != nil { - delegations, pageResponse, err := k.getValidatorDelegationsLegacy(ctx, req) + delegations, pageResponse, err := k.getValidatorDelegationsLegacy(sdkCtx, req) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -133,7 +142,7 @@ func (k Querier) ValidatorDelegations(ctx context.Context, req *types.QueryValid pageRes = pageResponse } - delResponses, err := delegationsToDelegationResponses(ctx, k.Keeper, dels) + delResponses, err := delegationsToDelegationResponses(sdkCtx, k.Keeper, dels) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -143,8 +152,11 @@ func (k Querier) ValidatorDelegations(ctx context.Context, req *types.QueryValid }, nil } -func (k Querier) getValidatorDelegationsLegacy(ctx context.Context, req *types.QueryValidatorDelegationsRequest) ([]*types.Delegation, *query.PageResponse, error) { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) +func (k Querier) getValidatorDelegationsLegacy(ctx context.Context, req *types.QueryValidatorDelegationsRequest) (meterResult []*types.Delegation, meterResult1 *query.PageResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "getValidatorDelegationsLegacy")(&err) + + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) valStore := prefix.NewStore(store, types.DelegationKey) return query.GenericFilteredPaginate(k.cdc, valStore, req.Pagination, func(key []byte, delegation *types.Delegation) (*types.Delegation, error) { @@ -164,7 +176,10 @@ func (k Querier) getValidatorDelegationsLegacy(ctx context.Context, req *types.Q } // ValidatorUnbondingDelegations queries unbonding delegations of a validator -func (k Querier) ValidatorUnbondingDelegations(ctx context.Context, req *types.QueryValidatorUnbondingDelegationsRequest) (*types.QueryValidatorUnbondingDelegationsResponse, error) { +func (k Querier) ValidatorUnbondingDelegations(ctx context.Context, req *types.QueryValidatorUnbondingDelegationsRequest) (meterResult *types.QueryValidatorUnbondingDelegationsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "ValidatorUnbondingDelegations")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -179,7 +194,7 @@ func (k Querier) ValidatorUnbondingDelegations(ctx context.Context, req *types.Q return nil, err } - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) srcValPrefix := types.GetUBDsByValIndexKey(valAddr) ubdStore := prefix.NewStore(store, srcValPrefix) pageRes, err := query.Paginate(ubdStore, req.Pagination, func(key, value []byte) error { @@ -204,7 +219,10 @@ func (k Querier) ValidatorUnbondingDelegations(ctx context.Context, req *types.Q } // Delegation queries delegate info for given validator delegator pair -func (k Querier) Delegation(ctx context.Context, req *types.QueryDelegationRequest) (*types.QueryDelegationResponse, error) { +func (k Querier) Delegation(ctx context.Context, req *types.QueryDelegationRequest) (meterResult *types.QueryDelegationResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "Delegation")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -226,7 +244,7 @@ func (k Querier) Delegation(ctx context.Context, req *types.QueryDelegationReque return nil, err } - delegation, err := k.GetDelegation(ctx, delAddr, valAddr) + delegation, err := k.GetDelegation(sdkCtx, delAddr, valAddr) if err != nil { return nil, status.Errorf( codes.NotFound, @@ -234,7 +252,7 @@ func (k Querier) Delegation(ctx context.Context, req *types.QueryDelegationReque req.DelegatorAddr, req.ValidatorAddr) } - delResponse, err := delegationToDelegationResponse(ctx, k.Keeper, delegation) + delResponse, err := delegationToDelegationResponse(sdkCtx, k.Keeper, delegation) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -243,7 +261,10 @@ func (k Querier) Delegation(ctx context.Context, req *types.QueryDelegationReque } // UnbondingDelegation queries unbonding info for given validator delegator pair -func (k Querier) UnbondingDelegation(ctx context.Context, req *types.QueryUnbondingDelegationRequest) (*types.QueryUnbondingDelegationResponse, error) { +func (k Querier) UnbondingDelegation(ctx context.Context, req *types.QueryUnbondingDelegationRequest) (meterResult *types.QueryUnbondingDelegationResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "UnbondingDelegation")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -265,7 +286,7 @@ func (k Querier) UnbondingDelegation(ctx context.Context, req *types.QueryUnbond return nil, err } - unbond, err := k.GetUnbondingDelegation(ctx, delAddr, valAddr) + unbond, err := k.GetUnbondingDelegation(sdkCtx, delAddr, valAddr) if err != nil { return nil, status.Errorf( codes.NotFound, @@ -277,7 +298,10 @@ func (k Querier) UnbondingDelegation(ctx context.Context, req *types.QueryUnbond } // DelegatorDelegations queries all delegations of a given delegator address -func (k Querier) DelegatorDelegations(ctx context.Context, req *types.QueryDelegatorDelegationsRequest) (*types.QueryDelegatorDelegationsResponse, error) { +func (k Querier) DelegatorDelegations(ctx context.Context, req *types.QueryDelegatorDelegationsRequest) (meterResult *types.QueryDelegatorDelegationsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "DelegatorDelegations")(&err) + if req == nil { return nil, status.Errorf(codes.InvalidArgument, "empty request") } @@ -292,7 +316,7 @@ func (k Querier) DelegatorDelegations(ctx context.Context, req *types.QueryDeleg return nil, err } - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) delStore := prefix.NewStore(store, types.GetDelegationsKey(delAddr)) pageRes, err := query.Paginate(delStore, req.Pagination, func(key, value []byte) error { delegation, err := types.UnmarshalDelegation(k.cdc, value) @@ -306,7 +330,7 @@ func (k Querier) DelegatorDelegations(ctx context.Context, req *types.QueryDeleg return nil, status.Error(codes.Internal, err.Error()) } - delegationResps, err := delegationsToDelegationResponses(ctx, k.Keeper, delegations) + delegationResps, err := delegationsToDelegationResponses(sdkCtx, k.Keeper, delegations) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -315,7 +339,10 @@ func (k Querier) DelegatorDelegations(ctx context.Context, req *types.QueryDeleg } // DelegatorValidator queries validator info for given delegator validator pair -func (k Querier) DelegatorValidator(ctx context.Context, req *types.QueryDelegatorValidatorRequest) (*types.QueryDelegatorValidatorResponse, error) { +func (k Querier) DelegatorValidator(ctx context.Context, req *types.QueryDelegatorValidatorRequest) (meterResult *types.QueryDelegatorValidatorResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "DelegatorValidator")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -337,7 +364,7 @@ func (k Querier) DelegatorValidator(ctx context.Context, req *types.QueryDelegat return nil, err } - validator, err := k.GetDelegatorValidator(ctx, delAddr, valAddr) + validator, err := k.GetDelegatorValidator(sdkCtx, delAddr, valAddr) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -346,7 +373,10 @@ func (k Querier) DelegatorValidator(ctx context.Context, req *types.QueryDelegat } // DelegatorUnbondingDelegations queries all unbonding delegations of a given delegator address -func (k Querier) DelegatorUnbondingDelegations(ctx context.Context, req *types.QueryDelegatorUnbondingDelegationsRequest) (*types.QueryDelegatorUnbondingDelegationsResponse, error) { +func (k Querier) DelegatorUnbondingDelegations(ctx context.Context, req *types.QueryDelegatorUnbondingDelegationsRequest) (meterResult *types.QueryDelegatorUnbondingDelegationsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "DelegatorUnbondingDelegations")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -361,7 +391,7 @@ func (k Querier) DelegatorUnbondingDelegations(ctx context.Context, req *types.Q return nil, err } - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) unbStore := prefix.NewStore(store, types.GetUBDsKey(delAddr)) pageRes, err := query.Paginate(unbStore, req.Pagination, func(key, value []byte) error { unbond, err := types.UnmarshalUBD(k.cdc, value) @@ -380,15 +410,21 @@ func (k Querier) DelegatorUnbondingDelegations(ctx context.Context, req *types.Q }, nil } -func (k Querier) AllowedDelegationTransferReceivers(ctx context.Context, _ *types.QueryAllowedDelegationTransferReceiversRequest) (*types.QueryAllowedDelegationTransferReceiversResponse, error) { +func (k Querier) AllowedDelegationTransferReceivers(ctx context.Context, _ *types.QueryAllowedDelegationTransferReceiversRequest) (meterResult *types.QueryAllowedDelegationTransferReceiversResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "AllowedDelegationTransferReceivers")(&err) + resp := &types.QueryAllowedDelegationTransferReceiversResponse{ - Addresses: k.GetAllAllowedDelegationTransferReceivers(ctx), + Addresses: k.GetAllAllowedDelegationTransferReceivers(sdkCtx), } return resp, nil } // HistoricalInfo queries the historical info for given height -func (k Querier) HistoricalInfo(ctx context.Context, req *types.QueryHistoricalInfoRequest) (*types.QueryHistoricalInfoResponse, error) { +func (k Querier) HistoricalInfo(ctx context.Context, req *types.QueryHistoricalInfoRequest) (meterResult *types.QueryHistoricalInfoResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "HistoricalInfo")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -397,7 +433,7 @@ func (k Querier) HistoricalInfo(ctx context.Context, req *types.QueryHistoricalI return nil, status.Error(codes.InvalidArgument, "height cannot be negative") } - hi, err := k.GetHistoricalInfo(ctx, req.Height) + hi, err := k.GetHistoricalInfo(sdkCtx, req.Height) if err != nil { return nil, status.Errorf(codes.NotFound, "historical info for height %d not found", req.Height) } @@ -406,19 +442,21 @@ func (k Querier) HistoricalInfo(ctx context.Context, req *types.QueryHistoricalI } // Redelegations queries redelegations of given address -func (k Querier) Redelegations(ctx context.Context, req *types.QueryRedelegationsRequest) (*types.QueryRedelegationsResponse, error) { +func (k Querier) Redelegations(ctx context.Context, req *types.QueryRedelegationsRequest) (meterResult *types.QueryRedelegationsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "Redelegations")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } var redels types.Redelegations var pageRes *query.PageResponse - var err error - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) switch { case req.DelegatorAddr != "" && req.SrcValidatorAddr != "" && req.DstValidatorAddr != "": - redels, err = queryRedelegation(ctx, k, req) + redels, err = queryRedelegation(sdkCtx, k, req) case req.DelegatorAddr == "" && req.SrcValidatorAddr != "" && req.DstValidatorAddr == "": redels, pageRes, err = queryRedelegationsFromSrcValidator(store, k, req) default: @@ -427,7 +465,7 @@ func (k Querier) Redelegations(ctx context.Context, req *types.QueryRedelegation if err != nil { return nil, status.Error(codes.Internal, err.Error()) } - redelResponses, err := redelegationsToRedelegationResponses(ctx, k.Keeper, redels) + redelResponses, err := redelegationsToRedelegationResponses(sdkCtx, k.Keeper, redels) if err != nil { return nil, status.Error(codes.Internal, err.Error()) } @@ -436,7 +474,10 @@ func (k Querier) Redelegations(ctx context.Context, req *types.QueryRedelegation } // DelegatorValidators queries all validators info for given delegator address -func (k Querier) DelegatorValidators(ctx context.Context, req *types.QueryDelegatorValidatorsRequest) (*types.QueryDelegatorValidatorsResponse, error) { +func (k Querier) DelegatorValidators(ctx context.Context, req *types.QueryDelegatorValidatorsRequest) (meterResult *types.QueryDelegatorValidatorsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "DelegatorValidators")(&err) + if req == nil { return nil, status.Error(codes.InvalidArgument, "empty request") } @@ -446,7 +487,7 @@ func (k Querier) DelegatorValidators(ctx context.Context, req *types.QueryDelega } var validators types.Validators - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) delAddr, err := k.authKeeper.AddressCodec().StringToBytes(req.DelegatorAddr) if err != nil { return nil, err @@ -464,7 +505,7 @@ func (k Querier) DelegatorValidators(ctx context.Context, req *types.QueryDelega return err } - validator, err := k.GetValidator(ctx, valAddr) + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { return err } @@ -480,25 +521,31 @@ func (k Querier) DelegatorValidators(ctx context.Context, req *types.QueryDelega } // Pool queries the pool info -func (k Querier) Pool(ctx context.Context, _ *types.QueryPoolRequest) (*types.QueryPoolResponse, error) { - bondDenom, err := k.BondDenom(ctx) +func (k Querier) Pool(ctx context.Context, _ *types.QueryPoolRequest) (meterResult *types.QueryPoolResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "Pool")(&err) + + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return nil, err } - bondedPool := k.GetBondedPool(ctx) - notBondedPool := k.GetNotBondedPool(ctx) + bondedPool := k.GetBondedPool(sdkCtx) + notBondedPool := k.GetNotBondedPool(sdkCtx) pool := types.NewPool( - k.bankKeeper.GetBalance(ctx, notBondedPool.GetAddress(), bondDenom).Amount, - k.bankKeeper.GetBalance(ctx, bondedPool.GetAddress(), bondDenom).Amount, + k.bankKeeper.GetBalance(sdkCtx, notBondedPool.GetAddress(), bondDenom).Amount, + k.bankKeeper.GetBalance(sdkCtx, bondedPool.GetAddress(), bondDenom).Amount, ) return &types.QueryPoolResponse{Pool: pool}, nil } // Params queries the staking parameters -func (k Querier) Params(ctx context.Context, _ *types.QueryParamsRequest) (*types.QueryParamsResponse, error) { - params, err := k.GetParams(ctx) +func (k Querier) Params(ctx context.Context, _ *types.QueryParamsRequest) (meterResult *types.QueryParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "Params")(&err) + + params, err := k.GetParams(sdkCtx) if err != nil { return nil, err } diff --git a/x/staking/keeper/historical_info.go b/x/staking/keeper/historical_info.go index 8b970b8af2d4..fc11a335983f 100644 --- a/x/staking/keeper/historical_info.go +++ b/x/staking/keeper/historical_info.go @@ -11,8 +11,11 @@ import ( ) // GetHistoricalInfo gets the historical info at a given height -func (k Keeper) GetHistoricalInfo(ctx context.Context, height int64) (types.HistoricalInfo, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetHistoricalInfo(ctx context.Context, height int64) (meterResult types.HistoricalInfo, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetHistoricalInfo")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) key := types.GetHistoricalInfoKey(height) value, err := store.Get(key) @@ -28,8 +31,11 @@ func (k Keeper) GetHistoricalInfo(ctx context.Context, height int64) (types.Hist } // SetHistoricalInfo sets the historical info at a given height -func (k Keeper) SetHistoricalInfo(ctx context.Context, height int64, hi *types.HistoricalInfo) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetHistoricalInfo(ctx context.Context, height int64, hi *types.HistoricalInfo) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetHistoricalInfo")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) key := types.GetHistoricalInfoKey(height) value, err := k.cdc.Marshal(hi) if err != nil { @@ -39,8 +45,11 @@ func (k Keeper) SetHistoricalInfo(ctx context.Context, height int64, hi *types.H } // DeleteHistoricalInfo deletes the historical info at a given height -func (k Keeper) DeleteHistoricalInfo(ctx context.Context, height int64) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteHistoricalInfo(ctx context.Context, height int64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteHistoricalInfo")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) key := types.GetHistoricalInfoKey(height) return store.Delete(key) @@ -49,8 +58,11 @@ func (k Keeper) DeleteHistoricalInfo(ctx context.Context, height int64) error { // IterateHistoricalInfo provides an iterator over all stored HistoricalInfo // objects. For each HistoricalInfo object, cb will be called. If the cb returns // true, the iterator will break and close. -func (k Keeper) IterateHistoricalInfo(ctx context.Context, cb func(types.HistoricalInfo) bool) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) IterateHistoricalInfo(ctx context.Context, cb func(types.HistoricalInfo) bool) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateHistoricalInfo")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) iterator, err := store.Iterator(types.HistoricalInfoKey, storetypes.PrefixEndBytes(types.HistoricalInfoKey)) if err != nil { return err @@ -71,9 +83,12 @@ func (k Keeper) IterateHistoricalInfo(ctx context.Context, cb func(types.Histori } // GetAllHistoricalInfo returns all stored HistoricalInfo objects. -func (k Keeper) GetAllHistoricalInfo(ctx context.Context) ([]types.HistoricalInfo, error) { +func (k Keeper) GetAllHistoricalInfo(ctx context.Context) (meterResult []types.HistoricalInfo, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllHistoricalInfo")(&err) + var infos []types.HistoricalInfo - err := k.IterateHistoricalInfo(ctx, func(histInfo types.HistoricalInfo) bool { + err = k.IterateHistoricalInfo(sdkCtx, func(histInfo types.HistoricalInfo) bool { infos = append(infos, histInfo) return false }) @@ -83,14 +98,15 @@ func (k Keeper) GetAllHistoricalInfo(ctx context.Context) ([]types.HistoricalInf // TrackHistoricalInfo saves the latest historical-info and deletes the oldest // heights that are below pruning height -func (k Keeper) TrackHistoricalInfo(ctx context.Context) error { - entryNum, err := k.HistoricalEntries(ctx) +func (k Keeper) TrackHistoricalInfo(ctx context.Context) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "TrackHistoricalInfo")(&err) + + entryNum, err := k.HistoricalEntries(sdkCtx) if err != nil { return err } - sdkCtx := sdk.UnwrapSDKContext(ctx) - // Prune store to ensure we only have parameter-defined historical entries. // In most cases, this will involve removing a single historical entry. // In the rare scenario when the historical entries gets reduced to a lower value k' @@ -99,14 +115,14 @@ func (k Keeper) TrackHistoricalInfo(ctx context.Context) error { // over the historical entries starting from the most recent version to be pruned // and then return at the first empty entry. for i := sdkCtx.BlockHeight() - int64(entryNum); i >= 0; i-- { - _, err := k.GetHistoricalInfo(ctx, i) + _, err := k.GetHistoricalInfo(sdkCtx, i) if err != nil { if errors.Is(err, types.ErrNoHistoricalInfo) { break } return err } - if err = k.DeleteHistoricalInfo(ctx, i); err != nil { + if err = k.DeleteHistoricalInfo(sdkCtx, i); err != nil { return err } } @@ -117,13 +133,13 @@ func (k Keeper) TrackHistoricalInfo(ctx context.Context) error { } // Create HistoricalInfo struct - lastVals, err := k.GetLastValidators(ctx) + lastVals, err := k.GetLastValidators(sdkCtx) if err != nil { return err } - historicalEntry := types.NewHistoricalInfo(sdkCtx.BlockHeader(), types.Validators{Validators: lastVals, ValidatorCodec: k.validatorAddressCodec}, k.PowerReduction(ctx)) + historicalEntry := types.NewHistoricalInfo(sdkCtx.BlockHeader(), types.Validators{Validators: lastVals, ValidatorCodec: k.validatorAddressCodec}, k.PowerReduction(sdkCtx)) // Set latest HistoricalInfo at current height - return k.SetHistoricalInfo(ctx, sdkCtx.BlockHeight(), &historicalEntry) + return k.SetHistoricalInfo(sdkCtx, sdkCtx.BlockHeight(), &historicalEntry) } diff --git a/x/staking/keeper/keeper.go b/x/staking/keeper/keeper.go index 45948f72224c..86254e168dff 100644 --- a/x/staking/keeper/keeper.go +++ b/x/staking/keeper/keeper.go @@ -2,14 +2,15 @@ package keeper import ( "context" - "fmt" - - abci "github.com/cometbft/cometbft/abci/types" addresscodec "cosmossdk.io/core/address" storetypes "cosmossdk.io/core/store" "cosmossdk.io/log" "cosmossdk.io/math" + "fmt" + metrics "github.com/InjectiveLabs/metrics/v2" + + abci "github.com/cometbft/cometbft/abci/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -24,6 +25,7 @@ var _ types.DelegationSet = Keeper{} // Keeper of the x/staking store type Keeper struct { + meter metrics.Meter storeService storetypes.KVStoreService cdc codec.BinaryCodec authKeeper types.AccountKeeper @@ -77,6 +79,7 @@ func NewKeeper( // Logger returns a module-specific logger. func (k Keeper) Logger(ctx context.Context) log.Logger { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Logger")() return sdkCtx.Logger().With("module", "x/"+types.ModuleName) } @@ -101,8 +104,11 @@ func (k *Keeper) SetHooks(sh types.StakingHooks) { } // GetLastTotalPower loads the last total validator power. -func (k Keeper) GetLastTotalPower(ctx context.Context) (math.Int, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetLastTotalPower(ctx context.Context) (meterResult math.Int, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetLastTotalPower")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.LastTotalPowerKey) if err != nil { return math.ZeroInt(), err @@ -122,8 +128,11 @@ func (k Keeper) GetLastTotalPower(ctx context.Context) (math.Int, error) { } // SetLastTotalPower sets the last total validator power. -func (k Keeper) SetLastTotalPower(ctx context.Context, power math.Int) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetLastTotalPower(ctx context.Context, power math.Int) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetLastTotalPower")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.cdc.Marshal(&sdk.IntProto{Int: power}) if err != nil { return err @@ -147,8 +156,11 @@ func (k Keeper) ConsensusAddressCodec() addresscodec.Codec { } // SetValidatorUpdates sets the ABCI validator power updates for the current block. -func (k Keeper) SetValidatorUpdates(ctx context.Context, valUpdates []abci.ValidatorUpdate) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetValidatorUpdates(ctx context.Context, valUpdates []abci.ValidatorUpdate) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidatorUpdates")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.cdc.Marshal(&types.ValidatorUpdates{Updates: valUpdates}) if err != nil { return err @@ -157,8 +169,11 @@ func (k Keeper) SetValidatorUpdates(ctx context.Context, valUpdates []abci.Valid } // GetValidatorUpdates returns the ABCI validator power updates within the current block. -func (k Keeper) GetValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpdate, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetValidatorUpdates(ctx context.Context) (meterResult []abci.ValidatorUpdate, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorUpdates")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.ValidatorUpdatesKey) if err != nil { return nil, err @@ -172,3 +187,11 @@ func (k Keeper) GetValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpdate return valUpdates.Updates, nil } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter +} diff --git a/x/staking/keeper/migrations.go b/x/staking/keeper/migrations.go index e94848b13397..9f9215c6ca32 100644 --- a/x/staking/keeper/migrations.go +++ b/x/staking/keeper/migrations.go @@ -26,24 +26,28 @@ func NewMigrator(keeper *Keeper, legacySubspace exported.Subspace) Migrator { // Migrate1to2 migrates from version 1 to 2. func (m Migrator) Migrate1to2(ctx sdk.Context) error { + store := runtime.KVStoreAdapter(m.keeper.storeService.OpenKVStore(ctx)) return v2.MigrateStore(ctx, store) } // Migrate2to3 migrates x/staking state from consensus version 2 to 3. func (m Migrator) Migrate2to3(ctx sdk.Context) error { + store := runtime.KVStoreAdapter(m.keeper.storeService.OpenKVStore(ctx)) return v3.MigrateStore(ctx, store, m.keeper.cdc, m.legacySubspace) } // Migrate3to4 migrates x/staking state from consensus version 3 to 4. func (m Migrator) Migrate3to4(ctx sdk.Context) error { + store := runtime.KVStoreAdapter(m.keeper.storeService.OpenKVStore(ctx)) return v4.MigrateStore(ctx, store, m.keeper.cdc, m.legacySubspace) } // Migrate4to5 migrates x/staking state from consensus version 4 to 5. func (m Migrator) Migrate4to5(ctx sdk.Context) error { + store := runtime.KVStoreAdapter(m.keeper.storeService.OpenKVStore(ctx)) return v5.MigrateStore(ctx, store, m.keeper.cdc) } diff --git a/x/staking/keeper/msg_server.go b/x/staking/keeper/msg_server.go index 45d72379a983..1e6f543c7ed0 100644 --- a/x/staking/keeper/msg_server.go +++ b/x/staking/keeper/msg_server.go @@ -34,17 +34,20 @@ func NewMsgServerImpl(keeper *Keeper) types.MsgServer { var _ types.MsgServer = msgServer{} // CreateValidator defines a method for creating a new validator -func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateValidator) (*types.MsgCreateValidatorResponse, error) { +func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateValidator) (meterResult *types.MsgCreateValidatorResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "CreateValidator")(&err) + valAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) } - if err := msg.Validate(k.validatorAddressCodec); err != nil { + if err = msg.Validate(k.validatorAddressCodec); err != nil { return nil, err } - minCommRate, err := k.MinCommissionRate(ctx) + minCommRate, err := k.MinCommissionRate(sdkCtx) if err != nil { return nil, err } @@ -54,7 +57,7 @@ func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateVali } // check to see if the pubkey or sender has been registered before - if _, err := k.GetValidator(ctx, valAddr); err == nil { + if _, err := k.GetValidator(sdkCtx, valAddr); err == nil { return nil, types.ErrValidatorOwnerExists } @@ -63,11 +66,11 @@ func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateVali return nil, errorsmod.Wrapf(sdkerrors.ErrInvalidType, "Expecting cryptotypes.PubKey, got %T", pk) } - if _, err := k.GetValidatorByConsAddr(ctx, sdk.GetConsAddress(pk)); err == nil { + if _, err := k.GetValidatorByConsAddr(sdkCtx, sdk.GetConsAddress(pk)); err == nil { return nil, types.ErrValidatorPubKeyExists } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return nil, err } @@ -81,8 +84,6 @@ func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateVali if _, err := msg.Description.EnsureLength(); err != nil { return nil, err } - - sdkCtx := sdk.UnwrapSDKContext(ctx) cp := sdkCtx.ConsensusParams() if cp.Validator != nil { pkType := pk.Type() @@ -118,30 +119,30 @@ func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateVali validator.MinSelfDelegation = msg.MinSelfDelegation - err = k.SetValidator(ctx, validator) + err = k.SetValidator(sdkCtx, validator) if err != nil { return nil, err } - err = k.SetValidatorByConsAddr(ctx, validator) + err = k.SetValidatorByConsAddr(sdkCtx, validator) if err != nil { return nil, err } - err = k.SetNewValidatorByPowerIndex(ctx, validator) + err = k.SetNewValidatorByPowerIndex(sdkCtx, validator) if err != nil { return nil, err } // call the after-creation hook - if err := k.Hooks().AfterValidatorCreated(ctx, valAddr); err != nil { + if err = k.Hooks().AfterValidatorCreated(sdkCtx, valAddr); err != nil { return nil, err } // move coins from the msg.Address account to a (self-delegation) delegator account // the validator account and global shares are updated within here // NOTE source will always be from a wallet which are unbonded - _, err = k.Keeper.Delegate(ctx, sdk.AccAddress(valAddr), msg.Value.Amount, types.Unbonded, validator, true) + _, err = k.Keeper.Delegate(sdkCtx, sdk.AccAddress(valAddr), msg.Value.Amount, types.Unbonded, validator, true) if err != nil { return nil, err } @@ -158,7 +159,10 @@ func (k msgServer) CreateValidator(ctx context.Context, msg *types.MsgCreateVali } // EditValidator defines a method for editing an existing validator -func (k msgServer) EditValidator(ctx context.Context, msg *types.MsgEditValidator) (*types.MsgEditValidatorResponse, error) { +func (k msgServer) EditValidator(ctx context.Context, msg *types.MsgEditValidator) (meterResult *types.MsgEditValidatorResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "EditValidator")(&err) + valAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) @@ -180,7 +184,7 @@ func (k msgServer) EditValidator(ctx context.Context, msg *types.MsgEditValidato return nil, errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "commission rate must be between 0 and 1 (inclusive)") } - minCommissionRate, err := k.MinCommissionRate(ctx) + minCommissionRate, err := k.MinCommissionRate(sdkCtx) if err != nil { return nil, errorsmod.Wrap(sdkerrors.ErrLogic, err.Error()) } @@ -191,7 +195,7 @@ func (k msgServer) EditValidator(ctx context.Context, msg *types.MsgEditValidato } // validator must already be registered - validator, err := k.GetValidator(ctx, valAddr) + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { return nil, err } @@ -205,13 +209,13 @@ func (k msgServer) EditValidator(ctx context.Context, msg *types.MsgEditValidato validator.Description = description if msg.CommissionRate != nil { - commission, err := k.UpdateValidatorCommission(ctx, validator, *msg.CommissionRate) + commission, err := k.UpdateValidatorCommission(sdkCtx, validator, *msg.CommissionRate) if err != nil { return nil, err } // call the before-modification hook since we're about to update the commission - if err := k.Hooks().BeforeValidatorModified(ctx, valAddr); err != nil { + if err = k.Hooks().BeforeValidatorModified(sdkCtx, valAddr); err != nil { return nil, err } @@ -230,12 +234,10 @@ func (k msgServer) EditValidator(ctx context.Context, msg *types.MsgEditValidato validator.MinSelfDelegation = *msg.MinSelfDelegation } - err = k.SetValidator(ctx, validator) + err = k.SetValidator(sdkCtx, validator) if err != nil { return nil, err } - - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( types.EventTypeEditValidator, @@ -248,7 +250,10 @@ func (k msgServer) EditValidator(ctx context.Context, msg *types.MsgEditValidato } // Delegate defines a method for performing a delegation of coins from a delegator to a validator -func (k msgServer) Delegate(ctx context.Context, msg *types.MsgDelegate) (*types.MsgDelegateResponse, error) { +func (k msgServer) Delegate(ctx context.Context, msg *types.MsgDelegate) (meterResult *types.MsgDelegateResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "Delegate")(&err) + valAddr, valErr := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if valErr != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", valErr) @@ -266,12 +271,12 @@ func (k msgServer) Delegate(ctx context.Context, msg *types.MsgDelegate) (*types ) } - validator, err := k.GetValidator(ctx, valAddr) + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { return nil, err } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return nil, err } @@ -283,7 +288,7 @@ func (k msgServer) Delegate(ctx context.Context, msg *types.MsgDelegate) (*types } // NOTE: source funds are always unbonded - newShares, err := k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonded, validator, true) + newShares, err := k.Keeper.Delegate(sdkCtx, delegatorAddress, msg.Amount.Amount, types.Unbonded, validator, true) if err != nil { return nil, err } @@ -298,8 +303,6 @@ func (k msgServer) Delegate(ctx context.Context, msg *types.MsgDelegate) (*types ) }() } - - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( types.EventTypeDelegate, @@ -313,7 +316,10 @@ func (k msgServer) Delegate(ctx context.Context, msg *types.MsgDelegate) (*types return &types.MsgDelegateResponse{}, nil } -func (k msgServer) TransferDelegation(ctx context.Context, msg *types.MsgTransferDelegation) (*types.MsgTransferDelegationResponse, error) { +func (k msgServer) TransferDelegation(ctx context.Context, msg *types.MsgTransferDelegation) (meterResult *types.MsgTransferDelegationResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "TransferDelegation")(&err) + valAddr, valErr := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if valErr != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", valErr) @@ -339,11 +345,11 @@ func (k msgServer) TransferDelegation(ctx context.Context, msg *types.MsgTransfe } // Check if receiver is allowed - if !k.IsAllowedDelegationTransferReceiver(ctx, receiverAddress) { + if !k.IsAllowedDelegationTransferReceiver(sdkCtx, receiverAddress) { return nil, sdkerrors.ErrUnauthorized.Wrap("receiver not in allowed receivers list") } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return nil, err } @@ -353,13 +359,13 @@ func (k msgServer) TransferDelegation(ctx context.Context, msg *types.MsgTransfe } transferShares, err := k.ValidateUnbondAmount( - ctx, delegatorAddress, valAddr, msg.Amount.Amount, + sdkCtx, delegatorAddress, valAddr, msg.Amount.Amount, ) if err != nil { return nil, err } - validator, err := k.GetValidator(ctx, valAddr) + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { return nil, err } @@ -368,7 +374,7 @@ func (k msgServer) TransferDelegation(ctx context.Context, msg *types.MsgTransfe return nil, sdkerrors.ErrUnauthorized.Wrapf("validator %s must be bonded", msg.ValidatorAddress) } - returnAmount, err := k.Unbond(ctx, delegatorAddress, valAddr, transferShares) + returnAmount, err := k.Unbond(sdkCtx, delegatorAddress, valAddr, transferShares) if err != nil { return nil, err } @@ -377,7 +383,7 @@ func (k msgServer) TransferDelegation(ctx context.Context, msg *types.MsgTransfe return nil, types.ErrTinyRedelegationAmount } - validator, err = k.GetValidator(ctx, valAddr) + validator, err = k.GetValidator(sdkCtx, valAddr) if err != nil { return nil, err } @@ -388,12 +394,10 @@ func (k msgServer) TransferDelegation(ctx context.Context, msg *types.MsgTransfe } // Add shares to the receiver - this will handle the destination delegation hooks internally - _, err = k.Keeper.Delegate(ctx, receiverAddress, returnAmount, validator.GetStatus(), validator, false) + _, err = k.Keeper.Delegate(sdkCtx, receiverAddress, returnAmount, validator.GetStatus(), validator, false) if err != nil { return nil, err } - - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( types.EventTypeTransferDelegation, @@ -408,7 +412,10 @@ func (k msgServer) TransferDelegation(ctx context.Context, msg *types.MsgTransfe } // BeginRedelegate defines a method for performing a redelegation of coins from a source validator to a destination validator of given delegator -func (k msgServer) BeginRedelegate(ctx context.Context, msg *types.MsgBeginRedelegate) (*types.MsgBeginRedelegateResponse, error) { +func (k msgServer) BeginRedelegate(ctx context.Context, msg *types.MsgBeginRedelegate) (meterResult *types.MsgBeginRedelegateResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "BeginRedelegate")(&err) + valSrcAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorSrcAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid source validator address: %s", err) @@ -432,13 +439,13 @@ func (k msgServer) BeginRedelegate(ctx context.Context, msg *types.MsgBeginRedel } shares, err := k.ValidateUnbondAmount( - ctx, delegatorAddress, valSrcAddr, msg.Amount.Amount, + sdkCtx, delegatorAddress, valSrcAddr, msg.Amount.Amount, ) if err != nil { return nil, err } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return nil, err } @@ -450,7 +457,7 @@ func (k msgServer) BeginRedelegate(ctx context.Context, msg *types.MsgBeginRedel } completionTime, err := k.BeginRedelegation( - ctx, delegatorAddress, valSrcAddr, valDstAddr, shares, + sdkCtx, delegatorAddress, valSrcAddr, valDstAddr, shares, ) if err != nil { return nil, err @@ -466,8 +473,6 @@ func (k msgServer) BeginRedelegate(ctx context.Context, msg *types.MsgBeginRedel ) }() } - - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( types.EventTypeRedelegate, @@ -484,7 +489,10 @@ func (k msgServer) BeginRedelegate(ctx context.Context, msg *types.MsgBeginRedel } // Undelegate defines a method for performing an undelegation from a delegate and a validator -func (k msgServer) Undelegate(ctx context.Context, msg *types.MsgUndelegate) (*types.MsgUndelegateResponse, error) { +func (k msgServer) Undelegate(ctx context.Context, msg *types.MsgUndelegate) (meterResult *types.MsgUndelegateResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "Undelegate")(&err) + addr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) @@ -503,13 +511,13 @@ func (k msgServer) Undelegate(ctx context.Context, msg *types.MsgUndelegate) (*t } shares, err := k.ValidateUnbondAmount( - ctx, delegatorAddress, addr, msg.Amount.Amount, + sdkCtx, delegatorAddress, addr, msg.Amount.Amount, ) if err != nil { return nil, err } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return nil, err } @@ -520,7 +528,7 @@ func (k msgServer) Undelegate(ctx context.Context, msg *types.MsgUndelegate) (*t ) } - completionTime, undelegatedAmt, err := k.Keeper.Undelegate(ctx, delegatorAddress, addr, shares) + completionTime, undelegatedAmt, err := k.Keeper.Undelegate(sdkCtx, delegatorAddress, addr, shares) if err != nil { return nil, err } @@ -537,8 +545,6 @@ func (k msgServer) Undelegate(ctx context.Context, msg *types.MsgUndelegate) (*t ) }() } - - sdkCtx := sdk.UnwrapSDKContext(ctx) sdkCtx.EventManager().EmitEvents(sdk.Events{ sdk.NewEvent( types.EventTypeUnbond, @@ -557,7 +563,10 @@ func (k msgServer) Undelegate(ctx context.Context, msg *types.MsgUndelegate) (*t // CancelUnbondingDelegation defines a method for canceling the unbonding delegation // and delegate back to the validator. -func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.MsgCancelUnbondingDelegation) (*types.MsgCancelUnbondingDelegationResponse, error) { +func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.MsgCancelUnbondingDelegation) (meterResult *types.MsgCancelUnbondingDelegationResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "CancelUnbondingDelegation")(&err) + valAddr, err := k.validatorAddressCodec.StringToBytes(msg.ValidatorAddress) if err != nil { return nil, sdkerrors.ErrInvalidAddress.Wrapf("invalid validator address: %s", err) @@ -582,7 +591,7 @@ func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.Msg ) } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return nil, err } @@ -593,7 +602,7 @@ func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.Msg ) } - validator, err := k.GetValidator(ctx, valAddr) + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { return nil, err } @@ -609,7 +618,7 @@ func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.Msg return nil, types.ErrValidatorJailed } - ubd, err := k.GetUnbondingDelegation(ctx, delegatorAddress, valAddr) + ubd, err := k.GetUnbondingDelegation(sdkCtx, delegatorAddress, valAddr) if err != nil { return nil, status.Errorf( codes.NotFound, @@ -637,14 +646,12 @@ func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.Msg if unbondEntry.Balance.LT(msg.Amount.Amount) { return nil, sdkerrors.ErrInvalidRequest.Wrap("amount is greater than the unbonding delegation entry balance") } - - sdkCtx := sdk.UnwrapSDKContext(ctx) if unbondEntry.CompletionTime.Before(sdkCtx.BlockTime()) { return nil, sdkerrors.ErrInvalidRequest.Wrap("unbonding delegation is already processed") } // delegate back the unbonding delegation amount to the validator - _, err = k.Keeper.Delegate(ctx, delegatorAddress, msg.Amount.Amount, types.Unbonding, validator, false) + _, err = k.Keeper.Delegate(sdkCtx, delegatorAddress, msg.Amount.Amount, types.Unbonding, validator, false) if err != nil { return nil, err } @@ -661,9 +668,9 @@ func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.Msg // set the unbonding delegation or remove it if there are no more entries if len(ubd.Entries) == 0 { - err = k.RemoveUnbondingDelegation(ctx, ubd) + err = k.RemoveUnbondingDelegation(sdkCtx, ubd) } else { - err = k.SetUnbondingDelegation(ctx, ubd) + err = k.SetUnbondingDelegation(sdkCtx, ubd) } if err != nil { @@ -684,17 +691,20 @@ func (k msgServer) CancelUnbondingDelegation(ctx context.Context, msg *types.Msg } // UpdateParams defines a method to perform updation of params exist in x/staking module. -func (k msgServer) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (*types.MsgUpdateParamsResponse, error) { +func (k msgServer) UpdateParams(ctx context.Context, msg *types.MsgUpdateParams) (meterResult *types.MsgUpdateParamsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "UpdateParams")(&err) + if k.authority != msg.Authority { return nil, errorsmod.Wrapf(govtypes.ErrInvalidSigner, "invalid authority; expected %s, got %s", k.authority, msg.Authority) } - if err := msg.Params.Validate(); err != nil { + if err = msg.Params.Validate(); err != nil { return nil, err } // store params - if err := k.SetParams(ctx, msg.Params); err != nil { + if err = k.SetParams(sdkCtx, msg.Params); err != nil { return nil, err } diff --git a/x/staking/keeper/params.go b/x/staking/keeper/params.go index 83e29708470c..3323efecc34a 100644 --- a/x/staking/keeper/params.go +++ b/x/staking/keeper/params.go @@ -11,34 +11,49 @@ import ( ) // UnbondingTime - The time duration for unbonding -func (k Keeper) UnbondingTime(ctx context.Context) (time.Duration, error) { - params, err := k.GetParams(ctx) +func (k Keeper) UnbondingTime(ctx context.Context) (meterResult time.Duration, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UnbondingTime")(&err) + + params, err := k.GetParams(sdkCtx) return params.UnbondingTime, err } // MaxValidators - Maximum number of validators -func (k Keeper) MaxValidators(ctx context.Context) (uint32, error) { - params, err := k.GetParams(ctx) +func (k Keeper) MaxValidators(ctx context.Context) (meterResult uint32, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "MaxValidators")(&err) + + params, err := k.GetParams(sdkCtx) return params.MaxValidators, err } // MaxEntries - Maximum number of simultaneous unbonding // delegations or redelegations (per pair/trio) -func (k Keeper) MaxEntries(ctx context.Context) (uint32, error) { - params, err := k.GetParams(ctx) +func (k Keeper) MaxEntries(ctx context.Context) (meterResult uint32, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "MaxEntries")(&err) + + params, err := k.GetParams(sdkCtx) return params.MaxEntries, err } // HistoricalEntries = number of historical info entries // to persist in store -func (k Keeper) HistoricalEntries(ctx context.Context) (uint32, error) { - params, err := k.GetParams(ctx) +func (k Keeper) HistoricalEntries(ctx context.Context) (meterResult uint32, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "HistoricalEntries")(&err) + + params, err := k.GetParams(sdkCtx) return params.HistoricalEntries, err } // BondDenom - Bondable coin denomination -func (k Keeper) BondDenom(ctx context.Context) (string, error) { - params, err := k.GetParams(ctx) +func (k Keeper) BondDenom(ctx context.Context) (meterResult string, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BondDenom")(&err) + + params, err := k.GetParams(sdkCtx) return params.BondDenom, err } @@ -47,19 +62,28 @@ func (k Keeper) BondDenom(ctx context.Context) (string, error) { // TODO: we might turn this into an on-chain param: // https://github.com/cosmos/cosmos-sdk/issues/8365 func (k Keeper) PowerReduction(ctx context.Context) math.Int { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "PowerReduction")() + return sdk.DefaultPowerReduction } // MinCommissionRate - Minimum validator commission rate -func (k Keeper) MinCommissionRate(ctx context.Context) (math.LegacyDec, error) { - params, err := k.GetParams(ctx) +func (k Keeper) MinCommissionRate(ctx context.Context) (meterResult math.LegacyDec, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "MinCommissionRate")(&err) + + params, err := k.GetParams(sdkCtx) return params.MinCommissionRate, err } // SetParams sets the x/staking module parameters. // CONTRACT: This method performs no validation of the parameters. -func (k Keeper) SetParams(ctx context.Context, params types.Params) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetParams(ctx context.Context, params types.Params) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetParams")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.cdc.Marshal(¶ms) if err != nil { return err @@ -69,7 +93,10 @@ func (k Keeper) SetParams(ctx context.Context, params types.Params) error { // GetParams gets the x/staking module parameters. func (k Keeper) GetParams(ctx context.Context) (params types.Params, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetParams")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.ParamsKey) if err != nil { return params, err diff --git a/x/staking/keeper/pool.go b/x/staking/keeper/pool.go index dc81409ff6a7..c6e77059dd6f 100644 --- a/x/staking/keeper/pool.go +++ b/x/staking/keeper/pool.go @@ -11,98 +11,125 @@ import ( // GetBondedPool returns the bonded tokens pool's module account func (k Keeper) GetBondedPool(ctx context.Context) (bondedPool sdk.ModuleAccountI) { - return k.authKeeper.GetModuleAccount(ctx, types.BondedPoolName) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetBondedPool")() + + return k.authKeeper.GetModuleAccount(sdkCtx, types.BondedPoolName) } // GetNotBondedPool returns the not bonded tokens pool's module account func (k Keeper) GetNotBondedPool(ctx context.Context) (notBondedPool sdk.ModuleAccountI) { - return k.authKeeper.GetModuleAccount(ctx, types.NotBondedPoolName) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetNotBondedPool")() + + return k.authKeeper.GetModuleAccount(sdkCtx, types.NotBondedPoolName) } // bondedTokensToNotBonded transfers coins from the bonded to the not bonded pool within staking -func (k Keeper) bondedTokensToNotBonded(ctx context.Context, tokens math.Int) error { - bondDenom, err := k.BondDenom(ctx) +func (k Keeper) bondedTokensToNotBonded(ctx context.Context, tokens math.Int) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "bondedTokensToNotBonded")(&err) + + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return err } coins := sdk.NewCoins(sdk.NewCoin(bondDenom, tokens)) - return k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.BondedPoolName, types.NotBondedPoolName, coins) + return k.bankKeeper.SendCoinsFromModuleToModule(sdkCtx, types.BondedPoolName, types.NotBondedPoolName, coins) } // notBondedTokensToBonded transfers coins from the not bonded to the bonded pool within staking -func (k Keeper) notBondedTokensToBonded(ctx context.Context, tokens math.Int) error { - bondDenom, err := k.BondDenom(ctx) +func (k Keeper) notBondedTokensToBonded(ctx context.Context, tokens math.Int) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "notBondedTokensToBonded")(&err) + + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return err } coins := sdk.NewCoins(sdk.NewCoin(bondDenom, tokens)) - return k.bankKeeper.SendCoinsFromModuleToModule(ctx, types.NotBondedPoolName, types.BondedPoolName, coins) + return k.bankKeeper.SendCoinsFromModuleToModule(sdkCtx, types.NotBondedPoolName, types.BondedPoolName, coins) } // burnBondedTokens burns coins from the bonded pool module account -func (k Keeper) burnBondedTokens(ctx context.Context, amt math.Int) error { +func (k Keeper) burnBondedTokens(ctx context.Context, amt math.Int) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "burnBondedTokens")(&err) + if !amt.IsPositive() { // skip as no coins need to be burned return nil } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return err } coins := sdk.NewCoins(sdk.NewCoin(bondDenom, amt)) - return k.bankKeeper.BurnCoins(ctx, types.BondedPoolName, coins) + return k.bankKeeper.BurnCoins(sdkCtx, types.BondedPoolName, coins) } // burnNotBondedTokens burns coins from the not bonded pool module account -func (k Keeper) burnNotBondedTokens(ctx context.Context, amt math.Int) error { +func (k Keeper) burnNotBondedTokens(ctx context.Context, amt math.Int) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "burnNotBondedTokens")(&err) + if !amt.IsPositive() { // skip as no coins need to be burned return nil } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return err } coins := sdk.NewCoins(sdk.NewCoin(bondDenom, amt)) - return k.bankKeeper.BurnCoins(ctx, types.NotBondedPoolName, coins) + return k.bankKeeper.BurnCoins(sdkCtx, types.NotBondedPoolName, coins) } // TotalBondedTokens total staking tokens supply which is bonded -func (k Keeper) TotalBondedTokens(ctx context.Context) (math.Int, error) { - bondedPool := k.GetBondedPool(ctx) - bondDenom, err := k.BondDenom(ctx) +func (k Keeper) TotalBondedTokens(ctx context.Context) (meterResult math.Int, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "TotalBondedTokens")(&err) + + bondedPool := k.GetBondedPool(sdkCtx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return math.ZeroInt(), err } - return k.bankKeeper.GetBalance(ctx, bondedPool.GetAddress(), bondDenom).Amount, nil + return k.bankKeeper.GetBalance(sdkCtx, bondedPool.GetAddress(), bondDenom).Amount, nil } // StakingTokenSupply staking tokens from the total supply -func (k Keeper) StakingTokenSupply(ctx context.Context) (math.Int, error) { - bondDenom, err := k.BondDenom(ctx) +func (k Keeper) StakingTokenSupply(ctx context.Context) (meterResult math.Int, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "StakingTokenSupply")(&err) + + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return math.ZeroInt(), err } - return k.bankKeeper.GetSupply(ctx, bondDenom).Amount, nil + return k.bankKeeper.GetSupply(sdkCtx, bondDenom).Amount, nil } // BondedRatio the fraction of the staking tokens which are currently bonded -func (k Keeper) BondedRatio(ctx context.Context) (math.LegacyDec, error) { - stakeSupply, err := k.StakingTokenSupply(ctx) +func (k Keeper) BondedRatio(ctx context.Context) (meterResult math.LegacyDec, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BondedRatio")(&err) + + stakeSupply, err := k.StakingTokenSupply(sdkCtx) if err != nil { return math.LegacyZeroDec(), err } if stakeSupply.IsPositive() { - totalBonded, err := k.TotalBondedTokens(ctx) + totalBonded, err := k.TotalBondedTokens(sdkCtx) if err != nil { return math.LegacyZeroDec(), err } diff --git a/x/staking/keeper/power_reduction.go b/x/staking/keeper/power_reduction.go index 7eaad0cbe4f6..e421645937e2 100644 --- a/x/staking/keeper/power_reduction.go +++ b/x/staking/keeper/power_reduction.go @@ -10,10 +10,16 @@ import ( // TokensToConsensusPower converts input tokens to potential consensus-engine power func (k Keeper) TokensToConsensusPower(ctx context.Context, tokens math.Int) int64 { - return sdk.TokensToConsensusPower(tokens, k.PowerReduction(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "TokensToConsensusPower")() + + return sdk.TokensToConsensusPower(tokens, k.PowerReduction(sdkCtx)) } // TokensFromConsensusPower converts input power to tokens func (k Keeper) TokensFromConsensusPower(ctx context.Context, power int64) math.Int { - return sdk.TokensFromConsensusPower(power, k.PowerReduction(ctx)) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "TokensFromConsensusPower")() + + return sdk.TokensFromConsensusPower(power, k.PowerReduction(sdkCtx)) } diff --git a/x/staking/keeper/query_utils.go b/x/staking/keeper/query_utils.go index 4b089da7800a..6bb1e65450bd 100644 --- a/x/staking/keeper/query_utils.go +++ b/x/staking/keeper/query_utils.go @@ -12,9 +12,12 @@ import ( // GetDelegatorValidators returns all validators that a delegator is bonded to. If maxRetrieve is supplied, the respective amount will be returned. func (k Keeper) GetDelegatorValidators( ctx context.Context, delegatorAddr sdk.AccAddress, maxRetrieve uint32, -) (types.Validators, error) { +) (meterResult types.Validators, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDelegatorValidators")(&err) + validators := make([]types.Validator, maxRetrieve) - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) delegatorPrefixKey := types.GetDelegationsKey(delegatorAddr) iterator, err := store.Iterator(delegatorPrefixKey, storetypes.PrefixEndBytes(delegatorPrefixKey)) // smallest to largest @@ -32,7 +35,7 @@ func (k Keeper) GetDelegatorValidators( return types.Validators{}, err } - validator, err := k.GetValidator(ctx, valAddr) + validator, err := k.GetValidator(sdkCtx, valAddr) if err != nil { return types.Validators{}, err } @@ -48,7 +51,10 @@ func (k Keeper) GetDelegatorValidators( func (k Keeper) GetDelegatorValidator( ctx context.Context, delegatorAddr sdk.AccAddress, validatorAddr sdk.ValAddress, ) (validator types.Validator, err error) { - delegation, err := k.GetDelegation(ctx, delegatorAddr, validatorAddr) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDelegatorValidator")(&err) + + delegation, err := k.GetDelegation(sdkCtx, delegatorAddr, validatorAddr) if err != nil { return validator, err } @@ -58,14 +64,17 @@ func (k Keeper) GetDelegatorValidator( return validator, err } - return k.GetValidator(ctx, valAddr) + return k.GetValidator(sdkCtx, valAddr) } // GetAllDelegatorDelegations returns all delegations of a delegator -func (k Keeper) GetAllDelegatorDelegations(ctx context.Context, delegator sdk.AccAddress) ([]types.Delegation, error) { +func (k Keeper) GetAllDelegatorDelegations(ctx context.Context, delegator sdk.AccAddress) (meterResult []types.Delegation, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllDelegatorDelegations")(&err) + delegations := make([]types.Delegation, 0) - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) delegatorPrefixKey := types.GetDelegationsKey(delegator) iterator, err := store.Iterator(delegatorPrefixKey, storetypes.PrefixEndBytes(delegatorPrefixKey)) // smallest to largest @@ -87,10 +96,13 @@ func (k Keeper) GetAllDelegatorDelegations(ctx context.Context, delegator sdk.Ac } // GetAllUnbondingDelegations returns all unbonding-delegations of a delegator -func (k Keeper) GetAllUnbondingDelegations(ctx context.Context, delegator sdk.AccAddress) ([]types.UnbondingDelegation, error) { +func (k Keeper) GetAllUnbondingDelegations(ctx context.Context, delegator sdk.AccAddress) (meterResult []types.UnbondingDelegation, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllUnbondingDelegations")(&err) + unbondingDelegations := make([]types.UnbondingDelegation, 0) - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) delegatorPrefixKey := types.GetUBDsKey(delegator) iterator, err := store.Iterator(delegatorPrefixKey, storetypes.PrefixEndBytes(delegatorPrefixKey)) // smallest to largest @@ -114,8 +126,11 @@ func (k Keeper) GetAllUnbondingDelegations(ctx context.Context, delegator sdk.Ac // GetAllRedelegations returns all redelegations of a delegator func (k Keeper) GetAllRedelegations( ctx context.Context, delegator sdk.AccAddress, srcValAddress, dstValAddress sdk.ValAddress, -) ([]types.Redelegation, error) { - store := k.storeService.OpenKVStore(ctx) +) (meterResult []types.Redelegation, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllRedelegations")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) delegatorPrefixKey := types.GetREDsKey(delegator) iterator, err := store.Iterator(delegatorPrefixKey, storetypes.PrefixEndBytes(delegatorPrefixKey)) // smallest to largest diff --git a/x/staking/keeper/slash.go b/x/staking/keeper/slash.go index e1fa8bb47d64..4ef6d2f7d515 100644 --- a/x/staking/keeper/slash.go +++ b/x/staking/keeper/slash.go @@ -32,22 +32,24 @@ import ( // // Infraction was committed at the current height or at a past height, // but not at a height in the future -func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionHeight, power int64, slashFactor math.LegacyDec) (math.Int, error) { - logger := k.Logger(ctx) +func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionHeight, power int64, slashFactor math.LegacyDec) (meterResult math.Int, err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Slash")(&err) + + logger := k.Logger(sdkCtx) if slashFactor.IsNegative() { return math.NewInt(0), fmt.Errorf("attempted to slash with a negative slash factor: %v", slashFactor) } // Amount of slashing = slash slashFactor * power at time of infraction - amount := k.TokensFromConsensusPower(ctx, power) + amount := k.TokensFromConsensusPower(sdkCtx, power) slashAmountDec := math.LegacyNewDecFromInt(amount).Mul(slashFactor) slashAmount := slashAmountDec.TruncateInt() // ref https://github.com/cosmos/cosmos-sdk/issues/1348 - validator, err := k.GetValidatorByConsAddr(ctx, consAddr) + validator, err := k.GetValidatorByConsAddr(sdkCtx, consAddr) if errors.Is(err, types.ErrNoValidatorFound) { // If not found, the validator must have been overslashed and removed - so we don't need to do anything // NOTE: Correctness dependent on invariant that unbonding delegations / redelegations must also have been completely @@ -78,8 +80,8 @@ func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionH } // call the before-modification hook - if err := k.Hooks().BeforeValidatorModified(ctx, operatorAddress); err != nil { - k.Logger(ctx).Error("failed to call before validator modified hook", "error", err) + if err = k.Hooks().BeforeValidatorModified(sdkCtx, operatorAddress); err != nil { + k.Logger(sdkCtx).Error("failed to call before validator modified hook", "error", err) } // Track remaining slash amount for the validator @@ -104,13 +106,13 @@ func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionH case infractionHeight < sdkCtx.BlockHeight(): // Iterate through unbonding delegations from slashed validator - unbondingDelegations, err := k.GetUnbondingDelegationsFromValidator(ctx, operatorAddress) + unbondingDelegations, err := k.GetUnbondingDelegationsFromValidator(sdkCtx, operatorAddress) if err != nil { return math.NewInt(0), err } for _, unbondingDelegation := range unbondingDelegations { - amountSlashed, err := k.SlashUnbondingDelegation(ctx, unbondingDelegation, infractionHeight, slashFactor) + amountSlashed, err := k.SlashUnbondingDelegation(sdkCtx, unbondingDelegation, infractionHeight, slashFactor) if err != nil { return math.ZeroInt(), err } @@ -122,13 +124,13 @@ func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionH } // Iterate through redelegations from slashed source validator - redelegations, err := k.GetRedelegationsFromSrcValidator(ctx, operatorAddress) + redelegations, err := k.GetRedelegationsFromSrcValidator(sdkCtx, operatorAddress) if err != nil { return math.NewInt(0), err } for _, redelegation := range redelegations { - amountSlashed, err := k.SlashRedelegation(ctx, validator, redelegation, infractionHeight, slashFactor) + amountSlashed, err := k.SlashRedelegation(sdkCtx, validator, redelegation, infractionHeight, slashFactor) if err != nil { return math.NewInt(0), err } @@ -167,25 +169,25 @@ func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionH effectiveFraction = oneDec } // call the before-slashed hook - if err := k.Hooks().BeforeValidatorSlashed(ctx, operatorAddress, effectiveFraction); err != nil { - k.Logger(ctx).Error("failed to call before validator slashed hook", "error", err) + if err = k.Hooks().BeforeValidatorSlashed(sdkCtx, operatorAddress, effectiveFraction); err != nil { + k.Logger(sdkCtx).Error("failed to call before validator slashed hook", "error", err) } } // Deduct from validator's bonded tokens and update the validator. // Burn the slashed tokens from the pool account and decrease the total supply. - validator, err = k.RemoveValidatorTokens(ctx, validator, tokensToBurn) + validator, err = k.RemoveValidatorTokens(sdkCtx, validator, tokensToBurn) if err != nil { return math.NewInt(0), err } switch validator.GetStatus() { case types.Bonded: - if err := k.burnBondedTokens(ctx, tokensToBurn); err != nil { + if err = k.burnBondedTokens(sdkCtx, tokensToBurn); err != nil { return math.NewInt(0), err } case types.Unbonding, types.Unbonded: - if err := k.burnNotBondedTokens(ctx, tokensToBurn); err != nil { + if err = k.burnNotBondedTokens(sdkCtx, tokensToBurn); err != nil { return math.NewInt(0), err } default: @@ -202,29 +204,38 @@ func (k Keeper) Slash(ctx context.Context, consAddr sdk.ConsAddress, infractionH } // SlashWithInfractionReason implementation doesn't require the infraction (types.Infraction) to work but is required by Interchain Security. -func (k Keeper) SlashWithInfractionReason(ctx context.Context, consAddr sdk.ConsAddress, infractionHeight, power int64, slashFactor math.LegacyDec, _ types.Infraction) (math.Int, error) { - return k.Slash(ctx, consAddr, infractionHeight, power, slashFactor) +func (k Keeper) SlashWithInfractionReason(ctx context.Context, consAddr sdk.ConsAddress, infractionHeight, power int64, slashFactor math.LegacyDec, _ types.Infraction) (meterResult math.Int, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SlashWithInfractionReason")(&err) + + return k.Slash(sdkCtx, consAddr, infractionHeight, power, slashFactor) } // jail a validator -func (k Keeper) Jail(ctx context.Context, consAddr sdk.ConsAddress) error { - validator := k.mustGetValidatorByConsAddr(ctx, consAddr) - if err := k.jailValidator(ctx, validator); err != nil { +func (k Keeper) Jail(ctx context.Context, consAddr sdk.ConsAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Jail")(&err) + + validator := k.mustGetValidatorByConsAddr(sdkCtx, consAddr) + if err = k.jailValidator(sdkCtx, validator); err != nil { return err } - logger := k.Logger(ctx) + logger := k.Logger(sdkCtx) logger.Info("validator jailed", "validator", consAddr) return nil } // unjail a validator -func (k Keeper) Unjail(ctx context.Context, consAddr sdk.ConsAddress) error { - validator := k.mustGetValidatorByConsAddr(ctx, consAddr) - if err := k.unjailValidator(ctx, validator); err != nil { +func (k Keeper) Unjail(ctx context.Context, consAddr sdk.ConsAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Unjail")(&err) + + validator := k.mustGetValidatorByConsAddr(sdkCtx, consAddr) + if err = k.unjailValidator(sdkCtx, validator); err != nil { return err } - logger := k.Logger(ctx) + logger := k.Logger(sdkCtx) logger.Info("validator un-jailed", "validator", consAddr) return nil } @@ -238,6 +249,7 @@ func (k Keeper) SlashUnbondingDelegation(ctx context.Context, unbondingDelegatio infractionHeight int64, slashFactor math.LegacyDec, ) (totalSlashAmount math.Int, err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SlashUnbondingDelegation")(&err) now := sdkCtx.BlockHeader().Time totalSlashAmount = math.ZeroInt() burnedAmount := math.ZeroInt() @@ -273,12 +285,12 @@ func (k Keeper) SlashUnbondingDelegation(ctx context.Context, unbondingDelegatio burnedAmount = burnedAmount.Add(unbondingSlashAmount) entry.Balance = entry.Balance.Sub(unbondingSlashAmount) unbondingDelegation.Entries[i] = entry - if err = k.SetUnbondingDelegation(ctx, unbondingDelegation); err != nil { + if err = k.SetUnbondingDelegation(sdkCtx, unbondingDelegation); err != nil { return math.ZeroInt(), err } } - if err := k.burnNotBondedTokens(ctx, burnedAmount); err != nil { + if err = k.burnNotBondedTokens(sdkCtx, burnedAmount); err != nil { return math.ZeroInt(), err } @@ -295,6 +307,7 @@ func (k Keeper) SlashRedelegation(ctx context.Context, srcValidator types.Valida infractionHeight int64, slashFactor math.LegacyDec, ) (totalSlashAmount math.Int, err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SlashRedelegation")(&err) now := sdkCtx.BlockHeader().Time totalSlashAmount = math.ZeroInt() bondedBurnedAmount, notBondedBurnedAmount := math.ZeroInt(), math.ZeroInt() @@ -332,7 +345,7 @@ func (k Keeper) SlashRedelegation(ctx context.Context, srcValidator types.Valida } // Handle undelegation after redelegation // Prioritize slashing unbondingDelegation than delegation - unbondingDelegation, err := k.GetUnbondingDelegation(ctx, sdk.MustAccAddressFromBech32(redelegation.DelegatorAddress), validatorDstAddress) + unbondingDelegation, err := k.GetUnbondingDelegation(sdkCtx, sdk.MustAccAddressFromBech32(redelegation.DelegatorAddress), validatorDstAddress) if err == nil { for i, entry := range unbondingDelegation.Entries { // slash with the amount of `slashAmount` if possible, else slash all unbonding token @@ -356,7 +369,7 @@ func (k Keeper) SlashRedelegation(ctx context.Context, srcValidator types.Valida notBondedBurnedAmount = notBondedBurnedAmount.Add(unbondingSlashAmount) entry.Balance = entry.Balance.Sub(unbondingSlashAmount) unbondingDelegation.Entries[i] = entry - if err = k.SetUnbondingDelegation(ctx, unbondingDelegation); err != nil { + if err = k.SetUnbondingDelegation(sdkCtx, unbondingDelegation); err != nil { return math.ZeroInt(), err } } @@ -371,7 +384,7 @@ func (k Keeper) SlashRedelegation(ctx context.Context, srcValidator types.Valida continue } - delegation, err := k.GetDelegation(ctx, delegatorAddress, valDstAddr) + delegation, err := k.GetDelegation(sdkCtx, delegatorAddress, valDstAddr) if err != nil { // If deleted, delegation has zero shares, and we can't unbond any more continue @@ -381,12 +394,12 @@ func (k Keeper) SlashRedelegation(ctx context.Context, srcValidator types.Valida sharesToUnbond = delegation.Shares } - tokensToBurn, err := k.Unbond(ctx, delegatorAddress, valDstAddr, sharesToUnbond) + tokensToBurn, err := k.Unbond(sdkCtx, delegatorAddress, valDstAddr, sharesToUnbond) if err != nil { return math.ZeroInt(), err } - dstValidator, err := k.GetValidator(ctx, valDstAddr) + dstValidator, err := k.GetValidator(sdkCtx, valDstAddr) if err != nil { return math.ZeroInt(), err } @@ -403,11 +416,11 @@ func (k Keeper) SlashRedelegation(ctx context.Context, srcValidator types.Valida } } - if err := k.burnBondedTokens(ctx, bondedBurnedAmount); err != nil { + if err = k.burnBondedTokens(sdkCtx, bondedBurnedAmount); err != nil { return math.ZeroInt(), err } - if err := k.burnNotBondedTokens(ctx, notBondedBurnedAmount); err != nil { + if err = k.burnNotBondedTokens(sdkCtx, notBondedBurnedAmount); err != nil { return math.ZeroInt(), err } diff --git a/x/staking/keeper/unbonding.go b/x/staking/keeper/unbonding.go index 1813797b9761..8fa163746ca1 100644 --- a/x/staking/keeper/unbonding.go +++ b/x/staking/keeper/unbonding.go @@ -12,7 +12,10 @@ import ( // IncrementUnbondingID increments and returns a unique ID for an unbonding operation func (k Keeper) IncrementUnbondingID(ctx context.Context) (unbondingID uint64, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IncrementUnbondingID")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.UnbondingIDKey) if err != nil { return 0, err @@ -36,15 +39,21 @@ func (k Keeper) IncrementUnbondingID(ctx context.Context) (unbondingID uint64, e } // DeleteUnbondingIndex removes a mapping from UnbondingId to unbonding operation -func (k Keeper) DeleteUnbondingIndex(ctx context.Context, id uint64) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteUnbondingIndex(ctx context.Context, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteUnbondingIndex")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.GetUnbondingIndexKey(id)) } // GetUnbondingType returns the enum type of unbonding which is any of // {UnbondingDelegation | Redelegation | ValidatorUnbonding} func (k Keeper) GetUnbondingType(ctx context.Context, id uint64) (unbondingType types.UnbondingType, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetUnbondingType")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.GetUnbondingTypeKey(id)) if err != nil { @@ -60,8 +69,11 @@ func (k Keeper) GetUnbondingType(ctx context.Context, id uint64) (unbondingType // SetUnbondingType sets the enum type of unbonding which is any of // {UnbondingDelegation | Redelegation | ValidatorUnbonding} -func (k Keeper) SetUnbondingType(ctx context.Context, id uint64, unbondingType types.UnbondingType) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetUnbondingType(ctx context.Context, id uint64, unbondingType types.UnbondingType) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetUnbondingType")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) // Convert into bytes for storage bz := make([]byte, 8) @@ -72,7 +84,10 @@ func (k Keeper) SetUnbondingType(ctx context.Context, id uint64, unbondingType t // GetUnbondingDelegationByUnbondingID returns a unbonding delegation that has an unbonding delegation entry with a certain ID func (k Keeper) GetUnbondingDelegationByUnbondingID(ctx context.Context, id uint64) (ubd types.UnbondingDelegation, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetUnbondingDelegationByUnbondingID")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) ubdKey, err := store.Get(types.GetUnbondingIndexKey(id)) if err != nil { @@ -103,7 +118,10 @@ func (k Keeper) GetUnbondingDelegationByUnbondingID(ctx context.Context, id uint // GetRedelegationByUnbondingID returns a unbonding delegation that has an unbonding delegation entry with a certain ID func (k Keeper) GetRedelegationByUnbondingID(ctx context.Context, id uint64) (red types.Redelegation, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetRedelegationByUnbondingID")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) redKey, err := store.Get(types.GetUnbondingIndexKey(id)) if err != nil { @@ -134,7 +152,10 @@ func (k Keeper) GetRedelegationByUnbondingID(ctx context.Context, id uint64) (re // GetValidatorByUnbondingID returns the validator that is unbonding with a certain unbonding op ID func (k Keeper) GetValidatorByUnbondingID(ctx context.Context, id uint64) (val types.Validator, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorByUnbondingID")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) valKey, err := store.Get(types.GetUnbondingIndexKey(id)) if err != nil { @@ -166,8 +187,11 @@ func (k Keeper) GetValidatorByUnbondingID(ctx context.Context, id uint64) (val t // SetUnbondingDelegationByUnbondingID sets an index to look up an UnbondingDelegation // by the unbondingID of an UnbondingDelegationEntry that it contains Note, it does not // set the unbonding delegation itself, use SetUnbondingDelegation(ctx, ubd) for that -func (k Keeper) SetUnbondingDelegationByUnbondingID(ctx context.Context, ubd types.UnbondingDelegation, id uint64) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetUnbondingDelegationByUnbondingID(ctx context.Context, ubd types.UnbondingDelegation, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetUnbondingDelegationByUnbondingID")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) delAddr, err := k.authKeeper.AddressCodec().StringToBytes(ubd.DelegatorAddress) if err != nil { return err @@ -183,13 +207,16 @@ func (k Keeper) SetUnbondingDelegationByUnbondingID(ctx context.Context, ubd typ } // Set unbonding type so that we know how to deserialize it later - return k.SetUnbondingType(ctx, id, types.UnbondingType_UnbondingDelegation) + return k.SetUnbondingType(sdkCtx, id, types.UnbondingType_UnbondingDelegation) } // SetRedelegationByUnbondingID sets an index to look up an Redelegation by the unbondingID of an RedelegationEntry that it contains // Note, it does not set the redelegation itself, use SetRedelegation(ctx, red) for that -func (k Keeper) SetRedelegationByUnbondingID(ctx context.Context, red types.Redelegation, id uint64) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetRedelegationByUnbondingID(ctx context.Context, red types.Redelegation, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetRedelegationByUnbondingID")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) delAddr, err := k.authKeeper.AddressCodec().StringToBytes(red.DelegatorAddress) if err != nil { @@ -212,13 +239,16 @@ func (k Keeper) SetRedelegationByUnbondingID(ctx context.Context, red types.Rede } // Set unbonding type so that we know how to deserialize it later - return k.SetUnbondingType(ctx, id, types.UnbondingType_Redelegation) + return k.SetUnbondingType(sdkCtx, id, types.UnbondingType_Redelegation) } // SetValidatorByUnbondingID sets an index to look up a Validator by the unbondingID corresponding to its current unbonding // Note, it does not set the validator itself, use SetValidator(ctx, val) for that -func (k Keeper) SetValidatorByUnbondingID(ctx context.Context, val types.Validator, id uint64) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetValidatorByUnbondingID(ctx context.Context, val types.Validator, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidatorByUnbondingID")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) valAddr, err := k.validatorAddressCodec.StringToBytes(val.OperatorAddress) if err != nil { @@ -231,7 +261,7 @@ func (k Keeper) SetValidatorByUnbondingID(ctx context.Context, val types.Validat } // Set unbonding type so that we know how to deserialize it later - return k.SetUnbondingType(ctx, id, types.UnbondingType_ValidatorUnbonding) + return k.SetUnbondingType(sdkCtx, id, types.UnbondingType_ValidatorUnbonding) } // unbondingDelegationEntryArrayIndex and redelegationEntryArrayIndex are utilities to find @@ -262,23 +292,26 @@ func redelegationEntryArrayIndex(red types.Redelegation, id uint64) (index int, // unbonding delegation, a redelegation, or a validator unbonding to complete. // In order for the unbonding operation with `id` to eventually complete, every call // to PutUnbondingOnHold(id) must be matched by a call to UnbondingCanComplete(id). -func (k Keeper) UnbondingCanComplete(ctx context.Context, id uint64) error { - unbondingType, err := k.GetUnbondingType(ctx, id) +func (k Keeper) UnbondingCanComplete(ctx context.Context, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UnbondingCanComplete")(&err) + + unbondingType, err := k.GetUnbondingType(sdkCtx, id) if err != nil { return err } switch unbondingType { case types.UnbondingType_UnbondingDelegation: - if err := k.unbondingDelegationEntryCanComplete(ctx, id); err != nil { + if err = k.unbondingDelegationEntryCanComplete(sdkCtx, id); err != nil { return err } case types.UnbondingType_Redelegation: - if err := k.redelegationEntryCanComplete(ctx, id); err != nil { + if err = k.redelegationEntryCanComplete(sdkCtx, id); err != nil { return err } case types.UnbondingType_ValidatorUnbonding: - if err := k.validatorUnbondingCanComplete(ctx, id); err != nil { + if err = k.validatorUnbondingCanComplete(sdkCtx, id); err != nil { return err } default: @@ -288,8 +321,11 @@ func (k Keeper) UnbondingCanComplete(ctx context.Context, id uint64) error { return nil } -func (k Keeper) unbondingDelegationEntryCanComplete(ctx context.Context, id uint64) error { - ubd, err := k.GetUnbondingDelegationByUnbondingID(ctx, id) +func (k Keeper) unbondingDelegationEntryCanComplete(ctx context.Context, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "unbondingDelegationEntryCanComplete")(&err) + + ubd, err := k.GetUnbondingDelegationByUnbondingID(sdkCtx, id) if err != nil { return err } @@ -308,8 +344,6 @@ func (k Keeper) unbondingDelegationEntryCanComplete(ctx context.Context, id uint ) } ubd.Entries[i].UnbondingOnHoldRefCount-- - - sdkCtx := sdk.UnwrapSDKContext(ctx) // Check if entry is matured. if !ubd.Entries[i].OnHold() && ubd.Entries[i].IsMature(sdkCtx.BlockHeader().Time) { // If matured, complete it. @@ -318,7 +352,7 @@ func (k Keeper) unbondingDelegationEntryCanComplete(ctx context.Context, id uint return err } - bondDenom, err := k.BondDenom(ctx) + bondDenom, err := k.BondDenom(sdkCtx) if err != nil { return err } @@ -326,8 +360,8 @@ func (k Keeper) unbondingDelegationEntryCanComplete(ctx context.Context, id uint // track undelegation only when remaining or truncated shares are non-zero if !ubd.Entries[i].Balance.IsZero() { amt := sdk.NewCoin(bondDenom, ubd.Entries[i].Balance) - if err := k.bankKeeper.UndelegateCoinsFromModuleToAccount( - ctx, types.NotBondedPoolName, delegatorAddress, sdk.NewCoins(amt), + if err = k.bankKeeper.UndelegateCoinsFromModuleToAccount( + sdkCtx, types.NotBondedPoolName, delegatorAddress, sdk.NewCoins(amt), ); err != nil { return err } @@ -336,7 +370,7 @@ func (k Keeper) unbondingDelegationEntryCanComplete(ctx context.Context, id uint // Remove entry ubd.RemoveEntry(int64(i)) // Remove from the UnbondingIndex - err = k.DeleteUnbondingIndex(ctx, id) + err = k.DeleteUnbondingIndex(sdkCtx, id) if err != nil { return err } @@ -345,14 +379,17 @@ func (k Keeper) unbondingDelegationEntryCanComplete(ctx context.Context, id uint // set the unbonding delegation or remove it if there are no more entries if len(ubd.Entries) == 0 { - return k.RemoveUnbondingDelegation(ctx, ubd) + return k.RemoveUnbondingDelegation(sdkCtx, ubd) } - return k.SetUnbondingDelegation(ctx, ubd) + return k.SetUnbondingDelegation(sdkCtx, ubd) } -func (k Keeper) redelegationEntryCanComplete(ctx context.Context, id uint64) error { - red, err := k.GetRedelegationByUnbondingID(ctx, id) +func (k Keeper) redelegationEntryCanComplete(ctx context.Context, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "redelegationEntryCanComplete")(&err) + + red, err := k.GetRedelegationByUnbondingID(sdkCtx, id) if err != nil { return err } @@ -371,28 +408,29 @@ func (k Keeper) redelegationEntryCanComplete(ctx context.Context, id uint64) err ) } red.Entries[i].UnbondingOnHoldRefCount-- - - sdkCtx := sdk.UnwrapSDKContext(ctx) if !red.Entries[i].OnHold() && red.Entries[i].IsMature(sdkCtx.BlockHeader().Time) { // If matured, complete it. // Remove entry red.RemoveEntry(int64(i)) // Remove from the Unbonding index - if err = k.DeleteUnbondingIndex(ctx, id); err != nil { + if err = k.DeleteUnbondingIndex(sdkCtx, id); err != nil { return err } } // set the redelegation or remove it if there are no more entries if len(red.Entries) == 0 { - return k.RemoveRedelegation(ctx, red) + return k.RemoveRedelegation(sdkCtx, red) } - return k.SetRedelegation(ctx, red) + return k.SetRedelegation(sdkCtx, red) } -func (k Keeper) validatorUnbondingCanComplete(ctx context.Context, id uint64) error { - val, err := k.GetValidatorByUnbondingID(ctx, id) +func (k Keeper) validatorUnbondingCanComplete(ctx context.Context, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "validatorUnbondingCanComplete")(&err) + + val, err := k.GetValidatorByUnbondingID(sdkCtx, id) if err != nil { return err } @@ -405,29 +443,32 @@ func (k Keeper) validatorUnbondingCanComplete(ctx context.Context, id uint64) er ) } val.UnbondingOnHoldRefCount-- - return k.SetValidator(ctx, val) + return k.SetValidator(sdkCtx, val) } // PutUnbondingOnHold allows an external module to stop an unbonding operation, // such as an unbonding delegation, a redelegation, or a validator unbonding. // In order for the unbonding operation with `id` to eventually complete, every call // to PutUnbondingOnHold(id) must be matched by a call to UnbondingCanComplete(id). -func (k Keeper) PutUnbondingOnHold(ctx context.Context, id uint64) error { - unbondingType, err := k.GetUnbondingType(ctx, id) +func (k Keeper) PutUnbondingOnHold(ctx context.Context, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "PutUnbondingOnHold")(&err) + + unbondingType, err := k.GetUnbondingType(sdkCtx, id) if err != nil { return err } switch unbondingType { case types.UnbondingType_UnbondingDelegation: - if err := k.putUnbondingDelegationEntryOnHold(ctx, id); err != nil { + if err = k.putUnbondingDelegationEntryOnHold(sdkCtx, id); err != nil { return err } case types.UnbondingType_Redelegation: - if err := k.putRedelegationEntryOnHold(ctx, id); err != nil { + if err = k.putRedelegationEntryOnHold(sdkCtx, id); err != nil { return err } case types.UnbondingType_ValidatorUnbonding: - if err := k.putValidatorOnHold(ctx, id); err != nil { + if err = k.putValidatorOnHold(sdkCtx, id); err != nil { return err } default: @@ -437,8 +478,11 @@ func (k Keeper) PutUnbondingOnHold(ctx context.Context, id uint64) error { return nil } -func (k Keeper) putUnbondingDelegationEntryOnHold(ctx context.Context, id uint64) error { - ubd, err := k.GetUnbondingDelegationByUnbondingID(ctx, id) +func (k Keeper) putUnbondingDelegationEntryOnHold(ctx context.Context, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "putUnbondingDelegationEntryOnHold")(&err) + + ubd, err := k.GetUnbondingDelegationByUnbondingID(sdkCtx, id) if err != nil { return err } @@ -449,11 +493,14 @@ func (k Keeper) putUnbondingDelegationEntryOnHold(ctx context.Context, id uint64 } ubd.Entries[i].UnbondingOnHoldRefCount++ - return k.SetUnbondingDelegation(ctx, ubd) + return k.SetUnbondingDelegation(sdkCtx, ubd) } -func (k Keeper) putRedelegationEntryOnHold(ctx context.Context, id uint64) error { - red, err := k.GetRedelegationByUnbondingID(ctx, id) +func (k Keeper) putRedelegationEntryOnHold(ctx context.Context, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "putRedelegationEntryOnHold")(&err) + + red, err := k.GetRedelegationByUnbondingID(sdkCtx, id) if err != nil { return err } @@ -464,15 +511,18 @@ func (k Keeper) putRedelegationEntryOnHold(ctx context.Context, id uint64) error } red.Entries[i].UnbondingOnHoldRefCount++ - return k.SetRedelegation(ctx, red) + return k.SetRedelegation(sdkCtx, red) } -func (k Keeper) putValidatorOnHold(ctx context.Context, id uint64) error { - val, err := k.GetValidatorByUnbondingID(ctx, id) +func (k Keeper) putValidatorOnHold(ctx context.Context, id uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "putValidatorOnHold")(&err) + + val, err := k.GetValidatorByUnbondingID(sdkCtx, id) if err != nil { return err } val.UnbondingOnHoldRefCount++ - return k.SetValidator(ctx, val) + return k.SetValidator(sdkCtx, val) } diff --git a/x/staking/keeper/val_state_change.go b/x/staking/keeper/val_state_change.go index 444633983c36..b648125f5952 100644 --- a/x/staking/keeper/val_state_change.go +++ b/x/staking/keeper/val_state_change.go @@ -18,7 +18,10 @@ import ( // BlockValidatorUpdates calculates the ValidatorUpdates for the current block // Called in each EndBlock -func (k Keeper) BlockValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpdate, error) { +func (k Keeper) BlockValidatorUpdates(ctx context.Context) (meterResult []abci.ValidatorUpdate, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BlockValidatorUpdates")(&err) + // Calculate validator set changes. // // NOTE: ApplyAndReturnValidatorSetUpdates has to come before @@ -28,20 +31,18 @@ func (k Keeper) BlockValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpda // unbonded after the Endblocker (go from Bonded -> Unbonding during // ApplyAndReturnValidatorSetUpdates and then Unbonding -> Unbonded during // UnbondAllMatureValidatorQueue). - validatorUpdates, err := k.ApplyAndReturnValidatorSetUpdates(ctx) + validatorUpdates, err := k.ApplyAndReturnValidatorSetUpdates(sdkCtx) if err != nil { return nil, err } // unbond all mature validators from the unbonding queue - err = k.UnbondAllMatureValidators(ctx) + err = k.UnbondAllMatureValidators(sdkCtx) if err != nil { return nil, err } - - sdkCtx := sdk.UnwrapSDKContext(ctx) // Remove all mature unbonding delegations from the ubd queue. - matureUnbonds, err := k.DequeueAllMatureUBDQueue(ctx, sdkCtx.BlockHeader().Time) + matureUnbonds, err := k.DequeueAllMatureUBDQueue(sdkCtx, sdkCtx.BlockHeader().Time) if err != nil { return nil, err } @@ -56,7 +57,7 @@ func (k Keeper) BlockValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpda return nil, err } - balances, err := k.CompleteUnbonding(ctx, delegatorAddress, addr) + balances, err := k.CompleteUnbonding(sdkCtx, delegatorAddress, addr) if err != nil { continue } @@ -72,7 +73,7 @@ func (k Keeper) BlockValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpda } // Remove all mature redelegations from the red queue. - matureRedelegations, err := k.DequeueAllMatureRedelegationQueue(ctx, sdkCtx.BlockHeader().Time) + matureRedelegations, err := k.DequeueAllMatureRedelegationQueue(sdkCtx, sdkCtx.BlockHeader().Time) if err != nil { return nil, err } @@ -92,7 +93,7 @@ func (k Keeper) BlockValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpda } balances, err := k.CompleteRedelegation( - ctx, + sdkCtx, delegatorAddress, valSrcAddr, valDstAddr, @@ -128,25 +129,28 @@ func (k Keeper) BlockValidatorUpdates(ctx context.Context) ([]abci.ValidatorUpda // at the previous block height or were removed from the validator set entirely // are returned to CometBFT. func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx context.Context) (updates []abci.ValidatorUpdate, err error) { - params, err := k.GetParams(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ApplyAndReturnValidatorSetUpdates")(&err) + + params, err := k.GetParams(sdkCtx) if err != nil { return nil, err } maxValidators := params.MaxValidators - powerReduction := k.PowerReduction(ctx) + powerReduction := k.PowerReduction(sdkCtx) totalPower := math.ZeroInt() amtFromBondedToNotBonded, amtFromNotBondedToBonded := math.ZeroInt(), math.ZeroInt() // Retrieve the last validator set. // The persistent set is updated later in this function. // (see LastValidatorPowerKey). - last, err := k.getLastValidatorsByAddr(ctx) + last, err := k.getLastValidatorsByAddr(sdkCtx) if err != nil { return nil, err } // Iterate over validators, highest power to lowest. - iterator, err := k.ValidatorsPowerStoreIterator(ctx) + iterator, err := k.ValidatorsPowerStoreIterator(sdkCtx) if err != nil { return nil, err } @@ -156,7 +160,7 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx context.Context) (updates // everything that is iterated in this loop is becoming or already a // part of the bonded validator set valAddr := sdk.ValAddress(iterator.Value()) - validator := k.mustGetValidator(ctx, valAddr) + validator := k.mustGetValidator(sdkCtx, valAddr) if validator.Jailed { panic("should never retrieve a jailed validator from the power store") @@ -164,20 +168,20 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx context.Context) (updates // if we get to a zero-power validator (which we don't bond), // there are no more possible bonded validators - if validator.PotentialConsensusPower(k.PowerReduction(ctx)) == 0 { + if validator.PotentialConsensusPower(k.PowerReduction(sdkCtx)) == 0 { break } // apply the appropriate state change if necessary switch { case validator.IsUnbonded(): - validator, err = k.unbondedToBonded(ctx, validator) + validator, err = k.unbondedToBonded(sdkCtx, validator) if err != nil { return } amtFromNotBondedToBonded = amtFromNotBondedToBonded.Add(validator.GetTokens()) case validator.IsUnbonding(): - validator, err = k.unbondingToBonded(ctx, validator) + validator, err = k.unbondingToBonded(sdkCtx, validator) if err != nil { return } @@ -201,7 +205,7 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx context.Context) (updates if !found || !bytes.Equal(oldPowerBytes, newPowerBytes) { updates = append(updates, validator.ABCIValidatorUpdate(powerReduction)) - if err = k.SetLastValidatorPower(ctx, valAddr, newPower); err != nil { + if err = k.SetLastValidatorPower(sdkCtx, valAddr, newPower); err != nil { return nil, err } } @@ -218,8 +222,8 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx context.Context) (updates } for _, valAddrBytes := range noLongerBonded { - validator := k.mustGetValidator(ctx, sdk.ValAddress(valAddrBytes)) - validator, err = k.bondedToUnbonding(ctx, validator) + validator := k.mustGetValidator(sdkCtx, sdk.ValAddress(valAddrBytes)) + validator, err = k.bondedToUnbonding(sdkCtx, validator) if err != nil { return nil, err } @@ -228,7 +232,7 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx context.Context) (updates return nil, err } amtFromBondedToNotBonded = amtFromBondedToNotBonded.Add(validator.GetTokens()) - if err = k.DeleteLastValidatorPower(ctx, str); err != nil { + if err = k.DeleteLastValidatorPower(sdkCtx, str); err != nil { return nil, err } @@ -244,11 +248,11 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx context.Context) (updates // Compare and subtract the respective amounts to only perform one transfer. // This is done in order to avoid doing multiple updates inside each iterator/loop. case amtFromNotBondedToBonded.GT(amtFromBondedToNotBonded): - if err = k.notBondedTokensToBonded(ctx, amtFromNotBondedToBonded.Sub(amtFromBondedToNotBonded)); err != nil { + if err = k.notBondedTokensToBonded(sdkCtx, amtFromNotBondedToBonded.Sub(amtFromBondedToNotBonded)); err != nil { return nil, err } case amtFromNotBondedToBonded.LT(amtFromBondedToNotBonded): - if err = k.bondedTokensToNotBonded(ctx, amtFromBondedToNotBonded.Sub(amtFromNotBondedToBonded)); err != nil { + if err = k.bondedTokensToNotBonded(sdkCtx, amtFromBondedToNotBonded.Sub(amtFromNotBondedToBonded)); err != nil { return nil, err } default: // equal amounts of tokens; no update required @@ -256,13 +260,13 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx context.Context) (updates // set total power on lookup index if there are any updates if len(updates) > 0 { - if err = k.SetLastTotalPower(ctx, totalPower); err != nil { + if err = k.SetLastTotalPower(sdkCtx, totalPower); err != nil { return nil, err } } // set the list of validator updates - if err = k.SetValidatorUpdates(ctx, updates); err != nil { + if err = k.SetValidatorUpdates(sdkCtx, updates); err != nil { return nil, err } @@ -271,87 +275,108 @@ func (k Keeper) ApplyAndReturnValidatorSetUpdates(ctx context.Context) (updates // Validator state transitions -func (k Keeper) bondedToUnbonding(ctx context.Context, validator types.Validator) (types.Validator, error) { +func (k Keeper) bondedToUnbonding(ctx context.Context, validator types.Validator) (meterResult types.Validator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "bondedToUnbonding")(&err) + if !validator.IsBonded() { panic(fmt.Sprintf("bad state transition bondedToUnbonding, validator: %v\n", validator)) } - return k.BeginUnbondingValidator(ctx, validator) + return k.BeginUnbondingValidator(sdkCtx, validator) } -func (k Keeper) unbondingToBonded(ctx context.Context, validator types.Validator) (types.Validator, error) { +func (k Keeper) unbondingToBonded(ctx context.Context, validator types.Validator) (meterResult types.Validator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "unbondingToBonded")(&err) + if !validator.IsUnbonding() { panic(fmt.Sprintf("bad state transition unbondingToBonded, validator: %v\n", validator)) } - return k.bondValidator(ctx, validator) + return k.bondValidator(sdkCtx, validator) } -func (k Keeper) unbondedToBonded(ctx context.Context, validator types.Validator) (types.Validator, error) { +func (k Keeper) unbondedToBonded(ctx context.Context, validator types.Validator) (meterResult types.Validator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "unbondedToBonded")(&err) + if !validator.IsUnbonded() { panic(fmt.Sprintf("bad state transition unbondedToBonded, validator: %v\n", validator)) } - return k.bondValidator(ctx, validator) + return k.bondValidator(sdkCtx, validator) } // UnbondingToUnbonded switches a validator from unbonding state to unbonded state -func (k Keeper) UnbondingToUnbonded(ctx context.Context, validator types.Validator) (types.Validator, error) { +func (k Keeper) UnbondingToUnbonded(ctx context.Context, validator types.Validator) (meterResult types.Validator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UnbondingToUnbonded")(&err) + if !validator.IsUnbonding() { return types.Validator{}, fmt.Errorf("bad state transition unbondingToUnbonded, validator: %v", validator) } - return k.completeUnbondingValidator(ctx, validator) + return k.completeUnbondingValidator(sdkCtx, validator) } // send a validator to jail -func (k Keeper) jailValidator(ctx context.Context, validator types.Validator) error { +func (k Keeper) jailValidator(ctx context.Context, validator types.Validator) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "jailValidator")(&err) + if validator.Jailed { return types.ErrValidatorJailed.Wrapf("cannot jail already jailed validator, validator: %v", validator) } validator.Jailed = true - if err := k.SetValidator(ctx, validator); err != nil { + if err = k.SetValidator(sdkCtx, validator); err != nil { return err } - return k.DeleteValidatorByPowerIndex(ctx, validator) + return k.DeleteValidatorByPowerIndex(sdkCtx, validator) } // remove a validator from jail -func (k Keeper) unjailValidator(ctx context.Context, validator types.Validator) error { +func (k Keeper) unjailValidator(ctx context.Context, validator types.Validator) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "unjailValidator")(&err) + if !validator.Jailed { return fmt.Errorf("cannot unjail already unjailed validator, validator: %v", validator) } validator.Jailed = false - if err := k.SetValidator(ctx, validator); err != nil { + if err = k.SetValidator(sdkCtx, validator); err != nil { return err } - return k.SetValidatorByPowerIndex(ctx, validator) + return k.SetValidatorByPowerIndex(sdkCtx, validator) } // perform all the store operations for when a validator status becomes bonded -func (k Keeper) bondValidator(ctx context.Context, validator types.Validator) (types.Validator, error) { +func (k Keeper) bondValidator(ctx context.Context, validator types.Validator) (meterResult types.Validator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "bondValidator")(&err) + // delete the validator by power index, as the key will change - if err := k.DeleteValidatorByPowerIndex(ctx, validator); err != nil { + if err = k.DeleteValidatorByPowerIndex(sdkCtx, validator); err != nil { return validator, err } validator = validator.UpdateStatus(types.Bonded) // save the now bonded validator record to the two referenced stores - if err := k.SetValidator(ctx, validator); err != nil { + if err = k.SetValidator(sdkCtx, validator); err != nil { return validator, err } - if err := k.SetValidatorByPowerIndex(ctx, validator); err != nil { + if err = k.SetValidatorByPowerIndex(sdkCtx, validator); err != nil { return validator, err } // delete from queue if present - if err := k.DeleteValidatorQueue(ctx, validator); err != nil { + if err = k.DeleteValidatorQueue(sdkCtx, validator); err != nil { return validator, err } @@ -366,7 +391,7 @@ func (k Keeper) bondValidator(ctx context.Context, validator types.Validator) (t return validator, err } - if err := k.Hooks().AfterValidatorBonded(ctx, consAddr, str); err != nil { + if err = k.Hooks().AfterValidatorBonded(sdkCtx, consAddr, str); err != nil { return validator, err } @@ -374,14 +399,17 @@ func (k Keeper) bondValidator(ctx context.Context, validator types.Validator) (t } // BeginUnbondingValidator performs all the store operations for when a validator begins unbonding -func (k Keeper) BeginUnbondingValidator(ctx context.Context, validator types.Validator) (types.Validator, error) { - params, err := k.GetParams(ctx) +func (k Keeper) BeginUnbondingValidator(ctx context.Context, validator types.Validator) (meterResult types.Validator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "BeginUnbondingValidator")(&err) + + params, err := k.GetParams(sdkCtx) if err != nil { return validator, err } // delete the validator by power index, as the key will change - if err = k.DeleteValidatorByPowerIndex(ctx, validator); err != nil { + if err = k.DeleteValidatorByPowerIndex(sdkCtx, validator); err != nil { return validator, err } @@ -390,14 +418,12 @@ func (k Keeper) BeginUnbondingValidator(ctx context.Context, validator types.Val panic(fmt.Sprintf("should not already be unbonded or unbonding, validator: %v\n", validator)) } - id, err := k.IncrementUnbondingID(ctx) + id, err := k.IncrementUnbondingID(sdkCtx) if err != nil { return validator, err } validator = validator.UpdateStatus(types.Unbonding) - - sdkCtx := sdk.UnwrapSDKContext(ctx) // set the unbonding completion time and completion height appropriately validator.UnbondingTime = sdkCtx.BlockHeader().Time.Add(params.UnbondingTime) validator.UnbondingHeight = sdkCtx.BlockHeader().Height @@ -405,16 +431,16 @@ func (k Keeper) BeginUnbondingValidator(ctx context.Context, validator types.Val validator.UnbondingIds = append(validator.UnbondingIds, id) // save the now unbonded validator record and power index - if err = k.SetValidator(ctx, validator); err != nil { + if err = k.SetValidator(sdkCtx, validator); err != nil { return validator, err } - if err = k.SetValidatorByPowerIndex(ctx, validator); err != nil { + if err = k.SetValidatorByPowerIndex(sdkCtx, validator); err != nil { return validator, err } // Adds to unbonding validator queue - if err = k.InsertUnbondingValidatorQueue(ctx, validator); err != nil { + if err = k.InsertUnbondingValidatorQueue(sdkCtx, validator); err != nil { return validator, err } @@ -429,15 +455,15 @@ func (k Keeper) BeginUnbondingValidator(ctx context.Context, validator types.Val return validator, err } - if err := k.Hooks().AfterValidatorBeginUnbonding(ctx, consAddr, str); err != nil { + if err = k.Hooks().AfterValidatorBeginUnbonding(sdkCtx, consAddr, str); err != nil { return validator, err } - if err := k.SetValidatorByUnbondingID(ctx, validator, id); err != nil { + if err = k.SetValidatorByUnbondingID(sdkCtx, validator, id); err != nil { return validator, err } - if err := k.Hooks().AfterUnbondingInitiated(ctx, id); err != nil { + if err = k.Hooks().AfterUnbondingInitiated(sdkCtx, id); err != nil { return validator, err } @@ -445,9 +471,12 @@ func (k Keeper) BeginUnbondingValidator(ctx context.Context, validator types.Val } // perform all the store operations for when a validator status becomes unbonded -func (k Keeper) completeUnbondingValidator(ctx context.Context, validator types.Validator) (types.Validator, error) { +func (k Keeper) completeUnbondingValidator(ctx context.Context, validator types.Validator) (meterResult types.Validator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "completeUnbondingValidator")(&err) + validator = validator.UpdateStatus(types.Unbonded) - if err := k.SetValidator(ctx, validator); err != nil { + if err = k.SetValidator(sdkCtx, validator); err != nil { return validator, err } @@ -459,10 +488,13 @@ func (k Keeper) completeUnbondingValidator(ctx context.Context, validator types. type validatorsByAddr map[string][]byte // get the last validator set -func (k Keeper) getLastValidatorsByAddr(ctx context.Context) (validatorsByAddr, error) { +func (k Keeper) getLastValidatorsByAddr(ctx context.Context) (meterResult validatorsByAddr, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getLastValidatorsByAddr")(&err) + last := make(validatorsByAddr) - iterator, err := k.LastValidatorsIterator(ctx) + iterator, err := k.LastValidatorsIterator(sdkCtx) if err != nil { return nil, err } diff --git a/x/staking/keeper/validator.go b/x/staking/keeper/validator.go index aeb2102d43bd..532ed4dd1dd5 100644 --- a/x/staking/keeper/validator.go +++ b/x/staking/keeper/validator.go @@ -21,7 +21,10 @@ import ( // GetValidator gets a single validator func (k Keeper) GetValidator(ctx context.Context, addr sdk.ValAddress) (validator types.Validator, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidator")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) value, err := store.Get(types.GetValidatorKey(addr)) if err != nil { return validator, err @@ -35,7 +38,11 @@ func (k Keeper) GetValidator(ctx context.Context, addr sdk.ValAddress) (validato } func (k Keeper) mustGetValidator(ctx context.Context, addr sdk.ValAddress) types.Validator { - validator, err := k.GetValidator(ctx, addr) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "mustGetValidator")(&err) + + validator, err := k.GetValidator(sdkCtx, addr) if err != nil { panic(fmt.Sprintf("validator record not found for address: %X\n", addr)) } @@ -45,7 +52,10 @@ func (k Keeper) mustGetValidator(ctx context.Context, addr sdk.ValAddress) types // GetValidatorByConsAddr gets a single validator by consensus address func (k Keeper) GetValidatorByConsAddr(ctx context.Context, consAddr sdk.ConsAddress) (validator types.Validator, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidatorByConsAddr")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) opAddr, err := store.Get(types.GetValidatorByConsAddrKey(consAddr)) if err != nil { return validator, err @@ -55,11 +65,15 @@ func (k Keeper) GetValidatorByConsAddr(ctx context.Context, consAddr sdk.ConsAdd return validator, types.ErrNoValidatorFound } - return k.GetValidator(ctx, opAddr) + return k.GetValidator(sdkCtx, opAddr) } func (k Keeper) mustGetValidatorByConsAddr(ctx context.Context, consAddr sdk.ConsAddress) types.Validator { - validator, err := k.GetValidatorByConsAddr(ctx, consAddr) + var err error + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "mustGetValidatorByConsAddr")(&err) + + validator, err := k.GetValidatorByConsAddr(sdkCtx, consAddr) if err != nil { panic(fmt.Errorf("validator with consensus-Address %s not found", consAddr)) } @@ -68,8 +82,11 @@ func (k Keeper) mustGetValidatorByConsAddr(ctx context.Context, consAddr sdk.Con } // SetValidator sets the main record holding validator details -func (k Keeper) SetValidator(ctx context.Context, validator types.Validator) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetValidator(ctx context.Context, validator types.Validator) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidator")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz := types.MustMarshalValidator(k.cdc, &validator) str, err := k.ValidatorAddressCodec().StringToBytes(validator.GetOperator()) if err != nil { @@ -79,12 +96,15 @@ func (k Keeper) SetValidator(ctx context.Context, validator types.Validator) err } // SetValidatorByConsAddr sets a validator by conesensus address -func (k Keeper) SetValidatorByConsAddr(ctx context.Context, validator types.Validator) error { +func (k Keeper) SetValidatorByConsAddr(ctx context.Context, validator types.Validator) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidatorByConsAddr")(&err) + consPk, err := validator.GetConsAddr() if err != nil { return err } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.validatorAddressCodec.StringToBytes(validator.GetOperator()) if err != nil { @@ -95,52 +115,64 @@ func (k Keeper) SetValidatorByConsAddr(ctx context.Context, validator types.Vali } // SetValidatorByPowerIndex sets a validator by power index -func (k Keeper) SetValidatorByPowerIndex(ctx context.Context, validator types.Validator) error { +func (k Keeper) SetValidatorByPowerIndex(ctx context.Context, validator types.Validator) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetValidatorByPowerIndex")(&err) + // jailed validators are not kept in the power index if validator.Jailed { return nil } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) str, err := k.validatorAddressCodec.StringToBytes(validator.GetOperator()) if err != nil { return err } - return store.Set(types.GetValidatorsByPowerIndexKey(validator, k.PowerReduction(ctx), k.validatorAddressCodec), str) + return store.Set(types.GetValidatorsByPowerIndexKey(validator, k.PowerReduction(sdkCtx), k.validatorAddressCodec), str) } // DeleteValidatorByPowerIndex deletes a record by power index -func (k Keeper) DeleteValidatorByPowerIndex(ctx context.Context, validator types.Validator) error { - store := k.storeService.OpenKVStore(ctx) - return store.Delete(types.GetValidatorsByPowerIndexKey(validator, k.PowerReduction(ctx), k.validatorAddressCodec)) +func (k Keeper) DeleteValidatorByPowerIndex(ctx context.Context, validator types.Validator) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteValidatorByPowerIndex")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) + return store.Delete(types.GetValidatorsByPowerIndexKey(validator, k.PowerReduction(sdkCtx), k.validatorAddressCodec)) } // SetNewValidatorByPowerIndex adds new entry by power index -func (k Keeper) SetNewValidatorByPowerIndex(ctx context.Context, validator types.Validator) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetNewValidatorByPowerIndex(ctx context.Context, validator types.Validator) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetNewValidatorByPowerIndex")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) str, err := k.validatorAddressCodec.StringToBytes(validator.GetOperator()) if err != nil { return err } - return store.Set(types.GetValidatorsByPowerIndexKey(validator, k.PowerReduction(ctx), k.validatorAddressCodec), str) + return store.Set(types.GetValidatorsByPowerIndexKey(validator, k.PowerReduction(sdkCtx), k.validatorAddressCodec), str) } // AddValidatorTokensAndShares updates the tokens of an existing validator, updates the validators power index key func (k Keeper) AddValidatorTokensAndShares(ctx context.Context, validator types.Validator, tokensToAdd math.Int, ) (valOut types.Validator, addedShares math.LegacyDec, err error) { - err = k.DeleteValidatorByPowerIndex(ctx, validator) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "AddValidatorTokensAndShares")(&err) + + err = k.DeleteValidatorByPowerIndex(sdkCtx, validator) if err != nil { return valOut, addedShares, err } validator, addedShares = validator.AddTokensFromDel(tokensToAdd) - err = k.SetValidator(ctx, validator) + err = k.SetValidator(sdkCtx, validator) if err != nil { return validator, addedShares, err } - err = k.SetValidatorByPowerIndex(ctx, validator) + err = k.SetValidatorByPowerIndex(sdkCtx, validator) return validator, addedShares, err } @@ -148,34 +180,40 @@ func (k Keeper) AddValidatorTokensAndShares(ctx context.Context, validator types func (k Keeper) RemoveValidatorTokensAndShares(ctx context.Context, validator types.Validator, sharesToRemove math.LegacyDec, ) (valOut types.Validator, removedTokens math.Int, err error) { - err = k.DeleteValidatorByPowerIndex(ctx, validator) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "RemoveValidatorTokensAndShares")(&err) + + err = k.DeleteValidatorByPowerIndex(sdkCtx, validator) if err != nil { return valOut, removedTokens, err } validator, removedTokens = validator.RemoveDelShares(sharesToRemove) - err = k.SetValidator(ctx, validator) + err = k.SetValidator(sdkCtx, validator) if err != nil { return validator, removedTokens, err } - err = k.SetValidatorByPowerIndex(ctx, validator) + err = k.SetValidatorByPowerIndex(sdkCtx, validator) return validator, removedTokens, err } // RemoveValidatorTokens updates the tokens of an existing validator, updates the validators power index key func (k Keeper) RemoveValidatorTokens(ctx context.Context, validator types.Validator, tokensToRemove math.Int, -) (types.Validator, error) { - if err := k.DeleteValidatorByPowerIndex(ctx, validator); err != nil { +) (meterResult types.Validator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "RemoveValidatorTokens")(&err) + + if err = k.DeleteValidatorByPowerIndex(sdkCtx, validator); err != nil { return validator, err } validator = validator.RemoveTokens(tokensToRemove) - if err := k.SetValidator(ctx, validator); err != nil { + if err = k.SetValidator(sdkCtx, validator); err != nil { return validator, err } - if err := k.SetValidatorByPowerIndex(ctx, validator); err != nil { + if err = k.SetValidatorByPowerIndex(sdkCtx, validator); err != nil { return validator, err } @@ -186,16 +224,18 @@ func (k Keeper) RemoveValidatorTokens(ctx context.Context, // An error is returned if the new commission rate is invalid. func (k Keeper) UpdateValidatorCommission(ctx context.Context, validator types.Validator, newRate math.LegacyDec, -) (types.Commission, error) { - commission := validator.Commission +) (meterResult types.Commission, err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UpdateValidatorCommission")(&err) + + commission := validator.Commission blockTime := sdkCtx.BlockHeader().Time - if err := commission.ValidateNewRate(newRate, blockTime); err != nil { + if err = commission.ValidateNewRate(newRate, blockTime); err != nil { return commission, err } - minCommissionRate, err := k.MinCommissionRate(ctx) + minCommissionRate, err := k.MinCommissionRate(sdkCtx) if err != nil { return commission, err } @@ -212,9 +252,12 @@ func (k Keeper) UpdateValidatorCommission(ctx context.Context, // RemoveValidator removes the validator record and associated indexes // except for the bonded validator index which is only handled in ApplyAndReturnTendermintUpdates -func (k Keeper) RemoveValidator(ctx context.Context, address sdk.ValAddress) error { +func (k Keeper) RemoveValidator(ctx context.Context, address sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "RemoveValidator")(&err) + // first retrieve the old validator record - validator, err := k.GetValidator(ctx, address) + validator, err := k.GetValidator(sdkCtx, address) if errors.Is(err, types.ErrNoValidatorFound) { return nil } @@ -233,7 +276,7 @@ func (k Keeper) RemoveValidator(ctx context.Context, address sdk.ValAddress) err } // delete the old validator record - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) if err = store.Delete(types.GetValidatorKey(address)); err != nil { return err } @@ -242,7 +285,7 @@ func (k Keeper) RemoveValidator(ctx context.Context, address sdk.ValAddress) err return err } - if err = store.Delete(types.GetValidatorsByPowerIndexKey(validator, k.PowerReduction(ctx), k.validatorAddressCodec)); err != nil { + if err = store.Delete(types.GetValidatorsByPowerIndexKey(validator, k.PowerReduction(sdkCtx), k.validatorAddressCodec)); err != nil { return err } @@ -251,8 +294,8 @@ func (k Keeper) RemoveValidator(ctx context.Context, address sdk.ValAddress) err return err } - if err := k.Hooks().AfterValidatorRemoved(ctx, valConsAddr, str); err != nil { - k.Logger(ctx).Error("error in after validator removed hook", "error", err) + if err = k.Hooks().AfterValidatorRemoved(sdkCtx, valConsAddr, str); err != nil { + k.Logger(sdkCtx).Error("error in after validator removed hook", "error", err) } return nil @@ -262,7 +305,10 @@ func (k Keeper) RemoveValidator(ctx context.Context, address sdk.ValAddress) err // GetAllValidators gets the set of all validators with no limits, used during genesis dump func (k Keeper) GetAllValidators(ctx context.Context) (validators []types.Validator, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetAllValidators")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) iterator, err := store.Iterator(types.ValidatorsKey, storetypes.PrefixEndBytes(types.ValidatorsKey)) if err != nil { @@ -283,7 +329,10 @@ func (k Keeper) GetAllValidators(ctx context.Context) (validators []types.Valida // GetValidators returns a given amount of all the validators func (k Keeper) GetValidators(ctx context.Context, maxRetrieve uint32) (validators []types.Validator, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetValidators")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) validators = make([]types.Validator, maxRetrieve) iterator, err := store.Iterator(types.ValidatorsKey, storetypes.PrefixEndBytes(types.ValidatorsKey)) @@ -305,14 +354,17 @@ func (k Keeper) GetValidators(ctx context.Context, maxRetrieve uint32) (validato } // GetBondedValidatorsByPower gets the current group of bonded validators sorted by power-rank -func (k Keeper) GetBondedValidatorsByPower(ctx context.Context) ([]types.Validator, error) { - maxValidators, err := k.MaxValidators(ctx) +func (k Keeper) GetBondedValidatorsByPower(ctx context.Context) (meterResult []types.Validator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetBondedValidatorsByPower")(&err) + + maxValidators, err := k.MaxValidators(sdkCtx) if err != nil { return nil, err } validators := make([]types.Validator, maxValidators) - iterator, err := k.ValidatorsPowerStoreIterator(ctx) + iterator, err := k.ValidatorsPowerStoreIterator(sdkCtx) if err != nil { return nil, err } @@ -321,7 +373,7 @@ func (k Keeper) GetBondedValidatorsByPower(ctx context.Context) ([]types.Validat i := 0 for ; iterator.Valid() && i < int(maxValidators); iterator.Next() { address := iterator.Value() - validator := k.mustGetValidator(ctx, address) + validator := k.mustGetValidator(sdkCtx, address) if validator.IsBonded() { validators[i] = validator @@ -333,8 +385,11 @@ func (k Keeper) GetBondedValidatorsByPower(ctx context.Context) ([]types.Validat } // ValidatorsPowerStoreIterator returns an iterator for the current validator power store -func (k Keeper) ValidatorsPowerStoreIterator(ctx context.Context) (corestore.Iterator, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) ValidatorsPowerStoreIterator(ctx context.Context) (meterResult corestore.Iterator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ValidatorsPowerStoreIterator")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.ReverseIterator(types.ValidatorsByPowerIndexKey, storetypes.PrefixEndBytes(types.ValidatorsByPowerIndexKey)) } @@ -343,7 +398,10 @@ func (k Keeper) ValidatorsPowerStoreIterator(ctx context.Context) (corestore.Ite // GetLastValidatorPower loads the last validator power. // Returns zero if the operator was not a validator last block. func (k Keeper) GetLastValidatorPower(ctx context.Context, operator sdk.ValAddress) (power int64, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetLastValidatorPower")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.GetLastValidatorPowerKey(operator)) if err != nil { return 0, err @@ -363,8 +421,11 @@ func (k Keeper) GetLastValidatorPower(ctx context.Context, operator sdk.ValAddre } // SetLastValidatorPower sets the last validator power. -func (k Keeper) SetLastValidatorPower(ctx context.Context, operator sdk.ValAddress, power int64) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetLastValidatorPower(ctx context.Context, operator sdk.ValAddress, power int64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetLastValidatorPower")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.cdc.Marshal(&gogotypes.Int64Value{Value: power}) if err != nil { return err @@ -373,20 +434,29 @@ func (k Keeper) SetLastValidatorPower(ctx context.Context, operator sdk.ValAddre } // DeleteLastValidatorPower deletes the last validator power. -func (k Keeper) DeleteLastValidatorPower(ctx context.Context, operator sdk.ValAddress) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteLastValidatorPower(ctx context.Context, operator sdk.ValAddress) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteLastValidatorPower")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.GetLastValidatorPowerKey(operator)) } // lastValidatorsIterator returns an iterator for the consensus validators in the last block -func (k Keeper) LastValidatorsIterator(ctx context.Context) (corestore.Iterator, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) LastValidatorsIterator(ctx context.Context) (meterResult corestore.Iterator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "LastValidatorsIterator")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Iterator(types.LastValidatorPowerKey, storetypes.PrefixEndBytes(types.LastValidatorPowerKey)) } // IterateLastValidatorPowers iterates over last validator powers. -func (k Keeper) IterateLastValidatorPowers(ctx context.Context, handler func(operator sdk.ValAddress, power int64) (stop bool)) error { - iter, err := k.LastValidatorsIterator(ctx) +func (k Keeper) IterateLastValidatorPowers(ctx context.Context, handler func(operator sdk.ValAddress, power int64) (stop bool)) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IterateLastValidatorPowers")(&err) + + iter, err := k.LastValidatorsIterator(sdkCtx) if err != nil { return err } @@ -409,10 +479,13 @@ func (k Keeper) IterateLastValidatorPowers(ctx context.Context, handler func(ope // GetLastValidators gets the group of the bonded validators func (k Keeper) GetLastValidators(ctx context.Context) (validators []types.Validator, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetLastValidators")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) // add the actual validator power sorted store - maxValidators, err := k.MaxValidators(ctx) + maxValidators, err := k.MaxValidators(sdkCtx) if err != nil { return nil, err } @@ -432,7 +505,7 @@ func (k Keeper) GetLastValidators(ctx context.Context) (validators []types.Valid } address := types.AddressFromLastValidatorPowerKey(iterator.Key()) - validator, err := k.GetValidator(ctx, address) + validator, err := k.GetValidator(sdkCtx, address) if err != nil { return nil, err } @@ -446,8 +519,11 @@ func (k Keeper) GetLastValidators(ctx context.Context) (validators []types.Valid // GetUnbondingValidators returns a slice of mature validator addresses that // complete their unbonding at a given time and height. -func (k Keeper) GetUnbondingValidators(ctx context.Context, endTime time.Time, endHeight int64) ([]string, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetUnbondingValidators(ctx context.Context, endTime time.Time, endHeight int64) (meterResult []string, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetUnbondingValidators")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.GetValidatorQueueKey(endTime, endHeight)) if err != nil { @@ -468,8 +544,11 @@ func (k Keeper) GetUnbondingValidators(ctx context.Context, endTime time.Time, e // SetUnbondingValidatorsQueue sets a given slice of validator addresses into // the unbonding validator queue by a given height and time. -func (k Keeper) SetUnbondingValidatorsQueue(ctx context.Context, endTime time.Time, endHeight int64, addrs []string) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetUnbondingValidatorsQueue(ctx context.Context, endTime time.Time, endHeight int64, addrs []string) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetUnbondingValidatorsQueue")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := k.cdc.Marshal(&types.ValAddresses{Addresses: addrs}) if err != nil { return err @@ -479,26 +558,35 @@ func (k Keeper) SetUnbondingValidatorsQueue(ctx context.Context, endTime time.Ti // InsertUnbondingValidatorQueue inserts a given unbonding validator address into // the unbonding validator queue for a given height and time. -func (k Keeper) InsertUnbondingValidatorQueue(ctx context.Context, val types.Validator) error { - addrs, err := k.GetUnbondingValidators(ctx, val.UnbondingTime, val.UnbondingHeight) +func (k Keeper) InsertUnbondingValidatorQueue(ctx context.Context, val types.Validator) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "InsertUnbondingValidatorQueue")(&err) + + addrs, err := k.GetUnbondingValidators(sdkCtx, val.UnbondingTime, val.UnbondingHeight) if err != nil { return err } addrs = append(addrs, val.OperatorAddress) - return k.SetUnbondingValidatorsQueue(ctx, val.UnbondingTime, val.UnbondingHeight, addrs) + return k.SetUnbondingValidatorsQueue(sdkCtx, val.UnbondingTime, val.UnbondingHeight, addrs) } // DeleteValidatorQueueTimeSlice deletes all entries in the queue indexed by a // given height and time. -func (k Keeper) DeleteValidatorQueueTimeSlice(ctx context.Context, endTime time.Time, endHeight int64) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) DeleteValidatorQueueTimeSlice(ctx context.Context, endTime time.Time, endHeight int64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteValidatorQueueTimeSlice")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.GetValidatorQueueKey(endTime, endHeight)) } // DeleteValidatorQueue removes a validator by address from the unbonding queue // indexed by a given height and time. -func (k Keeper) DeleteValidatorQueue(ctx context.Context, val types.Validator) error { - addrs, err := k.GetUnbondingValidators(ctx, val.UnbondingTime, val.UnbondingHeight) +func (k Keeper) DeleteValidatorQueue(ctx context.Context, val types.Validator) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "DeleteValidatorQueue")(&err) + + addrs, err := k.GetUnbondingValidators(sdkCtx, val.UnbondingTime, val.UnbondingHeight) if err != nil { return err } @@ -523,23 +611,27 @@ func (k Keeper) DeleteValidatorQueue(ctx context.Context, val types.Validator) e } if len(newAddrs) == 0 { - return k.DeleteValidatorQueueTimeSlice(ctx, val.UnbondingTime, val.UnbondingHeight) + return k.DeleteValidatorQueueTimeSlice(sdkCtx, val.UnbondingTime, val.UnbondingHeight) } - return k.SetUnbondingValidatorsQueue(ctx, val.UnbondingTime, val.UnbondingHeight, newAddrs) + return k.SetUnbondingValidatorsQueue(sdkCtx, val.UnbondingTime, val.UnbondingHeight, newAddrs) } // ValidatorQueueIterator returns an interator ranging over validators that are // unbonding whose unbonding completion occurs at the given height and time. -func (k Keeper) ValidatorQueueIterator(ctx context.Context, endTime time.Time, endHeight int64) (corestore.Iterator, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) ValidatorQueueIterator(ctx context.Context, endTime time.Time, endHeight int64) (meterResult corestore.Iterator, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ValidatorQueueIterator")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Iterator(types.ValidatorQueueKey, storetypes.InclusiveEndBytes(types.GetValidatorQueueKey(endTime, endHeight))) } // UnbondAllMatureValidators unbonds all the mature unbonding validators that // have finished their unbonding period. -func (k Keeper) UnbondAllMatureValidators(ctx context.Context) error { +func (k Keeper) UnbondAllMatureValidators(ctx context.Context) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "UnbondAllMatureValidators")(&err) blockTime := sdkCtx.BlockTime() blockHeight := sdkCtx.BlockHeight() @@ -548,7 +640,7 @@ func (k Keeper) UnbondAllMatureValidators(ctx context.Context) error { // ValidatorQueueKey | timeBzLen (8-byte big endian) | timeBz | heightBz (8-byte big endian), // so it may be possible that certain validator addresses that are iterated // over are not ready to unbond, so an explicit check is required. - unbondingValIterator, err := k.ValidatorQueueIterator(ctx, blockTime, blockHeight) + unbondingValIterator, err := k.ValidatorQueueIterator(sdkCtx, blockTime, blockHeight) if err != nil { return err } @@ -575,7 +667,7 @@ func (k Keeper) UnbondAllMatureValidators(ctx context.Context) error { if err != nil { return err } - val, err := k.GetValidator(ctx, addr) + val, err := k.GetValidator(sdkCtx, addr) if err != nil { return errorsmod.Wrap(err, "validator in the unbonding queue was not found") } @@ -586,12 +678,12 @@ func (k Keeper) UnbondAllMatureValidators(ctx context.Context) error { if val.UnbondingOnHoldRefCount == 0 { for _, id := range val.UnbondingIds { - if err = k.DeleteUnbondingIndex(ctx, id); err != nil { + if err = k.DeleteUnbondingIndex(sdkCtx, id); err != nil { return err } } - val, err = k.UnbondingToUnbonded(ctx, val) + val, err = k.UnbondingToUnbonded(sdkCtx, val) if err != nil { return err } @@ -601,7 +693,7 @@ func (k Keeper) UnbondAllMatureValidators(ctx context.Context) error { if err != nil { return err } - if err = k.RemoveValidator(ctx, str); err != nil { + if err = k.RemoveValidator(sdkCtx, str); err != nil { return err } } else { @@ -610,7 +702,7 @@ func (k Keeper) UnbondAllMatureValidators(ctx context.Context) error { } // remove validator from queue - if err = k.DeleteValidatorQueue(ctx, val); err != nil { + if err = k.DeleteValidatorQueue(sdkCtx, val); err != nil { return err } } @@ -621,8 +713,11 @@ func (k Keeper) UnbondAllMatureValidators(ctx context.Context) error { } // IsValidatorJailed checks and returns boolean of a validator status jailed or not. -func (k Keeper) IsValidatorJailed(ctx context.Context, addr sdk.ConsAddress) (bool, error) { - v, err := k.GetValidatorByConsAddr(ctx, addr) +func (k Keeper) IsValidatorJailed(ctx context.Context, addr sdk.ConsAddress) (meterResult bool, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "IsValidatorJailed")(&err) + + v, err := k.GetValidatorByConsAddr(sdkCtx, addr) if err != nil { return false, err } @@ -631,8 +726,11 @@ func (k Keeper) IsValidatorJailed(ctx context.Context, addr sdk.ConsAddress) (bo } // GetPubKeyByConsAddr returns the consensus public key by consensus address. -func (k Keeper) GetPubKeyByConsAddr(ctx context.Context, addr sdk.ConsAddress) (cmtprotocrypto.PublicKey, error) { - v, err := k.GetValidatorByConsAddr(ctx, addr) +func (k Keeper) GetPubKeyByConsAddr(ctx context.Context, addr sdk.ConsAddress) (meterResult cmtprotocrypto.PublicKey, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetPubKeyByConsAddr")(&err) + + v, err := k.GetValidatorByConsAddr(sdkCtx, addr) if err != nil { return cmtprotocrypto.PublicKey{}, err } diff --git a/x/upgrade/go.mod b/x/upgrade/go.mod index b8fa519653fe..9f6246e5afc7 100644 --- a/x/upgrade/go.mod +++ b/x/upgrade/go.mod @@ -1,8 +1,6 @@ module cosmossdk.io/x/upgrade -go 1.23.5 - -toolchain go1.23.8 +go 1.23.9 require ( cosmossdk.io/api v0.7.6 @@ -11,6 +9,7 @@ require ( cosmossdk.io/errors v1.0.1 cosmossdk.io/log v1.4.1 cosmossdk.io/store v1.1.1 + github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 github.com/cometbft/cometbft v1.0.1 github.com/cosmos/cosmos-db v1.1.1 github.com/cosmos/cosmos-proto v1.0.0-beta.5 @@ -25,17 +24,17 @@ require ( github.com/spf13/cobra v1.9.1 github.com/spf13/pflag v1.0.6 github.com/spf13/viper v1.19.0 - github.com/stretchr/testify v1.10.0 - google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422 - google.golang.org/grpc v1.71.0 - google.golang.org/protobuf v1.36.5 + github.com/stretchr/testify v1.11.1 + google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 + google.golang.org/grpc v1.75.0 + google.golang.org/protobuf v1.36.8 ) require ( buf.build/gen/go/cometbft/cometbft/protocolbuffers/go v1.36.5-20241120201313-68e42a58b301.1 // indirect buf.build/gen/go/cosmos/gogo-proto/protocolbuffers/go v1.36.5-20240130113600-88ef6483f90f.1 // indirect cloud.google.com/go v0.112.1 // indirect - cloud.google.com/go/compute/metadata v0.6.0 // indirect + cloud.google.com/go/compute/metadata v0.7.0 // indirect cloud.google.com/go/iam v1.1.6 // indirect cloud.google.com/go/storage v1.38.0 // indirect cosmossdk.io/collections v0.4.0 // indirect @@ -44,25 +43,17 @@ require ( filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect - github.com/DataDog/appsec-internal-go v1.5.0 // indirect - github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0 // indirect - github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1 // indirect github.com/DataDog/datadog-go v3.2.0+incompatible // indirect - github.com/DataDog/datadog-go/v5 v5.3.0 // indirect - github.com/DataDog/go-libddwaf/v2 v2.3.2 // indirect - github.com/DataDog/go-tuf v1.0.2-0.5.2 // indirect - github.com/DataDog/sketches-go v1.4.2 // indirect github.com/DataDog/zstd v1.5.6 // indirect - github.com/InjectiveLabs/metrics v0.0.10 // indirect - github.com/Microsoft/go-winio v0.6.2 // indirect - github.com/alexcesaro/statsd v2.0.0+incompatible // indirect github.com/aws/aws-sdk-go v1.44.327 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.4 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect + github.com/cenkalti/backoff/v5 v5.0.3 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/errors v1.11.3 // indirect github.com/cockroachdb/fifo v0.0.0-20240816210425-c5d0cb0b6fc0 // indirect @@ -86,22 +77,21 @@ require ( github.com/dgraph-io/ristretto/v2 v2.1.0 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.6.0 // indirect - github.com/ebitengine/purego v0.6.0-alpha.5 // indirect github.com/emicklei/dot v1.6.2 // indirect - github.com/fatih/color v1.15.0 // indirect + github.com/fatih/color v1.16.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/getsentry/sentry-go v0.31.1 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect - github.com/go-logr/logr v1.4.2 // indirect + github.com/go-logr/logr v1.4.3 // indirect github.com/go-logr/stdr v1.2.2 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/golang/mock v1.6.0 // indirect - github.com/golang/snappy v0.0.4 // indirect + github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb // indirect github.com/google/btree v1.1.3 // indirect github.com/google/flatbuffers v25.2.10+incompatible // indirect github.com/google/go-cmp v0.7.0 // indirect @@ -114,11 +104,10 @@ require ( github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.3 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect - github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-plugin v1.5.2 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/go-version v1.6.0 // indirect @@ -150,10 +139,8 @@ require ( github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oasisprotocol/curve25519-voi v0.0.0-20230904125328-1f23a7beb09a // indirect github.com/oklog/run v1.1.0 // indirect - github.com/outcaste-io/ristretto v0.2.3 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 // indirect - github.com/philhofer/fwd v1.1.2 // 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.21.1 // indirect @@ -167,7 +154,6 @@ require ( 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.5 // indirect - github.com/secure-systems-lab/go-securesystemslib v0.7.0 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spf13/afero v1.11.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect @@ -175,7 +161,6 @@ require ( 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/tinylib/msgp v1.1.8 // indirect github.com/ulikunitz/xz v0.5.11 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect @@ -184,25 +169,28 @@ require ( go.opentelemetry.io/auto/sdk v1.1.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect - go.opentelemetry.io/otel v1.34.0 // indirect - go.opentelemetry.io/otel/metric v1.34.0 // indirect - go.opentelemetry.io/otel/trace v1.34.0 // indirect - go.uber.org/atomic v1.11.0 // indirect + go.opentelemetry.io/otel v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 // indirect + go.opentelemetry.io/otel/metric v1.38.0 // indirect + go.opentelemetry.io/otel/sdk v1.38.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.38.0 // indirect + go.opentelemetry.io/otel/trace v1.38.0 // indirect + go.opentelemetry.io/proto/otlp v1.7.1 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.36.0 // indirect + golang.org/x/crypto v0.41.0 // indirect golang.org/x/exp v0.0.0-20250106191152-7588d65b2ba8 // indirect - golang.org/x/net v0.37.0 // indirect - golang.org/x/oauth2 v0.25.0 // indirect - golang.org/x/sync v0.12.0 // indirect - golang.org/x/sys v0.31.0 // indirect - golang.org/x/term v0.30.0 // indirect - golang.org/x/text v0.23.0 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/oauth2 v0.30.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/term v0.34.0 // indirect + golang.org/x/text v0.28.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect google.golang.org/api v0.171.0 // indirect google.golang.org/genproto v0.0.0-20240227224415-6ceb2ff114de // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f // indirect - gopkg.in/DataDog/dd-trace-go.v1 v1.62.0 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -231,6 +219,6 @@ replace ( replace ( // Use CometBFT v1.0.1 with Mempool lanes and DOG - github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.1-inj.3 - github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 + github.com/cometbft/cometbft => github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 + github.com/cometbft/cometbft/api => github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 ) diff --git a/x/upgrade/go.sum b/x/upgrade/go.sum index bc8579c81ef4..dcf7ac326e74 100644 --- a/x/upgrade/go.sum +++ b/x/upgrade/go.sum @@ -72,8 +72,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= -cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= +cloud.google.com/go/compute/metadata v0.7.0 h1:PBWF+iiAerVNe8UCHxdOt6eHLVc3ydFeOCw78U8ytSU= +cloud.google.com/go/compute/metadata v0.7.0/go.mod h1:j5MvL9PprKL39t166CoB1uVHfQMs4tFQZZcKwksXUjo= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= @@ -207,34 +207,17 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 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/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/DataDog/appsec-internal-go v1.5.0 h1:8kS5zSx5T49uZ8dZTdT19QVAvC/B8ByyZdhQKYQWHno= -github.com/DataDog/appsec-internal-go v1.5.0/go.mod h1:pEp8gjfNLtEOmz+iZqC8bXhu0h4k7NUsW/qiQb34k1U= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0 h1:bUMSNsw1iofWiju9yc1f+kBd33E3hMJtq9GuU602Iy8= -github.com/DataDog/datadog-agent/pkg/obfuscate v0.48.0/go.mod h1:HzySONXnAgSmIQfL6gOv9hWprKJkx8CicuXuUbmgWfo= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1 h1:5nE6N3JSs2IG3xzMthNFhXfOaXlrsdgqmJ73lndFf8c= -github.com/DataDog/datadog-agent/pkg/remoteconfig/state v0.48.1/go.mod h1:Vc+snp0Bey4MrrJyiV2tVxxJb6BmLomPvN1RgAvjGaQ= github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/DataDog/datadog-go/v5 v5.3.0 h1:2q2qjFOb3RwAZNU+ez27ZVDwErJv5/VpbBPprz7Z+s8= -github.com/DataDog/datadog-go/v5 v5.3.0/go.mod h1:XRDJk1pTc00gm+ZDiBKsjh7oOOtJfYfglVCmFb8C2+Q= -github.com/DataDog/go-libddwaf/v2 v2.3.2 h1:pdi9xjWW57IpOpTeOyPuNveEDFLmmInsHDeuZk3TY34= -github.com/DataDog/go-libddwaf/v2 v2.3.2/go.mod h1:gsCdoijYQfj8ce/T2bEDNPZFIYnmHluAgVDpuQOWMZE= -github.com/DataDog/go-tuf v1.0.2-0.5.2 h1:EeZr937eKAWPxJ26IykAdWA4A0jQXJgkhUjqEI/w7+I= -github.com/DataDog/go-tuf v1.0.2-0.5.2/go.mod h1:zBcq6f654iVqmkk8n2Cx81E1JnNTMOAx1UEO/wZR+P0= -github.com/DataDog/gostackparse v0.7.0 h1:i7dLkXHvYzHV308hnkvVGDL3BR4FWl7IsXNPz/IGQh4= -github.com/DataDog/gostackparse v0.7.0/go.mod h1:lTfqcJKqS9KnXQGnyQMCugq3u1FP6UZMfWR0aitKFMM= -github.com/DataDog/sketches-go v1.4.2 h1:gppNudE9d19cQ98RYABOetxIhpTCl4m7CnbRZjvVA/o= -github.com/DataDog/sketches-go v1.4.2/go.mod h1:xJIXldczJyyjnbDop7ZZcLxJdV3+7Kra7H1KMgpgkLk= github.com/DataDog/zstd v1.5.6 h1:LbEglqepa/ipmmQJUDnSsfvA8e8IStVcGaFWDuxvGOY= github.com/DataDog/zstd v1.5.6/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3 h1:wVl4vPhyTh6uuwT0BfH3pbF9W0QqEnZYRgB/2IDFXR0= -github.com/InjectiveLabs/cometbft v1.0.1-inj.3/go.mod h1:RgHHndb7wdtm9etmVj4tDn1NynC9YKIEJW9UUI3FCn4= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2 h1:uXsmBVeBickTjZ2GqPNYXShoboRw1m2Cq1bKv4QCe0o= -github.com/InjectiveLabs/cometbft/api v1.0.0-inj.2/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= -github.com/InjectiveLabs/metrics v0.0.10 h1:BoOwXnCtRRIPmq06jcI20pXZYE758eusaCI5jDOoN4U= -github.com/InjectiveLabs/metrics v0.0.10/go.mod h1:eYu++0DVUjk/jjV9WgvCo8gQU+16Yoyhp1iu+ghKNME= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6 h1:QIKdpbqWRC38xJDRBmUitpksS0ZfwlvSMMYaesZirms= +github.com/InjectiveLabs/cometbft v1.0.2-0.20260406101044-d1e31b5e53f6/go.mod h1:U34DYdUTNyEdnB89+eqZy+SO9g7sFRwJQg7La+o/pHk= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6 h1:GcV53gW9ajrbSoU2ikuCB+dUWHmhMmtfRKwJngZ+ChM= +github.com/InjectiveLabs/cometbft/api v1.0.1-0.20260406101044-d1e31b5e53f6/go.mod h1:Ivh6nSCTJPQOyfQo8dgnyu/T88it092sEqSrZSmTQN8= +github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8 h1:zvIV7ifNcH2Dvl0RrXd2qYRkaDSc+iP0hqaAhfS85MY= +github.com/InjectiveLabs/metrics/v2 v2.0.0-beta.8/go.mod h1:fdW28eWh1Ace92UW2TzINdJVaVP7whCmHKkGQZHsxGI= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= @@ -251,8 +234,6 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alexcesaro/statsd v2.0.0+incompatible h1:HG17k1Qk8V1F4UOoq6tx+IUoAbOcI5PHzzEUGeDD72w= -github.com/alexcesaro/statsd v2.0.0+incompatible/go.mod h1:vNepIbQAiyLe1j480173M6NYYaAsGwEcvuDTU3OCUGY= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= @@ -276,8 +257,8 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= 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/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5MS5JVb4c= -github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= +github.com/bits-and-blooms/bitset v1.17.0 h1:1X2TS7aHz1ELcC0yU1y2stUs/0ig5oMU6STFZGrhvHI= +github.com/bits-and-blooms/bitset v1.17.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd/btcec/v2 v2.3.4 h1:3EJjcN70HCu/mwqlUsGK8GcNVyLVxFDlWurTXGPFfiQ= github.com/btcsuite/btcd/btcec/v2 v2.3.4/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.6 h1:zFL2+c3Lb9gEgqKNzowKUPQNb8jV7v5Oaodi/AYFd6c= @@ -286,6 +267,7 @@ github.com/bufbuild/protocompile v0.6.0 h1:Uu7WiSQ6Yj9DbkdnOe7U4mNKp58y9WDMKDn28 github.com/bufbuild/protocompile v0.6.0/go.mod h1:YNP35qEYoYGme7QMtz5SBCoN4kL4g12jTtjuzRNdjpE= github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= +github.com/bytedance/sonic v1.10.0-rc/go.mod h1:ElCzW+ufi8qKqNW0FY314xriJhyJhuoJ3gFZdAHF7NM= github.com/bytedance/sonic v1.10.0 h1:qtNZduETEIWJVIyDl01BeNxur2rW9OwTQ/yBqFRkKEk= github.com/bytedance/sonic v1.10.0/go.mod h1:iZcSUejdk5aukTND/Eu/ivjQuEL0Cu9/rf50Hi0u/g4= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= @@ -294,6 +276,8 @@ github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QH github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.3 h1:cFAlzYUlVYDysBEH2T5hyJZMh3+5+WCBvSnK6Q8UtC4= github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= +github.com/cenkalti/backoff/v5 v5.0.3 h1:ZN+IMa753KfX5hd8vVaMixjnqRZ3y8CuJKRKj1xcsSM= +github.com/cenkalti/backoff/v5 v5.0.3/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -394,7 +378,6 @@ github.com/dgraph-io/badger/v4 v4.6.0/go.mod h1:KSJ5VTuZNC3Sd+YhvVjk2nYua9UZnnTr github.com/dgraph-io/ristretto/v2 v2.1.0 h1:59LjpOJLNDULHh8MC4UaegN52lC4JnO2dITsie/Pa8I= github.com/dgraph-io/ristretto/v2 v2.1.0/go.mod h1:uejeqfYXpUomfse0+lO+13ATz4TypQYLJZzBSAemuB4= github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= @@ -402,7 +385,6 @@ github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5Xh 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 v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -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= @@ -410,8 +392,6 @@ github.com/dvsekhvalnov/jose2go v1.6.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/ebitengine/purego v0.6.0-alpha.5 h1:EYID3JOAdmQ4SNZYJHu9V6IqOeRQDBYxqKAg9PyoHFY= -github.com/ebitengine/purego v0.6.0-alpha.5/go.mod h1:ah1In8AOtksoNK6yk5z1HTJeUkC1Ez4Wk2idgGslMwQ= github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= 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= @@ -428,8 +408,8 @@ github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go. github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/color v1.15.0 h1:kOqh6YHBtK8aywxGerMG2Eq3H6Qgoqeo13Bk2Mv/nBs= -github.com/fatih/color v1.15.0/go.mod h1:0h5ZqXfHYED7Bhv2ZJamyIOUej9KtShiJESRwBDUSsw= +github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= +github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= @@ -470,8 +450,8 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG 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-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -491,8 +471,9 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= +github.com/goccy/go-json v0.10.4 h1:JSwxQzIqKfmFX1swYPpUThQZp/Ka4wzJdK0LWVytLPM= +github.com/goccy/go-json v0.10.4/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= 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= @@ -546,8 +527,9 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb h1:PBC98N2aIaM3XXiurYmW7fx4GZkL8feAMVq7nEjURHk= +github.com/golang/snappy v0.0.5-0.20220116011046-fa5810519dcb/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= @@ -599,8 +581,6 @@ github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b h1:h9U78+dx9a4BKdQkBBos92HalKpaGKHrp+3Uo6yTodo= -github.com/google/pprof v0.0.0-20230817174616-7a8ec2ada47b/go.mod h1:czg5+yv1E0ZGTi6S6vVK1mke0fV+FaUhNGcd6VRS9Ik= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= @@ -646,13 +626,13 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs= 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/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= @@ -668,8 +648,6 @@ github.com/hashicorp/go-metrics v0.5.3 h1:M5uADWMOGCTUNU1YuC4hfknOeHNaX54LDm4oYS github.com/hashicorp/go-metrics v0.5.3/go.mod h1:KEjodfebIOuBYSAe/bHTm+HChmKSxAOXPBieMLYozDE= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-plugin v1.5.2 h1:aWv8eimFqWlsEiMrYZdPYl+FdHaBJSN4AWwGWfT1G2Y= github.com/hashicorp/go-plugin v1.5.2/go.mod h1:w1sAEES3g3PuV/RzUrgow20W2uErMly84hhD3um1WL4= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= @@ -754,6 +732,7 @@ github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa02 github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= +github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= @@ -869,16 +848,12 @@ github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/opentracing/opentracing-go v1.2.0/go.mod h1:GxEUsuufX4nBwe+T+Wl9TAgYrxe9dPLANfrWvHYVTgc= github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= 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/outcaste-io/ristretto v0.2.3 h1:AK4zt/fJ76kjlYObOeNwh4T3asEuaCmp26pOvUOL9w0= -github.com/outcaste-io/ristretto v0.2.3/go.mod h1:W8HywhmtlopSB1jeMg3JtdIhf+DYkLAr0VN/s4+MHac= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -890,8 +865,6 @@ github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7 h1:Dx7Ovyv/SFnMFw3fD4oEoeorXc6saIiQ23LrGLth0Gw= github.com/petermattis/goid v0.0.0-20240813172612-4fcff4a6cae7/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= -github.com/philhofer/fwd v1.1.2 h1:bnDivRJ1EWPjUIRXV5KfORO897HTbpFAQddBdE8t7Gw= -github.com/philhofer/fwd v1.1.2/go.mod h1:qkPdfjR2SIEbspLqpe1tO4n5yICnr2DY7mqEx2tUTP0= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= @@ -941,8 +914,6 @@ github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoG github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= 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/richardartoul/molecule v1.0.1-0.20221107223329-32cfee06a052 h1:Qp27Idfgi6ACvFQat5+VJvlYToylpM/hcyLBI3WaKPA= -github.com/richardartoul/molecule v1.0.1-0.20221107223329-32cfee06a052/go.mod h1:uvX/8buq8uVeiZiFht+0lqSLBHF+uGV8BrTv8W/SIwk= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -966,8 +937,6 @@ github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0 github.com/sasha-s/go-deadlock v0.3.5 h1:tNCOEEDG6tBqrNDOX35j/7hL5FcFViG6awUGROb2NsU= github.com/sasha-s/go-deadlock v0.3.5/go.mod h1:bugP6EGbdGYObIlx7pUZtWqlvo8k9H6vCBBsiChJQ5U= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/secure-systems-lab/go-securesystemslib v0.7.0 h1:OwvJ5jQf9LnIAS83waAjPbcMsODrTQUpJ02eNLUoxBg= -github.com/secure-systems-lab/go-securesystemslib v0.7.0/go.mod h1:/2gYnlnHVQ6xeGtfIqFy7Do03K4cdCY0A/GlJLDKLHI= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -982,8 +951,6 @@ github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJ 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/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= -github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= @@ -1020,8 +987,8 @@ github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= 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.14 h1:xNMoHRJOTwMn63ip6qoWJ2Ymgvj7E2b9jY2FAwY+qRo= @@ -1032,8 +999,6 @@ github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2l 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/tinylib/msgp v1.1.8 h1:FCXC1xanKO4I8plpHGH2P7koL/RzZs12l/+r7vakfm0= -github.com/tinylib/msgp v1.1.8/go.mod h1:qkpG+2ldGg4xRFmx+jfTvZPxfGFhi64BcnL9vkCm/Tw= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= @@ -1077,24 +1042,29 @@ go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.4 go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.49.0/go.mod h1:Mjt1i1INqiaoZOMGR1RIUJN+i3ChKoFRqzrRQhlkbs0= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= -go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY= -go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI= -go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ= -go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE= -go.opentelemetry.io/otel/sdk v1.34.0 h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A= -go.opentelemetry.io/otel/sdk v1.34.0/go.mod h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU= -go.opentelemetry.io/otel/sdk/metric v1.34.0 h1:5CeK9ujjbFVL5c1PhLuStg1wxA7vQv7ce1EK0Gyvahk= -go.opentelemetry.io/otel/sdk/metric v1.34.0/go.mod h1:jQ/r8Ze28zRKoNRdkjCZxfs6YvBTG1+YIqyFVFYec5w= -go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k= -go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE= +go.opentelemetry.io/otel v1.38.0 h1:RkfdswUDRimDg0m2Az18RKOsnI8UDzppJAtj01/Ymk8= +go.opentelemetry.io/otel v1.38.0/go.mod h1:zcmtmQ1+YmQM9wrNsTGV/q/uyusom3P8RxwExxkZhjM= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0 h1:vl9obrcoWVKp/lwl8tRE33853I8Xru9HFbw/skNeLs8= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.38.0/go.mod h1:GAXRxmLJcVM3u22IjTg74zWBrRCKq8BnOqUVLodpcpw= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0 h1:GqRJVj7UmLjCVyVJ3ZFLdPRmhDUp2zFmQe3RHIOsw24= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.38.0/go.mod h1:ri3aaHSmCTVYu2AWv44YMauwAQc0aqI9gHKIcSbI1pU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0 h1:lwI4Dc5leUqENgGuQImwLo4WnuXFPetmPpkLi2IrX54= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.38.0/go.mod h1:Kz/oCE7z5wuyhPxsXDuaPteSWqjSBD5YaSdbxZYGbGk= +go.opentelemetry.io/otel/metric v1.38.0 h1:Kl6lzIYGAh5M159u9NgiRkmoMKjvbsKtYRwgfrA6WpA= +go.opentelemetry.io/otel/metric v1.38.0/go.mod h1:kB5n/QoRM8YwmUahxvI3bO34eVtQf2i4utNVLr9gEmI= +go.opentelemetry.io/otel/sdk v1.38.0 h1:l48sr5YbNf2hpCUj/FoGhW9yDkl+Ma+LrVl8qaM5b+E= +go.opentelemetry.io/otel/sdk v1.38.0/go.mod h1:ghmNdGlVemJI3+ZB5iDEuk4bWA3GkTpW+DOoZMYBVVg= +go.opentelemetry.io/otel/sdk/metric v1.38.0 h1:aSH66iL0aZqo//xXzQLYozmWrXxyFkBJ6qT5wthqPoM= +go.opentelemetry.io/otel/sdk/metric v1.38.0/go.mod h1:dg9PBnW9XdQ1Hd6ZnRz689CbtrUp0wMMs9iPcgT9EZA= +go.opentelemetry.io/otel/trace v1.38.0 h1:Fxk5bKrDZJUH+AMyyIXGcFAPah0oRcT+LuNtJrmcNLE= +go.opentelemetry.io/otel/trace v1.38.0/go.mod h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= +go.opentelemetry.io/proto/otlp v1.7.1 h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4= +go.opentelemetry.io/proto/otlp v1.7.1/go.mod h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE= go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.11.0 h1:ZvwS0R+56ePWxUNi+Atn9dWONBPp/AUETXlHW0DxSjE= -go.uber.org/atomic v1.11.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= @@ -1123,8 +1093,8 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34= -golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1164,7 +1134,6 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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= @@ -1225,12 +1194,11 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.37.0 h1:1zLorHbz+LYj7MQlSf1+2tPIIgibq2eL5xkrGk6f+2c= -golang.org/x/net v0.37.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1256,8 +1224,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= -golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI= +golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU= 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= @@ -1273,8 +1241,8 @@ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw= -golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1326,7 +1294,6 @@ golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1362,29 +1329,26 @@ 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-20220627191245-f75cf1eec38b/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= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= 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.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y= -golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -1396,12 +1360,11 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY= -golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1471,10 +1434,9 @@ golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.29.0 h1:Xx0h3TtM9rzQpQuR4dKLrdglAmCEN5Oi+P74JdhdzXE= -golang.org/x/tools v0.29.0/go.mod h1:KMQVMRsVxU6nHCFXrBPhDB8XncLNLM0lIy/F14RP588= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= 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= @@ -1485,6 +1447,8 @@ golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNq golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU= golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90= +gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk= +gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= @@ -1652,10 +1616,10 @@ google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= 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-20250106144421-5f5ef82da422 h1:GVIKPyP/kLIyVOgOnTwFOrvQaQUzOzGMCxgFUOEmm24= -google.golang.org/genproto/googleapis/api v0.0.0-20250106144421-5f5ef82da422/go.mod h1:b6h1vNKhxaSoEI+5jc3PJUCustfli/mRab7295pY7rw= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f h1:OxYkA3wjPsZyBylwymxSHa7ViiW1Sml4ToBrncvFehI= -google.golang.org/genproto/googleapis/rpc v0.0.0-20250115164207-1a7da9e5054f/go.mod h1:+2Yz8+CLJbIfL9z73EW45avw8Lmge3xVElCP9zEKi50= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY= +google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5/go.mod h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5 h1:eaY8u2EuxbRv7c3NiGK0/NedzVsCcV6hDuU5qPX5EGE= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250825161204-c5933d9347a5/go.mod h1:M4/wBTSeyLxupu3W3tJtOgB14jILAS/XWPSSa3TAlJc= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1697,8 +1661,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.71.0 h1:kF77BGdPTQ4/JZWMlb9VpJ5pa25aqvVqogsxNHHdeBg= -google.golang.org/grpc v1.71.0/go.mod h1:H0GRtasmQOh9LkFoCPDu3ZrwUtD1YGE+b2vYBYd/8Ec= +google.golang.org/grpc v1.75.0 h1:+TW+dqTd2Biwe6KKfhE5JpiYIBWq865PhKGSXiivqt4= +google.golang.org/grpc v1.75.0/go.mod h1:JtPAzKiq4v1xcAB2hydNlWI2RnF85XXcV0mhKXr2ecQ= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1716,13 +1680,9 @@ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= -gopkg.in/DataDog/dd-trace-go.v1 v1.62.0 h1:jeZxE4ZlfAc+R0zO5TEmJBwOLet3NThsOfYJeSQg1x0= -gopkg.in/DataDog/dd-trace-go.v1 v1.62.0/go.mod h1:YTvYkk3PTsfw0OWrRFxV/IQ5Gy4nZ5TRvxTAP3JcIzs= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/alexcesaro/statsd.v2 v2.0.0 h1:FXkZSCZIH17vLCO5sO2UucTHsH9pc+17F6pl3JVCwMc= -gopkg.in/alexcesaro/statsd.v2 v2.0.0/go.mod h1:i0ubccKGzBVNBpdGV5MocxyA/XlLUJzA7SLonnE4drU= 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= @@ -1756,8 +1716,6 @@ 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/gotraceui v0.2.0 h1:dmNsfQ9Vl3GwbiVD7Z8d/osC6WtGGrasyrC2suc4ZIQ= -honnef.co/go/gotraceui v0.2.0/go.mod h1:qHo4/W75cA3bX0QQoSvDjbJa4R8mAyyFjbWAj63XElc= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1768,6 +1726,7 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw= pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= diff --git a/x/upgrade/keeper/grpc_query.go b/x/upgrade/keeper/grpc_query.go index d3502372e731..8f1f180d4f72 100644 --- a/x/upgrade/keeper/grpc_query.go +++ b/x/upgrade/keeper/grpc_query.go @@ -13,10 +13,11 @@ import ( var _ types.QueryServer = Keeper{} // CurrentPlan implements the Query/CurrentPlan gRPC method -func (k Keeper) CurrentPlan(c context.Context, req *types.QueryCurrentPlanRequest) (*types.QueryCurrentPlanResponse, error) { - ctx := sdk.UnwrapSDKContext(c) +func (k Keeper) CurrentPlan(c context.Context, req *types.QueryCurrentPlanRequest) (meterResult *types.QueryCurrentPlanResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.Meter(c).FuncTiming(&sdkCtx, "CurrentPlan")(&err) - plan, err := k.GetUpgradePlan(ctx) + plan, err := k.GetUpgradePlan(sdkCtx) if err != nil { if errors.Is(err, types.ErrNoUpgradePlanFound) { return &types.QueryCurrentPlanResponse{}, nil @@ -29,19 +30,23 @@ func (k Keeper) CurrentPlan(c context.Context, req *types.QueryCurrentPlanReques } // AppliedPlan implements the Query/AppliedPlan gRPC method -func (k Keeper) AppliedPlan(c context.Context, req *types.QueryAppliedPlanRequest) (*types.QueryAppliedPlanResponse, error) { - ctx := sdk.UnwrapSDKContext(c) +func (k Keeper) AppliedPlan(c context.Context, req *types.QueryAppliedPlanRequest) (meterResult *types.QueryAppliedPlanResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.Meter(c).FuncTiming(&sdkCtx, "AppliedPlan")(&err) - applied, err := k.GetDoneHeight(ctx, req.Name) + applied, err := k.GetDoneHeight(sdkCtx, req.Name) return &types.QueryAppliedPlanResponse{Height: applied}, err } // UpgradedConsensusState implements the Query/UpgradedConsensusState gRPC method -func (k Keeper) UpgradedConsensusState(c context.Context, req *types.QueryUpgradedConsensusStateRequest) (*types.QueryUpgradedConsensusStateResponse, error) { //nolint:staticcheck // we're using a deprecated call for compatibility - ctx := sdk.UnwrapSDKContext(c) +func (k Keeper) UpgradedConsensusState(c context.Context, req *types.QueryUpgradedConsensusStateRequest) (meterResult *types.QueryUpgradedConsensusStateResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.Meter(c).FuncTiming(&sdkCtx, "UpgradedConsensusState")(&err) - consState, err := k.GetUpgradedConsensusState(ctx, req.LastHeight) + //nolint:staticcheck // we're using a deprecated call for compatibility + + consState, err := k.GetUpgradedConsensusState(sdkCtx, req.LastHeight) if err != nil { if errors.Is(err, types.ErrNoUpgradedConsensusStateFound) { return &types.QueryUpgradedConsensusStateResponse{}, nil //nolint:staticcheck // we're using a deprecated call for compatibility @@ -56,12 +61,13 @@ func (k Keeper) UpgradedConsensusState(c context.Context, req *types.QueryUpgrad } // ModuleVersions implements the Query/QueryModuleVersions gRPC method -func (k Keeper) ModuleVersions(c context.Context, req *types.QueryModuleVersionsRequest) (*types.QueryModuleVersionsResponse, error) { - ctx := sdk.UnwrapSDKContext(c) +func (k Keeper) ModuleVersions(c context.Context, req *types.QueryModuleVersionsRequest) (meterResult *types.QueryModuleVersionsResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.Meter(c).FuncTiming(&sdkCtx, "ModuleVersions")(&err) // check if a specific module was requested if len(req.ModuleName) > 0 { - version, err := k.getModuleVersion(ctx, req.ModuleName) + version, err := k.getModuleVersion(sdkCtx, req.ModuleName) if err != nil { // module requested, but not found or error happened return nil, errorsmod.Wrapf(err, "x/upgrade: QueryModuleVersions module %s not found", req.ModuleName) @@ -73,7 +79,7 @@ func (k Keeper) ModuleVersions(c context.Context, req *types.QueryModuleVersions } // if no module requested return all module versions from state - mv, err := k.GetModuleVersions(ctx) + mv, err := k.GetModuleVersions(sdkCtx) if err != nil { return nil, err } @@ -84,6 +90,9 @@ func (k Keeper) ModuleVersions(c context.Context, req *types.QueryModuleVersions } // Authority implements the Query/Authority gRPC method, returning the account capable of performing upgrades -func (k Keeper) Authority(c context.Context, req *types.QueryAuthorityRequest) (*types.QueryAuthorityResponse, error) { +func (k Keeper) Authority(c context.Context, req *types.QueryAuthorityRequest) (meterResult *types.QueryAuthorityResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(c) + defer k.Meter(c).FuncTiming(&sdkCtx, "Authority")(&err) + return &types.QueryAuthorityResponse{Address: k.authority}, nil } diff --git a/x/upgrade/keeper/keeper.go b/x/upgrade/keeper/keeper.go index b06aba7dd11a..e893736fce77 100644 --- a/x/upgrade/keeper/keeper.go +++ b/x/upgrade/keeper/keeper.go @@ -2,16 +2,6 @@ package keeper import ( "context" - "encoding/binary" - "encoding/json" - "errors" - "fmt" - "os" - "path/filepath" - "sort" - "strconv" - - "github.com/hashicorp/go-metrics" corestore "cosmossdk.io/core/store" errorsmod "cosmossdk.io/errors" @@ -20,6 +10,11 @@ import ( storetypes "cosmossdk.io/store/types" xp "cosmossdk.io/x/upgrade/exported" "cosmossdk.io/x/upgrade/types" + "encoding/binary" + "encoding/json" + "errors" + "fmt" + metrics "github.com/InjectiveLabs/metrics/v2" "github.com/cosmos/cosmos-sdk/codec" "github.com/cosmos/cosmos-sdk/runtime" @@ -28,6 +23,11 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" "github.com/cosmos/cosmos-sdk/types/kv" "github.com/cosmos/cosmos-sdk/types/module" + hashicorpmetrics "github.com/hashicorp/go-metrics" + "os" + "path/filepath" + "sort" + "strconv" ) // Deprecated: UpgradeInfoFileName file to store upgrade information @@ -35,6 +35,7 @@ import ( const UpgradeInfoFileName string = "upgrade-info.json" type Keeper struct { + meter metrics.Meter homePath string // root directory of app config skipUpgradeHeights map[int64]bool // map of heights to skip for an upgrade storeService corestore.KVStoreService // key to access x/upgrade store @@ -96,16 +97,22 @@ func (k Keeper) SetUpgradeHandler(name string, upgradeHandler types.UpgradeHandl } // setProtocolVersion sets the protocol version to state -func (k Keeper) setProtocolVersion(ctx context.Context, v uint64) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) setProtocolVersion(ctx context.Context, v uint64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "setProtocolVersion")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) versionBytes := make([]byte, 8) binary.BigEndian.PutUint64(versionBytes, v) return store.Set([]byte{types.ProtocolVersionByte}, versionBytes) } // getProtocolVersion gets the protocol version from state -func (k Keeper) getProtocolVersion(ctx context.Context) (uint64, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) getProtocolVersion(ctx context.Context) (meterResult uint64, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getProtocolVersion")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) ok, err := store.Has([]byte{types.ProtocolVersionByte}) if err != nil { return 0, err @@ -125,9 +132,12 @@ func (k Keeper) getProtocolVersion(ctx context.Context) (uint64, error) { } // 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 module.VersionMap) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetModuleVersionMap")(&err) + if len(vm) > 0 { - store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(ctx)) + store := runtime.KVStoreAdapter(k.storeService.OpenKVStore(sdkCtx)) versionStore := prefix.NewStore(store, []byte{types.VersionMapByte}) // Even though the underlying store (cachekv) store is sorted, we still // prefer a deterministic iteration order of the map, to avoid undesired @@ -153,8 +163,11 @@ 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) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetModuleVersionMap(ctx context.Context) (meterResult module.VersionMap, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetModuleVersionMap")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := []byte{types.VersionMapByte} it, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -175,8 +188,11 @@ func (k Keeper) GetModuleVersionMap(ctx context.Context) (module.VersionMap, err } // GetModuleVersions gets a slice of module consensus versions -func (k Keeper) GetModuleVersions(ctx context.Context) ([]*types.ModuleVersion, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetModuleVersions(ctx context.Context) (meterResult []*types.ModuleVersion, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetModuleVersions")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := []byte{types.VersionMapByte} it, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -200,8 +216,11 @@ func (k Keeper) GetModuleVersions(ctx context.Context) ([]*types.ModuleVersion, // getModuleVersion gets the version for a given module. If it doesn't exist it returns ErrNoModuleVersionFound, other // errors may be returned if there is an error reading from the store. -func (k Keeper) getModuleVersion(ctx context.Context, name string) (uint64, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) getModuleVersion(ctx context.Context, name string) (meterResult uint64, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "getModuleVersion")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := []byte{types.VersionMapByte} it, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -224,19 +243,21 @@ func (k Keeper) getModuleVersion(ctx context.Context, name string) (uint64, erro // If there is another Plan already scheduled, it will cancel and overwrite it. // ScheduleUpgrade will also write the upgraded IBC ClientState to the upgraded client // path if it is specified in the plan. -func (k Keeper) ScheduleUpgrade(ctx context.Context, plan types.Plan) error { - if err := plan.ValidateBasic(); err != nil { +func (k Keeper) ScheduleUpgrade(ctx context.Context, plan types.Plan) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ScheduleUpgrade")(&err) + + if err = plan.ValidateBasic(); err != nil { return err } // NOTE: allow for the possibility of chains to schedule upgrades in begin block of the same block // as a strategy for emergency hard fork recoveries - sdkCtx := sdk.UnwrapSDKContext(ctx) if plan.Height < sdkCtx.HeaderInfo().Height { return errorsmod.Wrap(sdkerrors.ErrInvalidRequest, "upgrade cannot be scheduled in the past") } - doneHeight, err := k.GetDoneHeight(ctx, plan.Name) + doneHeight, err := k.GetDoneHeight(sdkCtx, plan.Name) if err != nil { return err } @@ -245,17 +266,17 @@ func (k Keeper) ScheduleUpgrade(ctx context.Context, plan types.Plan) error { return errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "upgrade with name %s has already been completed", plan.Name) } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) // clear any old IBC state stored by previous plan - oldPlan, err := k.GetUpgradePlan(ctx) + oldPlan, err := k.GetUpgradePlan(sdkCtx) // if there's an error but it's not ErrNoUpgradePlanFound, return error if err != nil && !errors.Is(err, types.ErrNoUpgradePlanFound) { return err } if err == nil { - err = k.ClearIBCState(ctx, oldPlan.Height) + err = k.ClearIBCState(sdkCtx, oldPlan.Height) if err != nil { return err } @@ -271,21 +292,27 @@ func (k Keeper) ScheduleUpgrade(ctx context.Context, plan types.Plan) error { return err } - telemetry.SetGaugeWithLabels([]string{"server", "info"}, 1, []metrics.Label{telemetry.NewLabel("upgrade_height", strconv.FormatInt(plan.Height, 10))}) + telemetry.SetGaugeWithLabels([]string{"server", "info"}, 1, []hashicorpmetrics.Label{telemetry.NewLabel("upgrade_height", strconv.FormatInt(plan.Height, 10))}) return nil } // SetUpgradedClient sets the expected upgraded client for the next version of this chain at the last height the current chain will commit. -func (k Keeper) SetUpgradedClient(ctx context.Context, planHeight int64, bz []byte) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetUpgradedClient(ctx context.Context, planHeight int64, bz []byte) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetUpgradedClient")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Set(types.UpgradedClientKey(planHeight), bz) } // GetUpgradedClient gets the expected upgraded client for the next version of this chain. If not found it returns // ErrNoUpgradedClientFound, but other errors may be returned if there is an error reading from the store. -func (k Keeper) GetUpgradedClient(ctx context.Context, height int64) ([]byte, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetUpgradedClient(ctx context.Context, height int64) (meterResult []byte, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetUpgradedClient")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.UpgradedClientKey(height)) if err != nil { return nil, err @@ -300,15 +327,21 @@ func (k Keeper) GetUpgradedClient(ctx context.Context, height int64) ([]byte, er // SetUpgradedConsensusState sets the expected upgraded consensus state for the next version of this chain // using the last height committed on this chain. -func (k Keeper) SetUpgradedConsensusState(ctx context.Context, planHeight int64, bz []byte) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) SetUpgradedConsensusState(ctx context.Context, planHeight int64, bz []byte) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "SetUpgradedConsensusState")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Set(types.UpgradedConsStateKey(planHeight), bz) } // GetUpgradedConsensusState gets the expected upgraded consensus state for the next version of this chain. If not found // it returns ErrNoUpgradedConsensusStateFound, but other errors may be returned if there is an error reading from the store. -func (k Keeper) GetUpgradedConsensusState(ctx context.Context, lastHeight int64) ([]byte, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetUpgradedConsensusState(ctx context.Context, lastHeight int64) (meterResult []byte, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetUpgradedConsensusState")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.UpgradedConsStateKey(lastHeight)) if err != nil { return nil, err @@ -322,8 +355,11 @@ func (k Keeper) GetUpgradedConsensusState(ctx context.Context, lastHeight int64) } // GetLastCompletedUpgrade returns the last applied upgrade name and height. -func (k Keeper) GetLastCompletedUpgrade(ctx context.Context) (string, int64, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetLastCompletedUpgrade(ctx context.Context) (meterResult string, meterResult1 int64, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetLastCompletedUpgrade")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := []byte{types.DoneByte} it, err := store.ReverseIterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -357,8 +393,11 @@ func encodeDoneKey(name string, height int64) []byte { } // GetDoneHeight returns the height at which the given upgrade was executed -func (k Keeper) GetDoneHeight(ctx context.Context, name string) (int64, error) { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) GetDoneHeight(ctx context.Context, name string) (meterResult int64, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetDoneHeight")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) prefix := []byte{types.DoneByte} it, err := store.Iterator(prefix, storetypes.PrefixEndBytes(prefix)) if err != nil { @@ -377,10 +416,13 @@ func (k Keeper) GetDoneHeight(ctx context.Context, name string) (int64, error) { } // ClearIBCState clears any planned IBC state -func (k Keeper) ClearIBCState(ctx context.Context, lastHeight int64) error { +func (k Keeper) ClearIBCState(ctx context.Context, lastHeight int64) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ClearIBCState")(&err) + // delete IBC client and consensus state from store if this is IBC plan - store := k.storeService.OpenKVStore(ctx) - err := store.Delete(types.UpgradedClientKey(lastHeight)) + store := k.storeService.OpenKVStore(sdkCtx) + err = store.Delete(types.UpgradedClientKey(lastHeight)) if err != nil { return err } @@ -389,9 +431,12 @@ func (k Keeper) ClearIBCState(ctx context.Context, lastHeight int64) error { } // ClearUpgradePlan clears any schedule upgrade and associated IBC states. -func (k Keeper) ClearUpgradePlan(ctx context.Context) error { +func (k Keeper) ClearUpgradePlan(ctx context.Context) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ClearUpgradePlan")(&err) + // clear IBC states every time upgrade plan is removed - oldPlan, err := k.GetUpgradePlan(ctx) + oldPlan, err := k.GetUpgradePlan(sdkCtx) if err != nil { // if there's no upgrade plan, return nil to match previous behavior if errors.Is(err, types.ErrNoUpgradePlanFound) { @@ -400,25 +445,29 @@ func (k Keeper) ClearUpgradePlan(ctx context.Context) error { return err } - err = k.ClearIBCState(ctx, oldPlan.Height) + err = k.ClearIBCState(sdkCtx, oldPlan.Height) if err != nil { return err } - store := k.storeService.OpenKVStore(ctx) + store := k.storeService.OpenKVStore(sdkCtx) return store.Delete(types.PlanKey()) } // Logger returns a module-specific logger. func (k Keeper) Logger(ctx context.Context) log.Logger { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "Logger")() return sdkCtx.Logger().With("module", "x/"+types.ModuleName) } // GetUpgradePlan returns the currently scheduled Plan if any. If not found it returns // ErrNoUpgradePlanFound, but other errors may be returned if there is an error reading from the store. func (k Keeper) GetUpgradePlan(ctx context.Context) (plan types.Plan, err error) { - store := k.storeService.OpenKVStore(ctx) + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "GetUpgradePlan")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) bz, err := store.Get(types.PlanKey()) if err != nil { return plan, err @@ -437,9 +486,11 @@ func (k Keeper) GetUpgradePlan(ctx context.Context) (plan types.Plan, err error) } // setDone marks this upgrade name as being done so the name can't be reused accidentally -func (k Keeper) setDone(ctx context.Context, name string) error { - store := k.storeService.OpenKVStore(ctx) +func (k Keeper) setDone(ctx context.Context, name string) (err error) { sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "setDone")(&err) + + store := k.storeService.OpenKVStore(sdkCtx) return store.Set(encodeDoneKey(name, sdkCtx.HeaderInfo().Height), []byte{1}) } @@ -450,34 +501,37 @@ func (k Keeper) HasHandler(name string) bool { } // ApplyUpgrade will execute the handler associated with the Plan and mark the plan as done. -func (k Keeper) ApplyUpgrade(ctx context.Context, plan types.Plan) error { +func (k Keeper) ApplyUpgrade(ctx context.Context, plan types.Plan) (err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Meter(ctx).FuncTiming(&sdkCtx, "ApplyUpgrade")(&err) + handler := k.upgradeHandlers[plan.Name] if handler == nil { return fmt.Errorf("ApplyUpgrade should never be called without first checking HasHandler") } - vm, err := k.GetModuleVersionMap(ctx) + vm, err := k.GetModuleVersionMap(sdkCtx) if err != nil { return err } - updatedVM, err := handler(ctx, plan, vm) + updatedVM, err := handler(sdkCtx, plan, vm) if err != nil { return err } - err = k.SetModuleVersionMap(ctx, updatedVM) + err = k.SetModuleVersionMap(sdkCtx, updatedVM) if err != nil { return err } // incremement the protocol version and set it in state and baseapp - nextProtocolVersion, err := k.getProtocolVersion(ctx) + nextProtocolVersion, err := k.getProtocolVersion(sdkCtx) if err != nil { return err } nextProtocolVersion++ - err = k.setProtocolVersion(ctx, nextProtocolVersion) + err = k.setProtocolVersion(sdkCtx, nextProtocolVersion) if err != nil { return err } @@ -489,17 +543,17 @@ func (k Keeper) ApplyUpgrade(ctx context.Context, plan types.Plan) error { // Must clear IBC state after upgrade is applied as it is stored separately from the upgrade plan. // This will prevent resubmission of upgrade msg after upgrade is already completed. - err = k.ClearIBCState(ctx, plan.Height) + err = k.ClearIBCState(sdkCtx, plan.Height) if err != nil { return err } - err = k.ClearUpgradePlan(ctx) + err = k.ClearUpgradePlan(sdkCtx) if err != nil { return err } - return k.setDone(ctx, plan.Name) + return k.setDone(sdkCtx, plan.Name) } // IsSkipHeight checks if the given height is part of skipUpgradeHeights @@ -568,7 +622,7 @@ func (k Keeper) ReadUpgradeInfoFromDisk() (types.Plan, error) { } if upgradeInfo.Height > 0 { - telemetry.SetGaugeWithLabels([]string{"server", "info"}, 1, []metrics.Label{telemetry.NewLabel("upgrade_height", strconv.FormatInt(upgradeInfo.Height, 10))}) + telemetry.SetGaugeWithLabels([]string{"server", "info"}, 1, []hashicorpmetrics.Label{telemetry.NewLabel("upgrade_height", strconv.FormatInt(upgradeInfo.Height, 10))}) } return upgradeInfo, nil @@ -583,3 +637,11 @@ func (k *Keeper) SetDowngradeVerified(v bool) { func (k Keeper) DowngradeVerified() bool { return k.downgradeVerified } + +func (k *Keeper) Meter(ctx context.Context) metrics.Meter { + if k.meter == nil { + k.meter = sdk.UnwrapSDKContext(ctx).Meter().SubMeter(types.ModuleName, metrics.Tag("svc", types.ModuleName)) + } + + return k.meter +} diff --git a/x/upgrade/keeper/migrations.go b/x/upgrade/keeper/migrations.go index 53ef4933e879..a9148d9fa4bc 100644 --- a/x/upgrade/keeper/migrations.go +++ b/x/upgrade/keeper/migrations.go @@ -23,6 +23,7 @@ func NewMigrator(keeper *Keeper) Migrator { // Migrate1to2 migrates from version 1 to 2. func (m Migrator) Migrate1to2(ctx sdk.Context) error { + return migrateDoneUpgradeKeys(ctx, m.keeper.storeService) } diff --git a/x/upgrade/keeper/msg_server.go b/x/upgrade/keeper/msg_server.go index b084011bfdc9..dc0e324104fd 100644 --- a/x/upgrade/keeper/msg_server.go +++ b/x/upgrade/keeper/msg_server.go @@ -27,13 +27,15 @@ var ( ) // SoftwareUpgrade implements the Msg/SoftwareUpgrade Msg service. -func (k msgServer) SoftwareUpgrade(goCtx context.Context, msg *types.MsgSoftwareUpgrade) (*types.MsgSoftwareUpgradeResponse, error) { +func (k msgServer) SoftwareUpgrade(goCtx context.Context, msg *types.MsgSoftwareUpgrade) (meterResult *types.MsgSoftwareUpgradeResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(goCtx) + defer k.Keeper.Meter(goCtx).FuncTiming(&sdkCtx, "SoftwareUpgrade")(&err) + if k.authority != msg.Authority { return nil, errors.Wrapf(types.ErrInvalidSigner, "expected %s got %s", k.authority, msg.Authority) } - ctx := sdk.UnwrapSDKContext(goCtx) - err := k.ScheduleUpgrade(ctx, msg.Plan) + err = k.ScheduleUpgrade(sdkCtx, msg.Plan) if err != nil { return nil, err } @@ -42,12 +44,15 @@ func (k msgServer) SoftwareUpgrade(goCtx context.Context, msg *types.MsgSoftware } // CancelUpgrade implements the Msg/CancelUpgrade Msg service. -func (k msgServer) CancelUpgrade(ctx context.Context, msg *types.MsgCancelUpgrade) (*types.MsgCancelUpgradeResponse, error) { +func (k msgServer) CancelUpgrade(ctx context.Context, msg *types.MsgCancelUpgrade) (meterResult *types.MsgCancelUpgradeResponse, err error) { + sdkCtx := sdk.UnwrapSDKContext(ctx) + defer k.Keeper.Meter(ctx).FuncTiming(&sdkCtx, "CancelUpgrade")(&err) + if k.authority != msg.Authority { return nil, errors.Wrapf(types.ErrInvalidSigner, "expected %s got %s", k.authority, msg.Authority) } - err := k.ClearUpgradePlan(ctx) + err = k.ClearUpgradePlan(sdkCtx) if err != nil { return nil, err }