From 0f9bd9121e035a8ac389073d2f0104569e96a988 Mon Sep 17 00:00:00 2001 From: Xiaoyu Chen Date: Tue, 23 Aug 2022 13:27:47 -0700 Subject: [PATCH 01/30] Cherry pick 0b7909952d98023bbb56ea3fc316177dfd3571d8 --- app/abci.go | 8 +- app/app.go | 98 +++++- app/app_test.go | 8 +- app/apptesting/test_suite.go | 6 +- app/params/config.go | 13 +- app/test_helpers.go | 15 +- cmd/seid/cmd/init.go | 5 +- go.mod | 51 ++- go.sum | 560 +++++++++++++++++++++++++++----- scripts/old_initialize_local.sh | 1 - x/mint/module_test.go | 3 +- x/oracle/types/errors.go | 5 +- x/oracle/types/msgs.go | 163 ++++++++++ 13 files changed, 802 insertions(+), 134 deletions(-) diff --git a/app/abci.go b/app/abci.go index d2f3bdda48..1356e5332d 100644 --- a/app/abci.go +++ b/app/abci.go @@ -23,10 +23,10 @@ func (app *App) EndBlock(req abci.RequestEndBlock) (res abci.ResponseEndBlock) { return app.BaseApp.EndBlock(req) } -func (app *App) CheckTx(req abci.RequestCheckTx) abci.ResponseCheckTx { +func (app *App) CheckTx(ctx context.Context, req *abci.RequestCheckTx) (*abci.ResponseCheckTx, error) { _, span := (*app.tracingInfo.Tracer).Start(app.tracingInfo.TracerContext, "CheckTx") defer span.End() - return app.BaseApp.CheckTx(req) + return app.BaseApp.CheckTx(ctx, req) } func (app *App) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx { @@ -38,7 +38,7 @@ func (app *App) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx { return app.BaseApp.DeliverTx(req) } -func (app *App) Commit() (res abci.ResponseCommit) { +func (app *App) Commit(ctx context.Context) (res *abci.ResponseCommit, err error) { if app.tracingInfo.BlockSpan != nil { defer (*app.tracingInfo.BlockSpan).End() } @@ -46,5 +46,5 @@ func (app *App) Commit() (res abci.ResponseCommit) { defer span.End() app.tracingInfo.TracerContext = context.Background() app.tracingInfo.BlockSpan = nil - return app.BaseApp.Commit() + return app.BaseApp.Commit(ctx) } diff --git a/app/app.go b/app/app.go index 85b796bd7e..2be49b50f7 100644 --- a/app/app.go +++ b/app/app.go @@ -2,6 +2,7 @@ package app import ( "context" + "encoding/json" "fmt" "io" "os" @@ -11,6 +12,7 @@ import ( storetypes "github.com/cosmos/cosmos-sdk/store/types" appparams "github.com/sei-protocol/sei-chain/app/params" + "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/wasmbinding" wasmkeeper "github.com/CosmWasm/wasmd/x/wasm/keeper" @@ -91,7 +93,6 @@ import ( minttypes "github.com/sei-protocol/sei-chain/x/mint/types" "github.com/spf13/cast" abci "github.com/tendermint/tendermint/abci/types" - tmjson "github.com/tendermint/tendermint/libs/json" "github.com/tendermint/tendermint/libs/log" tmos "github.com/tendermint/tendermint/libs/os" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -736,6 +737,9 @@ func New( app.SetAnteHandler(anteHandler) app.SetEndBlocker(app.EndBlocker) + app.SetPrepareProposalHandler(app.PrepareProposalHandler) + app.SetProcessProposalHandler(app.ProcessProposalHandler) + app.SetFinalizeBlocker(app.FinalizeBlocker) // Register snapshot extensions to enable state-sync for wasm. if manager := app.SnapshotManager(); manager != nil { @@ -829,13 +833,103 @@ func (app *App) EndBlocker(ctx sdk.Context, req abci.RequestEndBlock) abci.Respo // InitChainer application update at chain initialization func (app *App) InitChainer(ctx sdk.Context, req abci.RequestInitChain) abci.ResponseInitChain { var genesisState GenesisState - if err := tmjson.Unmarshal(req.AppStateBytes, &genesisState); err != nil { + if err := json.Unmarshal(req.AppStateBytes, &genesisState); err != nil { panic(err) } app.UpgradeKeeper.SetModuleVersionMap(ctx, app.mm.GetVersionMap()) return app.mm.InitGenesis(ctx, app.appCodec, genesisState) } +func (app *App) PrepareProposalHandler(ctx sdk.Context, req *abci.RequestPrepareProposal) (*abci.ResponsePrepareProposal, error) { + return &abci.ResponsePrepareProposal{ + TxRecords: utils.Map(req.Txs, func(tx []byte) *abci.TxRecord { + return &abci.TxRecord{Action: abci.TxRecord_UNMODIFIED, Tx: tx} + }), + }, nil +} + +func (app *App) ProcessProposalHandler(ctx sdk.Context, req *abci.RequestProcessProposal) (*abci.ResponseProcessProposal, error) { + return &abci.ResponseProcessProposal{ + Status: abci.ResponseProcessProposal_ACCEPT, + }, nil +} + +func (app *App) FinalizeBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlock) (*abci.ResponseFinalizeBlock, error) { + events := []abci.Event{} + beginBlockResp := app.BeginBlock(abci.RequestBeginBlock{ + Hash: req.Hash, + ByzantineValidators: utils.Map(req.ByzantineValidators, func(mis abci.Misbehavior) abci.Evidence { + return abci.Evidence(mis) + }), + LastCommitInfo: abci.LastCommitInfo{ + Round: req.DecidedLastCommit.Round, + Votes: utils.Map(req.DecidedLastCommit.Votes, func(vote abci.VoteInfo) abci.VoteInfo { + return abci.VoteInfo{ + Validator: vote.Validator, + SignedLastBlock: vote.SignedLastBlock, + } + }), + }, + Header: tmproto.Header{ + ChainID: app.ChainID, + Height: req.Height, + Time: req.Time, + ProposerAddress: ctx.BlockHeader().ProposerAddress, + }, + }) + events = append(events, beginBlockResp.Events...) + txResults := []*abci.ExecTxResult{} + for _, tx := range req.Txs { + deliverTxResp := app.DeliverTx(abci.RequestDeliverTx{ + Tx: tx, + }) + txResults = append(txResults, &abci.ExecTxResult{ + Code: deliverTxResp.Code, + Data: deliverTxResp.Data, + Log: deliverTxResp.Log, + Info: deliverTxResp.Info, + GasWanted: deliverTxResp.GasWanted, + GasUsed: deliverTxResp.GasUsed, + Events: deliverTxResp.Events, + Codespace: deliverTxResp.Codespace, + }) + } + endBlockResp := app.EndBlock(abci.RequestEndBlock{ + Height: req.Height, + }) + events = append(events, endBlockResp.Events...) + + appHash := app.WriteDeliverStateAndGetWorkingHash() + return &abci.ResponseFinalizeBlock{ + Events: events, + TxResults: txResults, + ValidatorUpdates: utils.Map(endBlockResp.ValidatorUpdates, func(v abci.ValidatorUpdate) abci.ValidatorUpdate { + return abci.ValidatorUpdate{ + PubKey: v.PubKey, + Power: v.Power, + } + }), + ConsensusParamUpdates: &tmproto.ConsensusParams{ + Block: &tmproto.BlockParams{ + MaxBytes: endBlockResp.ConsensusParamUpdates.Block.MaxBytes, + MaxGas: endBlockResp.ConsensusParamUpdates.Block.MaxGas, + }, + Evidence: &tmproto.EvidenceParams{ + MaxAgeNumBlocks: endBlockResp.ConsensusParamUpdates.Evidence.MaxAgeNumBlocks, + MaxAgeDuration: endBlockResp.ConsensusParamUpdates.Evidence.MaxAgeDuration, + MaxBytes: endBlockResp.ConsensusParamUpdates.Block.MaxBytes, + }, + Validator: &tmproto.ValidatorParams{ + PubKeyTypes: endBlockResp.ConsensusParamUpdates.Validator.PubKeyTypes, + }, + Version: &tmproto.VersionParams{ + AppVersion: endBlockResp.ConsensusParamUpdates.Version.AppVersion, + }, + }, + AppHash: appHash, + }, nil +} + // LoadHeight loads a particular height func (app *App) LoadHeight(height int64) error { return app.LoadVersion(height) diff --git a/app/app_test.go b/app/app_test.go index 6e35e34a70..5b8eb2c5d1 100644 --- a/app/app_test.go +++ b/app/app_test.go @@ -1,12 +1,14 @@ package app_test import ( + "context" "testing" "time" "github.com/cosmos/cosmos-sdk/crypto/keys/secp256k1" "github.com/sei-protocol/sei-chain/app" "github.com/stretchr/testify/require" + abci "github.com/tendermint/tendermint/abci/types" ) func TestEmptyBlockIdempotency(t *testing.T) { @@ -16,9 +18,9 @@ func TestEmptyBlockIdempotency(t *testing.T) { for i := 1; i <= 10; i++ { testWrapper := app.NewTestWrapper(t, tm, valPub) - testWrapper.BeginBlock() - testWrapper.EndBlock() - data := testWrapper.App.Commit().Data + res, _ := testWrapper.App.FinalizeBlock(context.Background(), &abci.RequestFinalizeBlock{Height: 1}) + testWrapper.App.Commit(context.Background()) + data := res.AppHash commitData = append(commitData, data) } diff --git a/app/apptesting/test_suite.go b/app/apptesting/test_suite.go index ff7e7a3b70..56f6c6d075 100644 --- a/app/apptesting/test_suite.go +++ b/app/apptesting/test_suite.go @@ -1,6 +1,7 @@ package apptesting import ( + "context" "time" "github.com/cosmos/cosmos-sdk/baseapp" @@ -60,7 +61,10 @@ func (s *KeeperTestHelper) CreateTestContext() sdk.Context { func (s *KeeperTestHelper) Commit() { oldHeight := s.Ctx.BlockHeight() oldHeader := s.Ctx.BlockHeader() - s.App.Commit() + _, err := s.App.Commit(context.Background()) + if err != nil { + panic(err) + } newHeader := tmtypes.Header{Height: oldHeight + 1, ChainID: oldHeader.ChainID, Time: time.Now().UTC()} s.App.BeginBlock(abci.RequestBeginBlock{Header: newHeader}) s.Ctx = s.App.GetBaseApp().NewContext(false, newHeader) diff --git a/app/params/config.go b/app/params/config.go index d8a42f8aae..07a0c81595 100644 --- a/app/params/config.go +++ b/app/params/config.go @@ -21,6 +21,8 @@ const ( Bech32PrefixAccAddr = "sei" ) +var UnsafeBypassCommitTimeoutOverride bool = true + var ( // Bech32PrefixAccPub defines the Bech32 prefix of an account's public key. Bech32PrefixAccPub = Bech32PrefixAccAddr + "pub" @@ -77,8 +79,7 @@ func SetAddressPrefixes() { } func SetTendermintConfigs(config *tmcfg.Config) { - config.P2P.MaxNumInboundPeers = 100 - config.P2P.MaxNumOutboundPeers = 100 + config.P2P.MaxConnections = 200 config.P2P.SendRate = 20480000 config.P2P.RecvRate = 20480000 config.P2P.MaxPacketMsgPayloadSize = 10240 @@ -88,8 +89,8 @@ func SetTendermintConfigs(config *tmcfg.Config) { config.Mempool.MaxTxsBytes = 10737418240 config.Mempool.MaxTxBytes = 2048576 // Consensus Configs - config.Consensus.TimeoutPrevote = 250 * time.Millisecond - config.Consensus.TimeoutPrecommit = 250 * time.Millisecond - config.Consensus.TimeoutCommit = 250 * time.Millisecond - config.Consensus.SkipTimeoutCommit = true + config.Consensus.UnsafeProposeTimeoutOverride = 250 * time.Millisecond + config.Consensus.UnsafeVoteTimeoutOverride = 250 * time.Millisecond + config.Consensus.UnsafeCommitTimeoutOverride = 250 * time.Millisecond + config.Consensus.UnsafeBypassCommitTimeoutOverride = &UnsafeBypassCommitTimeoutOverride } diff --git a/app/test_helpers.go b/app/test_helpers.go index 81f0e07e8e..7d654a68dd 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -1,6 +1,7 @@ package app import ( + "context" "encoding/json" "os" "testing" @@ -152,13 +153,16 @@ func Setup(isCheckTx bool) *App { panic(err) } - app.InitChain( - abci.RequestInitChain{ + _, err = app.InitChain( + context.Background(), &abci.RequestInitChain{ Validators: []abci.ValidatorUpdate{}, ConsensusParams: simapp.DefaultConsensusParams, AppStateBytes: stateBytes, }, ) + if err != nil { + panic(err) + } } return app @@ -192,13 +196,16 @@ func SetupTestingAppWithLevelDb(isCheckTx bool) (*App, func()) { panic(err) } - app.InitChain( - abci.RequestInitChain{ + _, err = app.InitChain( + context.Background(), &abci.RequestInitChain{ Validators: []abci.ValidatorUpdate{}, ConsensusParams: simapp.DefaultConsensusParams, AppStateBytes: stateBytes, }, ) + if err != nil { + panic(err) + } } cleanupFn := func() { diff --git a/cmd/seid/cmd/init.go b/cmd/seid/cmd/init.go index 42cd2e2a59..c7d9d65856 100644 --- a/cmd/seid/cmd/init.go +++ b/cmd/seid/cmd/init.go @@ -141,7 +141,10 @@ func InitCmd(mbm module.BasicManager, defaultNodeHome string) *cobra.Command { toPrint := newPrintInfo(config.Moniker, chainID, nodeID, "", appState) - tmcfg.WriteConfigFile(filepath.Join(config.RootDir, "config", "config.toml"), config) + err = tmcfg.WriteConfigFile(filepath.Join(config.RootDir, "config", "config.toml"), config) + if err != nil { + panic(err) + } return displayInfo(toPrint) }, diff --git a/go.mod b/go.mod index b6c2f1e792..6a55430874 100644 --- a/go.mod +++ b/go.mod @@ -15,10 +15,10 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/pkg/errors v0.9.1 github.com/regen-network/cosmos-proto v0.3.1 - github.com/spf13/cast v1.4.1 + github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.4.0 - github.com/stretchr/testify v1.7.1 - github.com/tendermint/tendermint v0.34.19 + github.com/stretchr/testify v1.7.2 + github.com/tendermint/tendermint v0.37.0-dev github.com/tendermint/tm-db v0.6.8-0.20220519162814-e24b96538a12 go.opentelemetry.io/otel v1.6.3 go.opentelemetry.io/otel/exporters/jaeger v1.6.3 @@ -33,11 +33,9 @@ require ( require ( filippo.io/edwards25519 v1.0.0-beta.2 // indirect github.com/99designs/keyring v1.1.6 // indirect - github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d // indirect - github.com/Workiva/go-datastructures v1.0.53 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/bgentry/speakeasy v0.1.0 // indirect - github.com/btcsuite/btcd v0.22.0-beta // indirect + github.com/btcsuite/btcd v0.22.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.1.2 // indirect github.com/coinbase/rosetta-sdk-go v0.7.0 // indirect @@ -47,6 +45,7 @@ require ( github.com/cosmos/iavl v0.17.3 // indirect github.com/cosmos/ledger-cosmos-go v0.11.1 // indirect github.com/cosmos/ledger-go v0.9.2 // indirect + github.com/creachadair/taskgroup v0.3.2 // indirect github.com/danieljoos/wincred v1.0.2 // indirect github.com/davecgh/go-spew v1.1.1 // indirect github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f // indirect @@ -55,8 +54,7 @@ require ( github.com/dustin/go-humanize v1.0.1-0.20200219035652-afde56e7acac // indirect github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b // indirect github.com/felixge/httpsnoop v1.0.1 // indirect - github.com/fsnotify/fsnotify v1.5.1 // indirect - github.com/ghodss/yaml v1.0.0 // indirect + github.com/fsnotify/fsnotify v1.5.4 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.0 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect @@ -69,16 +67,14 @@ require ( github.com/golang/snappy v0.0.3 // indirect github.com/google/btree v1.0.1 // indirect github.com/google/flatbuffers v1.12.1 // indirect - github.com/google/go-cmp v0.5.8 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/orderedcode v0.0.1 // indirect + github.com/google/uuid v1.3.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect + github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/gtank/merlin v0.1.1 // indirect - github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/hashicorp/hcl v1.0.0 // indirect @@ -87,35 +83,33 @@ require ( github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect - github.com/klauspost/compress v1.13.6 // indirect - github.com/lib/pq v1.10.4 // indirect + github.com/klauspost/compress v1.15.1 // indirect + github.com/lib/pq v1.10.6 // indirect github.com/libp2p/go-buffer-pool v0.0.2 // indirect github.com/magiconair/properties v1.8.6 // indirect github.com/mattn/go-isatty v0.0.14 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect - github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 // indirect - github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/mapstructure v1.4.3 // indirect + github.com/mitchellh/mapstructure v1.5.0 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/pelletier/go-toml v1.9.4 // indirect - github.com/pelletier/go-toml/v2 v2.0.0-beta.8 // indirect + github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pelletier/go-toml/v2 v2.0.1 // indirect github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_golang v1.12.1 // indirect + github.com/prometheus/client_golang v1.12.2 // indirect github.com/prometheus/client_model v0.2.0 // indirect - github.com/prometheus/common v0.32.1 // indirect + github.com/prometheus/common v0.34.0 // indirect github.com/prometheus/procfs v0.7.3 // indirect github.com/rakyll/statik v0.1.7 // indirect - github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 // indirect github.com/rs/cors v1.8.2 // indirect - github.com/rs/zerolog v1.26.0 // indirect - github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa // indirect + github.com/rs/zerolog v1.26.1 // indirect + github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/spf13/afero v1.8.2 // indirect github.com/spf13/jwalterweatherman v1.1.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.11.0 // indirect - github.com/subosito/gotenv v1.2.0 // indirect + github.com/spf13/viper v1.12.0 // indirect + github.com/subosito/gotenv v1.3.0 // indirect github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca // indirect github.com/tendermint/btcd v0.1.1 // indirect github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 // indirect @@ -125,8 +119,9 @@ require ( go.opencensus.io v0.23.0 // indirect golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e // indirect + golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 // indirect golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d // indirect - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 // indirect golang.org/x/text v0.3.7 // indirect gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect @@ -134,7 +129,9 @@ require ( ) replace ( + github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.3 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/keybase/go-keychain => github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 + github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.3 google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index 2a51d05fe9..51146dfa3f 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,6 @@ +4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= +bitbucket.org/creachadair/shell v0.0.6/go.mod h1:8Qqi/cYk7vPnsOePHroKXDJYmb5x7ENhtiFtfZq8K+M= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= @@ -12,6 +14,7 @@ cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6 cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= +cloud.google.com/go v0.60.0/go.mod h1:yw2G51M9IfRboUH61Us8GqCeF1PzPblB823Mn2q2eAU= cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= @@ -27,27 +30,36 @@ cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aD cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.98.0/go.mod h1:ua6Ush4NALrHk5QXDWnjvZHN93OuF0HfuEPq9I1X0cM= cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= cloud.google.com/go/firestore v1.6.1/go.mod h1:asNXNOzBdyVQmEU+ggO8UPodTkEVFW5Qx+rwHnAz+EY= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/pubsub v1.5.0/go.mod h1:ZEwJccE3z93Z2HWvstpri00jOg7oO4UZDtKhwDwqF0w= +cloud.google.com/go/spanner v1.7.0/go.mod h1:sd3K2gZ9Fd0vMPLXzeCrF6fq4i63Q7aTLW/lBIfBkIk= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +contrib.go.opencensus.io/exporter/stackdriver v0.13.4/go.mod h1:aXENhDJ1Y4lIg4EUaVTwzvYETVNZk10Pu26tevFKLUc= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-beta.2 h1:/BZRNzm8N4K4eWfK28dL4yescorxtO7YG1yun8fy+pI= filippo.io/edwards25519 v1.0.0-beta.2/go.mod h1:X+pm78QAUPtFLi1z9PYIlS/bdDnvbCOGKtZ+ACWEf7o= @@ -55,13 +67,14 @@ github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMb github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= github.com/99designs/keyring v1.1.6 h1:kVDC2uCgVwecxCk+9zoCt2uEL6dt+dfVzMvGgnVcIuM= github.com/99designs/keyring v1.1.6/go.mod h1:16e0ds7LGQQcT59QqkTg72Hh5ShM51Byv5PEmW6uoRU= +github.com/Antonboom/errname v0.1.6/go.mod h1:7lz79JAnuoMNDAWE9MeeIr1/c/VpSUWatBv2FH9NYpI= +github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= github.com/Azure/azure-pipeline-go v0.2.1/go.mod h1:UGSo8XybXnIGZ3epmeBw7Jdz+HiUVpqIlpz/HKHylF4= github.com/Azure/azure-pipeline-go v0.2.2/go.mod h1:4rQ/NZncSvGqNkkOsNpOU1tgoNuIlp9AfUH5G1tvCHc= github.com/Azure/azure-sdk-for-go/sdk/azcore v0.19.0/go.mod h1:h6H6c8enJmmocHUbLiiGY6sx7f9i+X3m1CHdd5c6Rdw= github.com/Azure/azure-sdk-for-go/sdk/azidentity v0.11.0/go.mod h1:HcM1YX14R7CJcghJGOYCgdezslRSVzqwLf/q+4Y2r/0= github.com/Azure/azure-sdk-for-go/sdk/internal v0.7.0/go.mod h1:yqy467j36fJxcRV2TzfVZ1pCb5vxm4BtZPUdYWe/Xo8= github.com/Azure/azure-storage-blob-go v0.7.0/go.mod h1:f9YQKtsG1nMisotuTPpO0tjNuEjKRYAcJU8/ydDI++4= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= @@ -75,10 +88,9 @@ github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v0.4.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/toml v1.1.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= -github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= github.com/CosmWasm/wasmd v0.27.0 h1:GYctl+sqCa8zpDTTUhX0/nf/4ej9J7x/88UmKH9V6Nc= github.com/CosmWasm/wasmd v0.27.0/go.mod h1:iiHoIuoCjR7kV4cS7PPt4NmyOXv+V9kohRQBsFIreMU= github.com/CosmWasm/wasmvm v1.0.0 h1:NRmnHe3xXsKn2uEcB1F5Ha323JVAhON+BI6L177dlKc= @@ -87,28 +99,30 @@ github.com/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.4.1/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= github.com/DataDog/zstd v1.4.5/go.mod h1:1jcaCB/ufaK+sKp1NBhlGmpz41jOoPQ35bpF36t7BBo= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.1.0/go.mod h1:LGOGuvEgCfCQsy3JF2tRmpGDpzA53iZfyGEWSPwQ6/4= github.com/HdrHistogram/hdrhistogram-go v1.1.0/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/HdrHistogram/hdrhistogram-go v1.1.2/go.mod h1:yDgFjdqOqDEKOvasDdhWNXYg9BVp4O+o5f6V/ehm6Oo= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= +github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= +github.com/Masterminds/semver v1.4.2/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/sprig v2.15.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= +github.com/Masterminds/sprig v2.22.0+incompatible/go.mod h1:y6hNFY5UBTIWBxnzTeuNhlNS5hqE0NB0E6fgfo2Br3o= github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY= github.com/Microsoft/go-winio v0.5.1/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/OpenPeeDeeP/depguard v1.1.0/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.5.7/go.mod h1:ptDBkNMQI4RtmVo8VS/XwRY6RoTu1dAWCbrk+6WsEM8= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/Workiva/go-datastructures v1.0.52/go.mod h1:Z+F2Rca0qCsVYDS8z7bAGm8f3UkzuWYS/oBZz5a7VVA= -github.com/Workiva/go-datastructures v1.0.53 h1:J6Y/52yX10Xc5JjXmGtWoSSxs3mZnGSaq37xZZh7Yig= -github.com/Workiva/go-datastructures v1.0.53/go.mod h1:1yZL+zfsztete+ePzZz/Zb1/t5BnDuE2Ya2MMGhzP6A= github.com/Zilliqa/gozilliqa-sdk v1.2.1-0.20201201074141-dd0ecada1be6/go.mod h1:eSYp2T6f0apnuW8TzhV3f6Aff2SE8Dwio++U4ha4yEM= -github.com/adlio/schema v1.1.13/go.mod h1:L5Z7tw+7lRK1Fnpi/LT/ooCP1elkXn0krMWBQHUhEDE= github.com/adlio/schema v1.3.0 h1:eSVYLxYWbm/6ReZBCkLw4Fz7uqC+ZNoPvA39bOwi52A= github.com/adlio/schema v1.3.0/go.mod h1:51QzxkpeFs6lRY11kPye26IaFPOV+HqEj01t5aXXKfs= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= @@ -119,8 +133,13 @@ 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/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= github.com/allegro/bigcache v1.2.1-0.20190218064605-e24eb225f156/go.mod h1:Cb/ax3seSYIx7SuZdm2G2xzfwmv3TPSk2ucNfQESPXM= +github.com/andybalholm/brotli v1.0.2/go.mod h1:loMXtMfwqflxFJPmdbJO0a3KNoPuLBgiu3qAvBg8x/Y= +github.com/andybalholm/brotli v1.0.3/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= +github.com/antihax/optional v0.0.0-20180407024304-ca021399b1a6/go.mod h1:V8iCPQYkqmusNa815XgQio277wI47sdRh1dUOLdyC6Q= github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= +github.com/aokoli/goutils v1.0.1/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ= github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= github.com/aristanetworks/goarista v0.0.0-20170210015632-ea17b1a17847/go.mod h1:D/tb0zPVXnP7fmsLZjtdUhSsumbK/ij54UXjjVgMGxQ= @@ -133,15 +152,21 @@ github.com/armon/go-metrics v0.3.10/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= +github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= +github.com/aws/aws-sdk-go v1.23.20/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.25.37/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.25.48/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= +github.com/aws/aws-sdk-go v1.36.30/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= github.com/aws/aws-sdk-go-v2 v1.9.1/go.mod h1:cK/D0BBs0b/oWPIcX/Z/obahJK1TT7IPVjy53i/mX/4= github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1/go.mod h1:CM+19rL1+4dFWnOQKwDc7H1KwXTz+h61oUSHyhV0b3o= github.com/aws/smithy-go v1.8.0/go.mod h1:SObp3lf9smib00L/v3U2eAKG8FyQ7iLrJnQiAmR5n+E= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= @@ -149,14 +174,20 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r github.com/bgentry/speakeasy v0.1.0 h1:ByYyxL9InA1OWqxJqqp2A5pYHUrCiAL6K3J+LKSsQkY= github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bits-and-blooms/bitset v1.2.0/go.mod h1:gIdJ4wp64HaoK2YrL1Q5/N7Y16edYb8uY+O0FJTyyDA= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= +github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= github.com/btcsuite/btcd v0.0.0-20171128150713-2e60448ffcc6/go.mod h1:Dmm/EzmjnCiweXmzRIAiUWCInVmPgjkzgv5k4tVyXiQ= github.com/btcsuite/btcd v0.0.0-20190115013929-ed77733ec07d/go.mod h1:d3C0AkH6BRcvO8T0UEPu53cnw4IbV63x1bEjildYhO0= github.com/btcsuite/btcd v0.0.0-20190315201642-aa6e0f35703c/go.mod h1:DrZx5ec/dmnfpw9KyYoQyYo7d0KEvTkk/5M/vbZjAr8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.21.0-beta/go.mod h1:ZSWyehm27aAuS9bvkATT+Xte3hjHZ+MRgMY/8NJ7K94= -github.com/btcsuite/btcd v0.22.0-beta h1:LTDpDKUM5EeOFBPM8IXpinEcmZ6FWfNZbE3lfrfdnWo= -github.com/btcsuite/btcd v0.22.0-beta/go.mod h1:9n5ntfhhHQBIhUvlhDvD3Qg6fRUj4jkN0VB8L8svzOA= +github.com/btcsuite/btcd v0.22.1 h1:CnwP9LM/M9xuRrGSCGeMVs9iv09uMqwsVX7EeIpgV2c= +github.com/btcsuite/btcd v0.22.1/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= github.com/btcsuite/btcutil v0.0.0-20180706230648-ab6388e0c60a/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v0.0.0-20190207003914-4c204d697803/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= @@ -171,6 +202,8 @@ github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/bufbuild/buf v1.4.0/go.mod h1:mwHG7klTHnX+rM/ym8LXGl7vYpVmnwT96xWoRB4H5QI= +github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/casbin/casbin/v2 v2.37.0/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= @@ -184,6 +217,8 @@ github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghf github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220316182200-5cad0b5181d4/go.mod h1:W8EnPSQ8Nv4fUjc/v1/8tHFqhuOJXnRub0dTfuAQktU= github.com/checkpoint-restore/go-criu/v5 v5.0.0/go.mod h1:cfwC0EG7HMUenopBsUf9d89JlCLQIfgVcNsNN0t6T2M= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= @@ -207,25 +242,21 @@ github.com/confio/ics23/go v0.6.6/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4ur github.com/confio/ics23/go v0.7.0 h1:00d2kukk7sPoHWL4zZBZwzxnpA2pec1NPdwbSokJ5w8= github.com/confio/ics23/go v0.7.0/go.mod h1:E45NqnlpxGnpfTWL/xauN7MRwEE28T4Dd4uraToOaKg= github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ= -github.com/containerd/continuity v0.0.0-20190827140505-75bee3e2ccb6/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= github.com/containerd/continuity v0.2.1 h1:/EeEo2EtN3umhbbgCveyjifoMYg0pS+nMMEemaYw634= github.com/containerd/continuity v0.2.1/go.mod h1:wCYX+dRqZdImhGucXOqTQn05AhX6EUDaGEMUzTFFpLg= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= +github.com/coreos/go-systemd v0.0.0-20190620071333-e64a0ec8b42a/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cosmos/btcutil v1.0.4 h1:n7C2ngKXo7UC9gNyMNLbzqz7Asuf+7Qv4gnX/rOdQ44= github.com/cosmos/btcutil v1.0.4/go.mod h1:Ffqc8Hn6TJUdDgHBwIZLtrLQC1KdJ9jGJl/TvgUaxbU= -github.com/cosmos/cosmos-sdk v0.45.4 h1:eStDAhJdMY8n5arbBRe+OwpNeBSunxSBHp1g55ulfdA= -github.com/cosmos/cosmos-sdk v0.45.4/go.mod h1:WOqtDxN3eCCmnYLVla10xG7lEXkFjpTaqm2a2WasgCc= -github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= @@ -243,17 +274,25 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/creachadair/atomicfile v0.2.6/go.mod h1:BRq8Une6ckFneYXZQ+kO7p1ZZP3I2fzVzf28JxrIkBc= +github.com/creachadair/command v0.0.0-20220426235536-a748effdf6a1/go.mod h1:bAM+qFQb/KwWyCc9MLC4U1jvn3XyakqP5QRkds5T6cY= +github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= +github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= +github.com/creachadair/tomledit v0.0.22/go.mod h1:cIu/4x5L855oSRejIqr+WRFh+mv9g4fWLiUFaApYn/Y= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= +github.com/daixiang0/gci v0.3.3/go.mod h1:1Xr2bxnQbDxCqqulUOv8qpGqkgRw9RSCGGjEC2LjF8o= github.com/danieljoos/wincred v1.0.2 h1:zf4bhty2iLuwgjgpraD2E9UbvO+fe54XXGJbOwe23fU= github.com/danieljoos/wincred v1.0.2/go.mod h1:SnuYRW9lp1oJrZX/dXJqr0cPK5gYXqx3EJbmjhLdK9U= +github.com/davecgh/go-spew v0.0.0-20161028175848-04cdfd42973b/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/deckarep/golang-set v0.0.0-20180603214616-504e848d77ea/go.mod h1:93vsz/8Wt4joVM7c2AVqh+YRMiUSc14yDtF28KmMOgQ= github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= github.com/denisenkom/go-mssqldb v0.12.0/go.mod h1:iiK0YP1ZeepvmBQk/QpLEhhTNJgfzrpArPY/aFvc9yU= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f h1:U5y3Y5UE0w7amNe7Z5G/twsBW0KEalRQXZzf8ufSh9I= github.com/desertbit/timer v0.0.0-20180107155436-c41aec40b27f/go.mod h1:xH/i4TFMt8koVQZ6WFms69WAsDWr2XsYL3Hkl7jkoLE= @@ -291,23 +330,30 @@ github.com/edsrzf/mmap-go v0.0.0-20160512033002-935e0e8a636c/go.mod h1:YO35OhQPt github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.10.1/go.mod h1:AY7fTTXNdv/aJ2O5jwpxAPOWUZ7hQAEvzN5Pf27BkQQ= +github.com/envoyproxy/protoc-gen-validate v0.0.14/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v0.6.2/go.mod h1:2t7qjJNvHPx8IjnBOzl9E9/baC+qXE/TeeyBRzgJDws= +github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= github.com/ethereum/go-ethereum v1.9.25/go.mod h1:vMkFiYLHI4tgPw4k2j4MHKoovchFE8plZ0M9VMk4/oM= +github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= github.com/facebookgo/ensure v0.0.0-20160127193407-b4ab57deab51/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= github.com/facebookgo/subset v0.0.0-20150612182917-8dac2c3c4870/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.3.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.12.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/firefart/nonamedreturns v1.0.1/go.mod h1:D3dpIBojGGNh5UfElmwPu73SwDCm+VKhHYqwlNOk2uQ= github.com/fjl/memsize v0.0.0-20180418122429-ca190fb6ffbc/go.mod h1:VvhXpOYNQvB+uIk2RvXzuaQtkQJzzIx6lSBe1xv7hi0= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= @@ -316,17 +362,23 @@ github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVB github.com/franela/goblin v0.0.0-20210519012713-85d372ac71e2/go.mod h1:VzmDKDJVZI3aJmnRI9VjAn9nJ8qPPsN1fqzr9dqInIo= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k= +github.com/frankban/quicktest v1.14.2/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= +github.com/frankban/quicktest v1.14.3 h1:FJKSZTDHjyhriyC81FLQ0LY93eSai0ZyR/ZIkd3ZUKE= +github.com/frankban/quicktest v1.14.3/go.mod h1:mgiwOwqx65TmIk1wJ6Q7wvnVMocbUorkibMOrVTHZps= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI= +github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= +github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= +github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= +github.com/go-critic/go-critic v0.6.3/go.mod h1:c6b3ZP1MQ7o6lPR7Rv3lEf7pYQUmAcx8ABHgdZCQt/k= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -349,6 +401,7 @@ github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbV github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= @@ -356,12 +409,25 @@ github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD87 github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-redis/redis v6.15.8+incompatible/go.mod h1:NAIEuMOZ/fxfXJIrKDQDz8wamY7mA7PouImQ2Jvg6kA= github.com/go-sourcemap/sourcemap v2.1.2+incompatible/go.mod h1:F8jJfvm2KbVjc5NqelyYJmf/v5J0dwNLS2mL4sNA1Jg= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= +github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.0/go.mod h1:vrgyG+5Bxrnz4MZWPF+pI4R8h3qKRjjyvV/DSez4WVQ= +github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= +github.com/go-toolsmith/astequal v1.0.1/go.mod h1:4oGA3EZXTVItV/ipGiOx7NWkY5veFfcsOJVS2YxltLw= +github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= +github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= github.com/go-zookeeper/zk v1.0.2/go.mod h1:nOB03cncLtlp4t+UAkGSV+9beXP/akpekBwL+UX1Qcw= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee h1:s+21KNqlpePfkah2I+gwHF8xmJWRjooY+5248k6m4A0= github.com/gobwas/httphead v0.0.0-20180130184737-2c6c146eadee/go.mod h1:L0fX3K22YWvt/FAX9NnzrNzcI4wNYi9Yku4O0LKYflo= github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= @@ -371,6 +437,8 @@ github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/E github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= +github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= +github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= github.com/gogo/gateway v1.1.0 h1:u0SuhL9+Il+UbjM9VIE3ntfRujKbvVpFvNB4HbjeVQ0= github.com/gogo/gateway v1.1.0/go.mod h1:S7rR8FRQyG3QFESeSv4l2WnsyzlCLG0CzBbUUo/mbic= github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg= @@ -396,6 +464,7 @@ github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71 github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= +github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.0/go.mod h1:Qd/q+1AKNOZr9uGQzbzCmRO6sUih6GTPZv6a1/R87v0= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -420,10 +489,22 @@ github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEW github.com/golang/snappy v0.0.3-0.20201103224600-674baa8c7fc3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3 h1:fHPg5GQYlCeLIPB9BZqMVR5nR9A+IM5zcgeTdjMYmLA= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= +github.com/golangci/golangci-lint v1.46.0/go.mod h1:IJpcNOUfx/XLRwE95FHQ6QtbhYwwqcm0H5QkwUfF4ZE= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20210930125155-c22e5001d4f2/go.mod h1:LK+zW4MpyytAWQRz0M4xnzEk50lSvqDQKfx304apFkY= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4= github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= +github.com/google/certificate-transparency-go v1.0.21/go.mod h1:QeJfpSbVSfYc7RgB3gJFj9cbuQMMchQxrWXz8Ruopmg= +github.com/google/certificate-transparency-go v1.1.1/go.mod h1:FDKqPvSXawb2ecErVRrD+nfy23RCzyl7eqVCEmlT1Zs= github.com/google/flatbuffers v1.12.1 h1:MVlul7pQNoDzWRLTw5imwYsl+usrS1TXG2H4jg6ImGw= github.com/google/flatbuffers v1.12.1/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -458,25 +539,38 @@ github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= +github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= +github.com/google/trillian v1.3.11/go.mod h1:0tPraVHrSDkA3BO6vKX67zgLXs6SsOAbHEivX+9mPgw= +github.com/google/uuid v0.0.0-20161128191214-064e2069ce9c/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= +github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= +github.com/gordonklaus/ineffassign v0.0.0-20200309095847-7953dde2c7bf/go.mod h1:cuNKsD1zp2v6XfE/orVX2QE1LC+i254ceGcVeDT3pTU= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gorhill/cronexpr v0.0.0-20180427100037-88b0669f7d75/go.mod h1:g2644b03hfBX9Ov0ZBDgXXens4rxSxmqFBbhvKv2yVA= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= @@ -488,36 +582,42 @@ github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1-0.20190629185528-ae1634f6a989/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= +github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.4.1/go.mod h1:18U/DLpRgIUd459wGxVHE0fRgmo1UgHDcbw7F5idXu0= +github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= +github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= +github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= +github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gostaticanalysis/testutil v0.4.0/go.mod h1:bLIoPefWXrRi/ssLFWX1dx7Repi5x3CuviD3dgAZaBU= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= github.com/graph-gophers/graphql-go v0.0.0-20191115155744-f33e81362277/go.mod h1:9CQHMSxwO4MprSdzoIEobiHpoLtHm77vfxsvsIN5Vuc= +github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.2.2/go.mod h1:EaizFBKfUKtMIF5iaDEhniwNedqGo9FuLFzppDr3uwI= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 h1:+9834+KizmvFV7pXQGSXQTsaWhq2GjuNUt0aUU0YBYw= github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.8.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= +github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/gtank/merlin v0.1.1-0.20191105220539-8318aed1a79f/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/merlin v0.1.1 h1:eQ90iG7K9pOhtereWsmyRJ6RAwcP4tHTDBHXNg+u5is= -github.com/gtank/merlin v0.1.1/go.mod h1:T86dnYJhcGOh5BjZFCJWTDeTK7XW8uE+E21Cy/bIQ+s= -github.com/gtank/ristretto255 v0.1.2 h1:JEqUCPA1NvLq5DwYtuzigd7ss8fwbYay9fi4/5uMzcc= -github.com/gtank/ristretto255 v0.1.2/go.mod h1:Ph5OpO6c7xKUGROZfWVLiJf9icMDwUeIvY4OmlYW69o= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/api v1.10.1/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= +github.com/hashicorp/consul/api v1.11.0/go.mod h1:XjsvQN+RJGWI2TWy1/kqaE16HrR2J/FWgkYjdZQsX9M= github.com/hashicorp/consul/api v1.12.0/go.mod h1:6pVBMo0ebnYdt2S3H87XhekM/HHrUoTD2XXb/VrZVy0= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/consul/sdk v0.8.0/go.mod h1:GBvyrGALthsZObzUGsfgHZQDXjg4lOjagTIwIR1vPms= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -527,12 +627,14 @@ github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/S github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v0.16.2/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-hclog v1.0.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs= github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= @@ -542,6 +644,8 @@ github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/b github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go-version v1.4.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= @@ -559,10 +663,14 @@ github.com/hashicorp/memberlist v0.3.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOn github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/serf v0.9.5/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk= github.com/hashicorp/serf v0.9.6/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= +github.com/hashicorp/serf v0.9.7/go.mod h1:TXZNMjZQijwlDvp+r0b63xZ45H7JmCmgg4gpTwn9UV4= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 h1:uUjLpLt6bVvZ72SQc/B4dXcPBw4Vgd7soowdRl52qEM= github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87/go.mod h1:XGsKKeXxeRr95aEOgipvluMPlgjr7dGlk9ZTWOjcUcg= +github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= github.com/holiman/uint256 v1.1.1/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo= +github.com/huandu/xstrings v1.2.0/go.mod h1:DvyZB1rfVYsBIigL8HwpZgxHwXozlTgGqn63UyNX5k4= github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= github.com/hudl/fargo v1.4.0/go.mod h1:9Ai6uvFy5fQNq6VPKtg+Ceq1+eTY4nKUlR2JElEOcDo= github.com/huin/goupnp v1.0.0/go.mod h1:n9v9KO1tAxYH82qOn+UTIFQDmx5n1Zxd/ClZDMX7Bnc= @@ -570,6 +678,8 @@ github.com/huin/goutil v0.0.0-20170803182201-1ca381bf3150/go.mod h1:PpLOETDnJ0o3 github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/imdario/mergo v0.3.4/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/improbable-eng/grpc-web v0.14.1 h1:NrN4PY71A6tAz2sKDvC5JCauENWp0ykG8Oq1H3cpFvw= github.com/improbable-eng/grpc-web v0.14.1/go.mod h1:zEjGHa8DAlkoOXmswrNvhUGEYQA9UI7DhrGeHR1DMGU= github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM= @@ -578,16 +688,30 @@ github.com/influxdata/influxdb v1.2.3-0.20180221223340-01288bdb0883/go.mod h1:qZ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= github.com/jackpal/go-nat-pmp v1.0.2-0.20160603034137-1fa385a6f458/go.mod h1:QPH045xvCAeXUZOxsnwmrtiCoxIr9eob+4orBN1SBKc= +github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e/go.mod h1:G1CVv03EnqU1wYL2dFwXxW2An0az9JTl/ZsqXQeBlkU= github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= -github.com/jhump/protoreflect v1.9.0 h1:npqHz788dryJiR/l6K/RUQAyh2SwV91+d1dnh4RjO9w= +github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= +github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= +github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= +github.com/jhump/protoreflect v1.6.1/go.mod h1:RZQ/lnuN+zqeRVpQigTwO6o0AJUkxbnSnpuG7toUTG4= +github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= +github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753 h1:uFlcJKZPLQd7rmOY/RrvBuUaYmAFnlFHKLivhO6cOy8= +github.com/jhump/protoreflect v1.12.1-0.20220417024638-438db461d753/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= +github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= github.com/jmhodges/levigo v1.0.0 h1:q5EC36kV79HWeTBWsod3mG11EgStG3qArTKcvlksN1U= github.com/jmhodges/levigo v1.0.0/go.mod h1:Q6Qx+uH3RAqyK4rFQroq9RL7mdkABMcfhEI+nNuzMJQ= +github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= +github.com/jonboulle/clockwork v0.2.0/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= +github.com/josharian/txtarfs v0.0.0-20210218200122-0702f000015a/go.mod h1:izVPOvVRsHiKkeGCT6tYBNWyDVuzj9wAaBb5R9qamfw= github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= @@ -601,48 +725,72 @@ github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHm github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= +github.com/juju/ratelimit v1.0.1/go.mod h1:qapgC/Gy+xNh9UxzV13HGGl/6UXNN+ct+vwSgWNm/qk= github.com/julienschmidt/httprouter v1.1.1-0.20170430222011-975b5c4c7c21/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= +github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/karalabe/usb v0.0.0-20190919080040-51dc0efba356/go.mod h1:Od972xHfMJowv7NGVDiWVxk2zxnWgjLlJzE+F4F7AGU= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/errcheck v1.6.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.13.4/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc= +github.com/klauspost/compress v1.13.5/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/compress v1.15.1 h1:y9FcTHGyrebwfP0ZZqFiaxTaiDnUrGkJkI+f583BL1A= +github.com/klauspost/compress v1.15.1/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= +github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.6.2/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.3/go.mod h1:vLydzomDFpk7yu5UX02RmP0H8QfRPOV/oFhWN85Mjb4= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk= +github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= +github.com/letsencrypt/pkcs11key/v4 v4.0.0/go.mod h1:EFUvBDay26dErnNb70Nd0/VW3tJiIbETBPTl9ATXQag= +github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.9.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lib/pq v1.10.6 h1:jbk+ZieJ0D7EVGJYpL9QTz7/YW6UHbmdnZWYyK5cdBs= +github.com/lib/pq v1.10.6/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.0.2 h1:QNK2iAFa8gjAe1SPz6mHSMuCcjs+X1wlHzeOSqcmlfs= github.com/libp2p/go-buffer-pool v0.0.2/go.mod h1:MvaB6xw5vOrDl8rYZGLFdKAuk/hRoRZd1Vi32+RXyFM= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasjones/reggen v0.0.0-20180717132126-cdb49ff09d77/go.mod h1:5ELEyG+X8f+meRWHuqUOewBOhvHkl7M76pdGEansxW4= +github.com/lufeee/execinquery v1.0.0/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= +github.com/lufia/plan9stats v0.0.0-20211012122336-39d0f177ccd0/go.mod h1:zJYVVT2jmtg6P3p1VtQj7WsuWi/y4VnjVBn7F8KPB3I= github.com/lyft/protoc-gen-star v0.5.3/go.mod h1:V0xaHgaf5oCCqmcxYcWiDfTiKsZsRc87/1qhoTACD8w= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= github.com/magiconair/properties v1.8.6 h1:5ibWZ6iY0NctNGWo87LalDlEZ6R41TqbbDamhfG/Qzo= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/maratori/testpackage v1.0.1/go.mod h1:ddKdw+XG0Phzhx8BFDTKgpWP4i7MpApTE5fXSKAqwDU= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= +github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.0/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= @@ -664,24 +812,32 @@ github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27k github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= +github.com/mattn/go-runewidth v0.0.6/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= +github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/mattn/go-sqlite3 v1.14.9/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/dots v0.0.0-20210922191527-e955255bf517/go.mod h1:KQ7+USdGKfpPjXk4Ga+5XxQM4Lm4e3gAogrreFAYpOg= +github.com/mgechev/revive v1.2.1/go.mod h1:+Ro3wqY4vakcYNtkBWdZC7dBg1xSB6sp054wWwmeFm0= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= +github.com/miekg/dns v1.1.35/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= github.com/miekg/dns v1.1.43/go.mod h1:+evo5L0630/F6ca/Z9+GAqzhjGyn8/c+TBaOyfEl0V4= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643 h1:hLDRPB66XQT/8+wG9WsDpiCvZf1yKO7sz7scAjSlBa0= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= +github.com/miekg/pkcs11 v1.0.2/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= +github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs= github.com/minio/highwayhash v1.0.1/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/go-ps v1.0.0/go.mod h1:J4lOc8z8yJs6vUwklHw2XEIiT4z4C40KtWVN3nvg8Pg= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= @@ -689,8 +845,11 @@ github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:F github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.3.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/mapstructure v1.4.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/mitchellh/mapstructure v1.4.3 h1:OVowDSCllw/YjdLkam3/sm7wEtOy59d8ndGgCcyj8cs= github.com/mitchellh/mapstructure v1.4.3/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= +github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= +github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= +github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= @@ -700,13 +859,21 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/modocache/gover v0.0.0-20171022184752-b58185e213c5/go.mod h1:caMODM3PzxT8aQXRPkAt8xlV/e7d7w8GM5g0fa5F0D8= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= +github.com/mozilla/scribe v0.0.0-20180711195314-fb71baf557c1/go.mod h1:FIczTrinKo8VaLxe6PWTPEXRXDIHz2QAwiaBaP5/4a8= +github.com/mozilla/tls-observatory v0.0.0-20210609171429-7bc42856d2e5/go.mod h1:FUqVoUPHSEdDR0MnFM3Dh8AU0pZHLXUD127SAJGER/s= +github.com/mroth/weightedrand v0.4.1/go.mod h1:3p2SIcC8al1YMzGhAIoXD+r9olo/g/cdJgAD905gyNE= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f h1:KUppIJq7/+SVif2QVs3tOP0zanoHgBEVAwHxUSIzRqU= github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= +github.com/mwitkow/go-proto-validators v0.0.0-20180403085117-0950a7990007/go.mod h1:m2XC9Qq0AlmmVksL6FktJCdTYyLk7V3fKyp0sl1yWQo= +github.com/mwitkow/go-proto-validators v0.2.0/go.mod h1:ZfA1hW+UH/2ZHOWvQ3HnQaU0DtnpXu850MZiy+YUgcc= github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76/go.mod h1:x5OoJHDHqxHS801UIuhqGl6QdSAEJvtausosHSdazIo= +github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= github.com/naoina/go-stringutil v0.1.0/go.mod h1:XJ2SJL9jCtBh+P9q5btrd/Ylo8XwT/h1USek5+NqSA0= github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416/go.mod h1:NBIhNtsFMo3G2szEBne+bO4gS192HuIYRqfvOWb4i1E= github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= @@ -722,39 +889,50 @@ github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxzi github.com/nats-io/nkeys v0.2.0/go.mod h1:XdZpAbhgyyODYqjTawOnIOI7VlbKSarI9Gfy1tqEu/s= github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4= github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= github.com/neilotoole/errgroup v0.1.5/go.mod h1:Q2nLGf+594h0CLBs/Mbg6qOr7GtqDK7C2S41udRnToE= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= +github.com/nishanths/exhaustive v0.7.11/go.mod h1:gX+MP7DWMKJmNa1HfMozK+u04hQd3na9i0hyqf3/dOI= +github.com/nishanths/predeclared v0.0.0-20190419143655-18a43bb90ffc/go.mod h1:62PewwiQTlm/7Rj+cxVYqZvDIUc+JjZq6GHAC1fsObQ= +github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b h1:MKwruh+HeCSKWphkxuzvRzU4QzDkg7yiPkDVV0cDFgI= +github.com/oasisprotocol/curve25519-voi v0.0.0-20210609091139-0a56a4bca00b/go.mod h1:TLJifjWF6eotcfzDjKZsDqWJ+73Uvj/N85MvVyrvynM= github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/oklog/ulid/v2 v2.0.2/go.mod h1:mtBL0Qe/0HAx6/a4Z30qxVIAL1eQDweXq5lxOEiwQ68= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.2-0.20190409134802-7e037d187b0c/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= github.com/onsi/ginkgo v1.16.2/go.mod h1:CObGmKUOKaSC0RjmoAK7tKyn4Azo5P2IWuoMnvwxz1E= github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.0.0/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/gomega v1.4.1/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.13.0 h1:7lLHu94wT9Ij0o6EWWclhu0aOh32VxhkwEJvzuWPeak= github.com/onsi/gomega v1.13.0/go.mod h1:lRk9szgn8TxENtWd0Tp4c3wjlRfMTMH27I+3Je41yGY= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.18.1 h1:M1GfJqGRrBrrGGsbxzV5dqM2U2ApXefZCQpkukxYRLE= +github.com/onsi/gomega v1.18.1/go.mod h1:0q+aL8jAiMXy9hbwj2mr5GziHiwhAIQpFmmtT5hitRs= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM= github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= github.com/opencontainers/runc v1.0.3 h1:1hbqejyQWCJBvtKAfdO0b1FmaEf2z/bxnjqbARass5k= github.com/opencontainers/runc v1.0.3/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0= github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= @@ -771,38 +949,54 @@ github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnh github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa4YDFlwRYAMyE= 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/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= +github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= +github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= +github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= +github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= github.com/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= github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= +github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pborman/uuid v0.0.0-20170112150404-1b00554d8222/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml v1.9.4 h1:tjENF6MfZAg8e4ZmZTeWaWiT2vXtsoO6+iuOjFhECwM= github.com/pelletier/go-toml v1.9.4/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pelletier/go-toml/v2 v2.0.0-beta.8 h1:dy81yyLYJDwMTifq24Oi/IslOslRrDSb3jwDggjz3Z0= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.0-beta.8/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.0/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= +github.com/pelletier/go-toml/v2 v2.0.1 h1:8e3L2cCQzLFi2CR4g7vGFuFxX7Jl1kKX8gW+iV0GUKU= +github.com/pelletier/go-toml/v2 v2.0.1/go.mod h1:r9LEWfGN8R5k0VXJ+0BkIe7MYkRdwZOjgMj2KwnJFUo= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= github.com/performancecopilot/speed/v4 v4.0.0/go.mod h1:qxrSyuDGrTOWfV+uKRFhfxw6h/4HXRGUiZiufxo49BM= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7/go.mod h1:CRroGNssyjTd/qIG2FyxByd2S8JEAZXBl4qUrZf8GS0= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= -github.com/philhofer/fwd v1.1.1/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= 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/pkg/browser v0.0.0-20180916011732-0a3d74bf9ce4/go.mod h1:4OwLy04Bl9Ef3GJJCoec+30X3LQs/0/m4HFRt/2LUSA= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= +github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= +github.com/pmezard/go-difflib v0.0.0-20151028094244-d8ed2627bdf0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/polyfloyd/go-errorlint v0.0.0-20211125173453-6d6d39c5bb8b/go.mod h1:wi9BfjxjF/bwiZ701TzmfKu6UKC357IOAtNr0Td0Lvw= github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= +github.com/power-devops/perfstat v0.0.0-20210106213030-5aafc221ea8c/go.mod h1:OmDBASR4679mdNQnz2pUhc2G8CO2JrUAVFDRBDP/hJE= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= @@ -810,10 +1004,11 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.8.0/go.mod h1:O9VU6huf47PktckDQfMTX0Y8tY0/7TSWwj+ITvv0TnM= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1 h1:ZiaPsmm9uiBeaSMRznKsCDNtPCS0T3JVDGF+06gjBzk= +github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= +github.com/prometheus/client_golang v1.12.2 h1:51L9cDoUHVrXx4zWYlcLQIZ+d+VXHgqnYKkIuq4g/34= +github.com/prometheus/client_golang v1.12.2/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= @@ -828,86 +1023,122 @@ github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y8 github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuIRh4= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= +github.com/prometheus/common v0.34.0 h1:RBmGO9d/FVjqHT0yUGQwBJhkwKV+wPCn7KGpvfab0uE= +github.com/prometheus/common v0.34.0/go.mod h1:gB3sOl7P0TvJabZpLY5uQMpUqRCPPCyRLCZYc7JZTNE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU= github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/tsdb v0.6.2-0.20190402121629-4f204dcbc150/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/pseudomuto/protoc-gen-doc v1.3.2/go.mod h1:y5+P6n3iGrbKG+9O04V5ld71in3v/bX88wUwgt+U8EA= +github.com/pseudomuto/protokit v0.2.0/go.mod h1:2PdH30hxVHsup8KpBTOXTBeMVhJZVio3Q8ViKSAXT0Q= +github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.16-0.20220213074421-6aa060fab41a/go.mod h1:VMX+OnnSw4LicdiEGtRSD/1X8kW7GuEscjYNr4cOIT4= +github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.16/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/dsl v0.3.19/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= +github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220120141003-628d8b3623b5/go.mod h1:wSEyW6O61xRV6zb6My3HxrQ5/8ke7NE2OayqCHa3xRM= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0 h1:MkV+77GLUNo5oJ0jf870itWm3D0Sjh7+Za9gazKc5LQ= -github.com/rcrowley/go-metrics v0.0.0-20200313005456-10cdbea86bc0/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/regen-network/cosmos-proto v0.3.1 h1:rV7iM4SSFAagvy8RiyhiACbWEGotmqzywPxOvwMdxcg= github.com/regen-network/cosmos-proto v0.3.1/go.mod h1:jO0sVX6a1B36nmE8C9xBFXpNwWejXC7QqCOnH3O0+YM= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= +github.com/remyoudompheng/go-dbus v0.0.0-20121104212943-b7232d34b1d5/go.mod h1:+u151txRmLpwxBmpYn9z3d1sdJdjRPQpsXuYeY9jNls= +github.com/remyoudompheng/go-liblzma v0.0.0-20190506200333-81bf2d431b96/go.mod h1:90HvCY7+oHHUKkbeMCiHt1WuFR2/hPJ9QrljDG+v6ls= +github.com/remyoudompheng/go-misc v0.0.0-20190427085024-2d6ac652a50e/go.mod h1:80FQABjoFzZ2M5uEa6FUaJYEmqU2UOKojlFVak1UAwI= github.com/rjeczalik/notify v0.9.1/go.mod h1:rKwnCoCGeuQnwBtTSPL9Dad03Vh2n40ePRrjvIXnJho= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= +github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= +github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= github.com/rs/cors v0.0.0-20160617231935-a62a804a8a00/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xhandler v0.0.0-20160618193221-ed27b6fd6521/go.mod h1:RvLn4FgxWubrpZHtQLnOf6EwhN2hEMusxZOhcW9H3UQ= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.26.0 h1:ORM4ibhEZeTeQlCojCK2kPz1ogAY4bGs4tD+SaAdGaE= -github.com/rs/zerolog v1.26.0/go.mod h1:yBiM87lvSqX8h0Ww4sdzNSkVYZ8dL2xjZJG1lAuGZEo= +github.com/rs/zerolog v1.26.1 h1:/ihwxqH+4z8UxyI70wM1z9yCvkWcfz/a3mj48k/Zngc= +github.com/rs/zerolog v1.26.1/go.mod h1:/wSSJWX7lVrsOwlbyTRSOJvqRlc+WjWlfes+CiJ+tmc= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/ryancurrah/gomodguard v1.2.3/go.mod h1:rYbA/4Tg5c54mV1sv4sQTP5WOPBcoLtnBZ7/TEhXAbg= +github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= +github.com/sagikazarmark/crypt v0.3.0/go.mod h1:uD/D+6UF4SrIR1uGEv7bBNkNqLGqUr43MRiaGWX1Nig= github.com/sagikazarmark/crypt v0.4.0/go.mod h1:ALv2SRj7GxYV4HO9elxH9nS6M9gW+xDNxqmyJ6RfDFM= +github.com/sagikazarmark/crypt v0.5.0/go.mod h1:l+nzl7KWh51rpzp2h7t4MZWyiEWdhNpOAnclKvg+mdA= +github.com/sagikazarmark/crypt v0.6.0/go.mod h1:U8+INwJo3nBv1m6A/8OBXAq7Jnpspk5AxSgDyEQcea8= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa h1:0U2s5loxrTy6/VgfVoLuVLFJcURKLH49ie0zSch7gh4= -github.com/sasha-s/go-deadlock v0.2.1-0.20190427202633-1595213edefa/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= +github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71efZx0= +github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= +github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= +github.com/sei-protocol/sei-cosmos v0.1.3 h1:TWtnnnCFOmseMklWUUGztCsbL4/3zT5YQDnGy7BILZg= +github.com/sei-protocol/sei-cosmos v0.1.3/go.mod h1:zJulKnuzuNbtCUOeSIEn0v/Jp/PrEJXEcW2j3rbQ/kw= +github.com/sei-protocol/sei-tendermint v0.1.3 h1:/ZDSKQeOLRM53sCYTKPfMQ95YJCs494H4FH4YS1cD0I= +github.com/sei-protocol/sei-tendermint v0.1.3/go.mod h1:z6ZykL+1iLl02bSQmXsA9tzS3MzJFt33zLpIDjEKV2g= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= +github.com/shirou/gopsutil/v3 v3.22.4/go.mod h1:D01hZJ4pVHPpCTZ3m3T2+wDF2YAGfd+H4ifUguaQzHM= +github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= +github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/tenv v1.5.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= +github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= +github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spaolacci/murmur3 v1.1.0 h1:7c1g84S4BPRrfL5Xrdp6fOJ206sU9y293DDHaoy0bLI= github.com/spaolacci/murmur3 v1.1.0/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/spf13/afero v1.8.0/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/afero v1.8.2 h1:xehSyVa0YnHWsJ49JFljMpg1HX19V6NDZ1fkm1Xznbo= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA= github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= +github.com/spf13/cast v1.5.0 h1:rj3WzYc11XZaIZMPKmwP96zkFEnnAmV8s6XbB2aY32w= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= +github.com/spf13/cobra v1.3.0/go.mod h1:BrRVncBjOJa/eUcVVm9CE+oC6as8k+VYr4NY7WCi9V4= github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q= github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= @@ -919,12 +1150,14 @@ github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.7.1/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= +github.com/spf13/viper v1.10.0/go.mod h1:SoyBPwAtKDzypXNDFKN5kzH7ppppbGZtls1UpIy5AsM= github.com/spf13/viper v1.10.1/go.mod h1:IGlFPqhNAPKRxohIzWpI5QEy4kuI7tcl5WvR+8qy1rU= -github.com/spf13/viper v1.11.0 h1:7OX/1FS6n7jHD1zGrZTM7WtY13ZELRyosK4k93oPr44= github.com/spf13/viper v1.11.0/go.mod h1:djo0X/bA5+tYVoCn+C7cAYJGcVn/qYLFTG8gdUsX7Zk= +github.com/spf13/viper v1.12.0 h1:CZ7eSOd3kZoaYDLbXnmzgQI5RlciuXBMA+18HwHRfZQ= +github.com/spf13/viper v1.12.0/go.mod h1:b6COn30jlNxbm/V2IqWiNWkJ+vZNiMNksliPCiuKtSI= +github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4/go.mod h1:RZLeN1LMWmRsyYjvAu+I6Dm9QmlDaIIt+Y+4Kd7Tp+Q= +github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= github.com/steakknife/bloomfilter v0.0.0-20180922174646-6819c0d2a570/go.mod h1:8OR4w3TdeIHIh1g6EMY5p0gVNOovcWC+1vpc7naMuAw= github.com/steakknife/hamming v0.0.0-20180906055917-c99c65617cd3/go.mod h1:hpGUWaI9xL8pRQCTXQgocU38Qw1g0Us7n5PxxTwTCYU= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -936,19 +1169,25 @@ github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+ github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= +github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s= +github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= +github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI= +github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= +github.com/sylvia7788/contextcheck v1.0.4/go.mod h1:vuPKJMQ7MQ91ZTqfdyreNKwZjyUg6KO+IebVyQDedZQ= github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca h1:Ld/zXl5t4+D69SiV4JoN7kkfvJdOWlPpfxrzxpLMoUk= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= github.com/tendermint/btcd v0.1.1 h1:0VcxPfflS2zZ3RiOAHkBiFUcPvbtRj5O7zHmcJWHV7s= github.com/tendermint/btcd v0.1.1/go.mod h1:DC6/m53jtQzr/NFmMNEu0rxf18/ktVoVtMrnDD5pN+U= @@ -956,21 +1195,26 @@ github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15 h1:hqAk8riJvK4RM github.com/tendermint/crypto v0.0.0-20191022145703-50d29ede1e15/go.mod h1:z4YtwM70uOnk8h0pjJYlj3zdYwi9l03By6iAIF5j/Pk= github.com/tendermint/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.34.14/go.mod h1:FrwVm3TvsVicI9Z7FlucHV6Znfd5KBc/Lpp69cCwtk0= -github.com/tendermint/tendermint v0.34.19 h1:y0P1qI5wSa9IRuhKnTDA6IUcOrLi1hXJuALR+R7HFEk= -github.com/tendermint/tendermint v0.34.19/go.mod h1:R5+wgIwSxMdKQcmOaeudL0Cjkr3HDkhpcdum6VeU3R4= github.com/tendermint/tm-db v0.6.4/go.mod h1:dptYhIpJ2M5kUuenLr+Yyf3zQOv1SgBZcl8/BmWlMBw= github.com/tendermint/tm-db v0.6.6/go.mod h1:wP8d49A85B7/erz/r4YbKssKw6ylsO/hKtFk7E1aWZI= github.com/tendermint/tm-db v0.6.8-0.20220519162814-e24b96538a12 h1:unOeFDC/TV4Oh371XZGmZyfeIzeGfK/JINb0T+6C+QY= github.com/tendermint/tm-db v0.6.8-0.20220519162814-e24b96538a12/go.mod h1:PWsIWOTwdwC7Ow/GUvx8HgUJTO691pBuorIQD8JvwAs= +github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= +github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= github.com/tidwall/gjson v1.6.7/go.mod h1:zeFuBCIqD4sN/gmqBzZ4j7Jd6UcA2Fc56x7QFsv+8fI= github.com/tidwall/match v1.0.3/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= github.com/tidwall/pretty v1.0.2/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tidwall/sjson v1.1.4/go.mod h1:wXpKXu8CtDjKAZ+3DrKY5ROCorDFahq8l0tey/Lx1fg= -github.com/tinylib/msgp v1.1.5/go.mod h1:eQsjooMTnV42mHu917E26IogZ2930nFyBQdofk10Udg= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ttacon/chalk v0.0.0-20160626202418-22c06c80ed31/go.mod h1:onvgF043R+lC5RZ8IT9rBXDaEDnpnw/Cl+HFiw+v/7Q= +github.com/tmc/grpc-websocket-proxy v0.0.0-20200427203606-3cfed13b9966/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= +github.com/tomarrell/wrapcheck/v2 v2.6.1/go.mod h1:Eo+Opt6pyMW1b6cNllOcDSSoHO0aTJ+iF6BfCUbHltA= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/tommy-muehle/go-mnd/v2 v2.5.0/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM= github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef/go.mod h1:sJ5fKU0s6JVwZjjcUEX2zFOnvq0ASQ2K9Zr6cf67kNs= @@ -981,37 +1225,65 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= +github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= +github.com/uudashr/gocognit v1.0.5/go.mod h1:wgYz0mitoKOTysqxTDMOUXg+Jb5SvtihkfmugIZYpEA= +github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= +github.com/valyala/fasthttp v1.30.0/go.mod h1:2rsYD01CKFrjjsvFxx75KlEUNpWNBY9JWD3K/7o2Cus= +github.com/valyala/quicktemplate v1.7.0/go.mod h1:sqKJnoaOF88V07vkO+9FL8fb9uZg/VPSJnLYn+LmLk8= +github.com/valyala/tcplisten v1.0.0/go.mod h1:T0xQ8SeCZGxckz9qRXTfG43PvQ/mcWh7FwZEA7Ioqkc= +github.com/vektra/mockery/v2 v2.12.3/go.mod h1:8vf4KDDUptfkyypzdHLuE7OE2xA7Gdt60WgIS8PgD+U= +github.com/viki-org/dnscache v0.0.0-20130720023526-c70c1f23c5d8/go.mod h1:dniwbG03GafCjFohMDmz6Zc6oCuiqgH6tGNyXTkHzXE= github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE= github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU= github.com/vmihailenco/msgpack/v5 v5.1.4/go.mod h1:C5gboKD0TJPqWDTVTtrQNfRbiBwHZGo8UTqP/9/XvLI= github.com/vmihailenco/tagparser v0.1.2/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= github.com/wsddn/go-ecdh v0.0.0-20161211032359-48726bab9208/go.mod h1:IotVbo4F+mw0EzQ08zFqg7pK3FebNXpaMsRy2RT+Ees= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= +github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= github.com/ybbus/jsonrpc v2.1.2+incompatible/go.mod h1:XJrh1eMSzdIYFbM08flv0wp5G35eRniyeGut1z+LSiE= +github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= +github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= +github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= +github.com/yudai/pp v2.0.1+incompatible/go.mod h1:PuxR/8QJ7cyCkFp/aUDS+JY727OFEZkTdatxwunjIkc= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= github.com/zondax/hid v0.9.0 h1:eiT3P6vNxAEVxXMw66eZUAAnU2zD33JBkfG/EnfAKl8= github.com/zondax/hid v0.9.0/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= +gitlab.com/bosi/decorder v0.2.1/go.mod h1:6C/nhLSbF6qZbYD8bRmISBwc6vcWdNsiIBkRvjJFrH0= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= +go.etcd.io/bbolt v1.3.4/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.etcd.io/etcd v0.0.0-20200513171258-e048e166ab9c/go.mod h1:xCI7ZzBfRuGgBXyXO6yfWfDmlWd35khcWpUa4L0xI/k= go.etcd.io/etcd/api/v3 v3.5.0/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= go.etcd.io/etcd/api/v3 v3.5.1/go.mod h1:cbVKeC6lCfl7j/8jBhAK6aIYO9XOjdptoxU/nLQcPvs= +go.etcd.io/etcd/api/v3 v3.5.2/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= +go.etcd.io/etcd/api/v3 v3.5.4/go.mod h1:5GB2vv4A4AOn3yk7MftYGHkUfGtDHnEraIjym4dYz5A= go.etcd.io/etcd/client/pkg/v3 v3.5.0/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/pkg/v3 v3.5.1/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.2/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= +go.etcd.io/etcd/client/pkg/v3 v3.5.4/go.mod h1:IJHfcCEKxYu1Os13ZdwCwIUTUVGYTSAM3YSwc9/Ac1g= go.etcd.io/etcd/client/v2 v2.305.0/go.mod h1:h9puh54ZTgAKtEbut2oe9P4L/oqKCVB6xsXlzd7alYQ= go.etcd.io/etcd/client/v2 v2.305.1/go.mod h1:pMEacxZW7o8pg4CrFE7pquyCJJzZvkvdD2RibOCCCGs= +go.etcd.io/etcd/client/v2 v2.305.2/go.mod h1:2D7ZejHVMIfog1221iLSYlQRzrtECw3kz4I4VAQm3qI= +go.etcd.io/etcd/client/v2 v2.305.4/go.mod h1:Ud+VUwIi9/uQHOMA+4ekToJ12lTxlv0zB/+DHwTGEbU= go.etcd.io/etcd/client/v3 v3.5.0/go.mod h1:AIKXXVX/DQXtfTEqBryiLTUXwON+GuvO6Z7lLS/oTh0= +go.etcd.io/etcd/client/v3 v3.5.4/go.mod h1:ZaRkVgBZC+L+dLCjTcF1hRXpgZXQPOvnA/Ak/gq3kiY= +go.mozilla.org/mozlog v0.0.0-20170222151521-4bb13139d403/go.mod h1:jHoPAGnDrCy6kaI2tAze5Prf0Nr0w/oNkROt2lw3n3o= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -1037,16 +1309,21 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11-0.20210813005559-691160354723/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= +go.uber.org/multierr v1.4.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.7.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= +go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= go.uber.org/zap v1.19.1/go.mod h1:j3DNczoxDZroyBnOT1L/Q79cfUMGZxlv/9dzN7SM1rI= +go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20180501155221-613d6eafa307/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -1059,7 +1336,6 @@ golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190909091759-094676da4a83/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200323165209-0ec3e9974c59/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200510223506-06a226fb4e37/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= @@ -1068,12 +1344,18 @@ golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200820211705-5c72a883971a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201117144127-c1f2f97bffc9/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= +golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210616213533-5ff15b29337e/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20210915214749-c084706c2272/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20211215165025-cf75a172585e/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= +golang.org/x/crypto v0.0.0-20220112180741-5e0467b6c7ce/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= +golang.org/x/crypto v0.0.0-20220313003712-b769efc7c000/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 h1:kUhD7nTDoI3fVd9G4ORWrbV5NY0liEs/Jg2pv5f+bBA= golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -1091,6 +1373,7 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= +golang.org/x/exp/typeparams v0.0.0-20220218215828-6cf2b201936e/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= @@ -1119,6 +1402,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= +golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1142,6 +1427,7 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= @@ -1172,14 +1458,22 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210917221730-978cfadd31cf/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211208012354-db4efeb81f4b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ= golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1199,10 +1493,14 @@ golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211005180243-6b3c2da341f1/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190412183630-56d357773e84/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -1210,6 +1508,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 h1:w8s32wxx3sY+OjLlv9qltkLU5yvJzxjjgiHWLjdIcw4= +golang.org/x/sync v0.0.0-20220513210516-0976fa681c29/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1234,6 +1534,7 @@ golang.org/x/sys v0.0.0-20190712062909-fae7ac547cb7/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1272,9 +1573,9 @@ golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201015000850-e3ed0017c211/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201204225414-ed752295db88/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -1295,27 +1596,43 @@ golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210917161153-d61c044b1678/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211205182925-97ca703d548d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211213223007-03aa0b5f6827/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220403020550-483a9cbc67c0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220406163625-3f8b81556e12/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d h1:Zu/JngovGLVi6t2J3nmAf3AoTDwuzw85YZ3b9o4yU7s= golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 h1:EH1Deb8WZJ0xc0WK//leUHXcX9aLE5SymusoTmMZye8= +golang.org/x/term v0.0.0-20220411215600-e5f449aeb171/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= 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= @@ -1336,9 +1653,14 @@ golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190228203856-589c23e65e65/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= @@ -1348,21 +1670,26 @@ golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgw golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20191216052735-49a3e744a425/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200103221440-774c71fcf114/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= +golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= @@ -1372,35 +1699,63 @@ golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapK golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= +golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= +golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200426102838-f3a5411a4c3b/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200630154851-b2d8b0336632/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20200706234117-b22de6825cf7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= +golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201022035929-9cf592e881e9/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= +golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201028025901-8cd080b735b3/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= +golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= +golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= +golang.org/x/tools v0.1.8/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= +golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= +golang.org/x/tools v0.1.11-0.20220316014157-77aa08bb151a/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= @@ -1410,6 +1765,7 @@ google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEt google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= +google.golang.org/api v0.10.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= @@ -1437,16 +1793,27 @@ google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqiv google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= google.golang.org/api v0.59.0/go.mod h1:sT2boj7M9YJxZzgeZqXogmhfmRWDtPzT31xkieUbuZU= google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.62.0/go.mod h1:dKmwPCydfsad4qCH08MSdgWjfHOyfpd4VtDGgRFdavw= google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.81.0/go.mod h1:FA6Mb/bZxj706H2j+j2d6mHEEaHBmbbWnkfvmorOCko= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= +google.golang.org/appengine v1.6.2/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/genproto v0.0.0-20170818010345-ee236bd376b0/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20180831171423-11092d34479b/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20181107211654-5fc9ac540362/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1455,6 +1822,7 @@ google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dT google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= +google.golang.org/genproto v0.0.0-20190927181202-20e1ac93f88c/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= @@ -1476,6 +1844,8 @@ google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfG google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= +google.golang.org/genproto v0.0.0-20200626011028-ee7919e894b5/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20200707001353-8e8330bf89df/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1513,10 +1883,25 @@ google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ6 google.golang.org/genproto v0.0.0-20211008145708-270636b82663/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211028162531-8db9c33dc351/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211129164237-f09f9a12af12/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211203200212-54befc351ae9/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58 h1:sRT5xdTkj1Kbk30qbYC7VyMj73N5pZYsw6v+Nrzdhno= -google.golang.org/genproto v0.0.0-20220805133916-01dd62135a58/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc h1:Nf+EdcTLHR8qDNN/KfkQL0u0ssxt9OhbaWCl5C0ucEI= google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= @@ -1534,7 +1919,9 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -1545,11 +1932,12 @@ gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b h1:QRR6H1YWRnHb4Y/HeNFCTJLFVxaq6wH4YuVdsUOr75U= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/cheggaaa/pb.v1 v1.0.28/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.2/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= +gopkg.in/ini.v1 v1.66.3/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.66.4 h1:SsAcf+mM7mRZo2nJNGt8mZCjG8ZRaNGMURJw7BsIST4= gopkg.in/ini.v1 v1.66.4/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce/go.mod h1:5AcXVHNjg+BDxry382+8OKon8SEWiKktQR07RKPsv1c= @@ -1565,14 +1953,17 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.6/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= 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= @@ -1581,8 +1972,15 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= +honnef.co/go/tools v0.3.1/go.mod h1:vlRD9XErLMGT+mDuofSr0mMMquscM/1nQqtRSsh6m70= +mvdan.cc/gofumpt v0.3.1/go.mod h1:w3ymliuxvzVx8DAutBnVyDqYb1Niy/yCJt/lk821YCE= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20211214103731-d0ef000c54e5/go.mod h1:b8RRCBm0eeiWR8cfN88xeq2G5SG3VKGO+5UPWi5FSOY= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= +pgregory.net/rapid v0.4.7 h1:MTNRktPuv5FNqOO151TM9mDTa+XHcX6ypYeISDVD14g= +pgregory.net/rapid v0.4.7/go.mod h1:UYpPVyjFHzYBGHIxLFoupi8vwk6rXNzRY9OMvVxFIOU= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= diff --git a/scripts/old_initialize_local.sh b/scripts/old_initialize_local.sh index 28b213e5b1..5324b2a8e2 100644 --- a/scripts/old_initialize_local.sh +++ b/scripts/old_initialize_local.sh @@ -29,7 +29,6 @@ echo "Building..." make install echo $password | sudo -S rm -r ~/.sei/ echo $password | sudo -S rm -r ~/test_accounts/ -~/go/bin/seid tendermint unsafe-reset-all ~/go/bin/seid init demo --chain-id sei-chain yes | ~/go/bin/seid keys add $keyname yes | ~/go/bin/seid keys add faucet diff --git a/x/mint/module_test.go b/x/mint/module_test.go index 85d84fd1f9..a491b0d68a 100644 --- a/x/mint/module_test.go +++ b/x/mint/module_test.go @@ -1,6 +1,7 @@ package mint_test import ( + "context" "testing" "github.com/stretchr/testify/require" @@ -17,7 +18,7 @@ func TestItCreatesModuleAccountOnInitBlock(t *testing.T) { ctx := app.BaseApp.NewContext(false, tmproto.Header{}) app.InitChain( - abcitypes.RequestInitChain{ + context.Background(), &abcitypes.RequestInitChain{ AppStateBytes: []byte("{}"), ChainId: "test-chain-id", }, diff --git a/x/oracle/types/errors.go b/x/oracle/types/errors.go index ecafbfc3fd..bad510d6c8 100755 --- a/x/oracle/types/errors.go +++ b/x/oracle/types/errors.go @@ -3,8 +3,7 @@ package types import ( "fmt" - "github.com/tendermint/tendermint/crypto/tmhash" - + "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -14,7 +13,7 @@ var ( ErrNoVote = sdkerrors.Register(ModuleName, 4, "no vote") ErrNoVotingPermission = sdkerrors.Register(ModuleName, 5, "unauthorized voter") ErrInvalidHash = sdkerrors.Register(ModuleName, 6, "invalid hash") - ErrInvalidHashLength = sdkerrors.Register(ModuleName, 7, fmt.Sprintf("invalid hash length; should equal %d", tmhash.TruncatedSize)) + ErrInvalidHashLength = sdkerrors.Register(ModuleName, 7, fmt.Sprintf("invalid hash length; should equal %d", ed25519.TruncatedSize)) ErrVerificationFailed = sdkerrors.Register(ModuleName, 8, "hash verification failed") ErrNoAggregateVote = sdkerrors.Register(ModuleName, 12, "no aggregate vote") ErrNoVoteTarget = sdkerrors.Register(ModuleName, 13, "no vote target") diff --git a/x/oracle/types/msgs.go b/x/oracle/types/msgs.go index 965c597ffe..b710120398 100755 --- a/x/oracle/types/msgs.go +++ b/x/oracle/types/msgs.go @@ -1,6 +1,8 @@ package types import ( + "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" + sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -20,6 +22,61 @@ const ( //------------------------------------------------- //------------------------------------------------- +// NewMsgAggregateExchangeRatePrevote returns MsgAggregateExchangeRatePrevote instance +func NewMsgAggregateExchangeRatePrevote(hash AggregateVoteHash, feeder sdk.AccAddress, validator sdk.ValAddress) *MsgAggregateExchangeRatePrevote { + return &MsgAggregateExchangeRatePrevote{ + Hash: hash.String(), + Feeder: feeder.String(), + Validator: validator.String(), + } +} + +// Route implements sdk.Msg +func (msg MsgAggregateExchangeRatePrevote) Route() string { return RouterKey } + +// Type implements sdk.Msg +func (msg MsgAggregateExchangeRatePrevote) Type() string { return TypeMsgAggregateExchangeRatePrevote } + +// GetSignBytes implements sdk.Msg +func (msg MsgAggregateExchangeRatePrevote) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) +} + +// GetSigners implements sdk.Msg +func (msg MsgAggregateExchangeRatePrevote) GetSigners() []sdk.AccAddress { + feeder, err := sdk.AccAddressFromBech32(msg.Feeder) + if err != nil { + panic(err) + } + + return []sdk.AccAddress{feeder} +} + +// ValidateBasic Implements sdk.Msg +func (msg MsgAggregateExchangeRatePrevote) ValidateBasic() error { + _, err := AggregateVoteHashFromHexString(msg.Hash) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidHash, "Invalid vote hash (%s)", err) + } + + // HEX encoding doubles the hash length + if len(msg.Hash) != ed25519.TruncatedSize*2 { + return ErrInvalidHashLength + } + + _, err = sdk.AccAddressFromBech32(msg.Feeder) + if err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid feeder address (%s)", err) + } + + _, err = sdk.ValAddressFromBech32(msg.Validator) + if err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid operator address (%s)", err) + } + + return nil +} + // NewMsgAggregateExchangeRateVote returns MsgAggregateExchangeRateVote instance func NewMsgAggregateExchangeRateVote(exchangeRates string, feeder sdk.AccAddress, validator sdk.ValAddress) *MsgAggregateExchangeRateVote { return &MsgAggregateExchangeRateVote{ @@ -79,6 +136,112 @@ func (msg MsgAggregateExchangeRateVote) ValidateBasic() error { return sdkerrors.Wrap(ErrInvalidExchangeRate, "overflow") } } + + if len(msg.Salt) > 4 || len(msg.Salt) < 1 { + return sdkerrors.Wrap(ErrInvalidSaltLength, "salt length must be [1, 4]") + } + + return nil +} + +// NewMsgAggregateExchangeRatePrevote returns MsgAggregateExchangeRatePrevote instance +func NewMsgAggregateExchangeRateCombinedVote(voteSalt string, voteExchangeRates string, prevoteHash AggregateVoteHash, feeder sdk.AccAddress, validator sdk.ValAddress) *MsgAggregateExchangeRateCombinedVote { + return &MsgAggregateExchangeRateCombinedVote{ + VoteSalt: voteSalt, + VoteExchangeRates: voteExchangeRates, + PrevoteHash: prevoteHash.String(), + Feeder: feeder.String(), + Validator: validator.String(), + } +} + +// Route implements sdk.Msg +func (msg MsgAggregateExchangeRateCombinedVote) Route() string { return RouterKey } + +// Type implements sdk.Msg +func (msg MsgAggregateExchangeRateCombinedVote) Type() string { + return TypeMsgAggregateExchangeRateCombinedVote +} + +// GetSignBytes implements sdk.Msg +func (msg MsgAggregateExchangeRateCombinedVote) GetSignBytes() []byte { + return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) +} + +// GetSigners implements sdk.Msg +func (msg MsgAggregateExchangeRateCombinedVote) GetSigners() []sdk.AccAddress { + feeder, err := sdk.AccAddressFromBech32(msg.Feeder) + if err != nil { + panic(err) + } + + return []sdk.AccAddress{feeder} +} + +func (msg MsgAggregateExchangeRateCombinedVote) GetVoteFromCombinedVote() *MsgAggregateExchangeRateVote { + return &MsgAggregateExchangeRateVote{ + Salt: msg.VoteSalt, + ExchangeRates: msg.VoteExchangeRates, + Feeder: msg.Feeder, + Validator: msg.Validator, + } +} + +func (msg MsgAggregateExchangeRateCombinedVote) GetPrevoteFromCombinedVote() *MsgAggregateExchangeRatePrevote { + return &MsgAggregateExchangeRatePrevote{ + Hash: msg.PrevoteHash, + Feeder: msg.Feeder, + Validator: msg.Validator, + } +} + +// ValidateBasic Implements sdk.Msg +func (msg MsgAggregateExchangeRateCombinedVote) ValidateBasic() error { + // validate feeder + validator + _, err := sdk.AccAddressFromBech32(msg.Feeder) + if err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid feeder address (%s)", err) + } + + _, err = sdk.ValAddressFromBech32(msg.Validator) + if err != nil { + return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid operator address (%s)", err) + } + + // validate the vote info + if l := len(msg.VoteExchangeRates); l == 0 { + return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "must provide at least one oracle exchange rate") + } else if l > 4096 { + return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "exchange rates string can not exceed 4096 characters") + } + + voteExchangeRates, err := ParseExchangeRateTuples(msg.VoteExchangeRates) + if err != nil { + return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, "failed to parse exchange rates string cause: "+err.Error()) + } + + for _, exchangeRate := range voteExchangeRates { + // Check overflow bit length + if exchangeRate.ExchangeRate.BigInt().BitLen() > 255+sdk.DecimalPrecisionBits { + return sdkerrors.Wrap(ErrInvalidExchangeRate, "overflow") + } + } + + if len(msg.VoteSalt) > 4 || len(msg.VoteSalt) < 1 { + return sdkerrors.Wrap(ErrInvalidSaltLength, "salt length must be [1, 4]") + } + + // validate the prevote hash + _, err = AggregateVoteHashFromHexString(msg.PrevoteHash) + if err != nil { + return sdkerrors.Wrapf(ErrInvalidHash, "Invalid vote hash (%s)", err) + } + + // HEX encoding doubles the hash length + if len(msg.PrevoteHash) != ed25519.TruncatedSize*2 { + return ErrInvalidHashLength + } + return nil } From 1a32c79ee5a4f14480a6969adefdcd9bcf0360d9 Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Mon, 17 Oct 2022 10:28:36 -0700 Subject: [PATCH 02/30] Rebase --- go.mod | 2 + go.sum | 3 + x/oracle/types/msgs.go | 163 ----------------------------------------- 3 files changed, 5 insertions(+), 163 deletions(-) diff --git a/go.mod b/go.mod index 6a55430874..528b2afac1 100644 --- a/go.mod +++ b/go.mod @@ -55,6 +55,7 @@ require ( github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b // indirect github.com/felixge/httpsnoop v1.0.1 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/ghodss/yaml v1.0.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.0 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect @@ -74,6 +75,7 @@ require ( github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect diff --git a/go.sum b/go.sum index 51146dfa3f..ca7d49ef20 100644 --- a/go.sum +++ b/go.sum @@ -373,6 +373,7 @@ github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmV github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -612,6 +613,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= 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= diff --git a/x/oracle/types/msgs.go b/x/oracle/types/msgs.go index b710120398..965c597ffe 100755 --- a/x/oracle/types/msgs.go +++ b/x/oracle/types/msgs.go @@ -1,8 +1,6 @@ package types import ( - "github.com/cosmos/cosmos-sdk/crypto/keys/ed25519" - sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) @@ -22,61 +20,6 @@ const ( //------------------------------------------------- //------------------------------------------------- -// NewMsgAggregateExchangeRatePrevote returns MsgAggregateExchangeRatePrevote instance -func NewMsgAggregateExchangeRatePrevote(hash AggregateVoteHash, feeder sdk.AccAddress, validator sdk.ValAddress) *MsgAggregateExchangeRatePrevote { - return &MsgAggregateExchangeRatePrevote{ - Hash: hash.String(), - Feeder: feeder.String(), - Validator: validator.String(), - } -} - -// Route implements sdk.Msg -func (msg MsgAggregateExchangeRatePrevote) Route() string { return RouterKey } - -// Type implements sdk.Msg -func (msg MsgAggregateExchangeRatePrevote) Type() string { return TypeMsgAggregateExchangeRatePrevote } - -// GetSignBytes implements sdk.Msg -func (msg MsgAggregateExchangeRatePrevote) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -// GetSigners implements sdk.Msg -func (msg MsgAggregateExchangeRatePrevote) GetSigners() []sdk.AccAddress { - feeder, err := sdk.AccAddressFromBech32(msg.Feeder) - if err != nil { - panic(err) - } - - return []sdk.AccAddress{feeder} -} - -// ValidateBasic Implements sdk.Msg -func (msg MsgAggregateExchangeRatePrevote) ValidateBasic() error { - _, err := AggregateVoteHashFromHexString(msg.Hash) - if err != nil { - return sdkerrors.Wrapf(ErrInvalidHash, "Invalid vote hash (%s)", err) - } - - // HEX encoding doubles the hash length - if len(msg.Hash) != ed25519.TruncatedSize*2 { - return ErrInvalidHashLength - } - - _, err = sdk.AccAddressFromBech32(msg.Feeder) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid feeder address (%s)", err) - } - - _, err = sdk.ValAddressFromBech32(msg.Validator) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid operator address (%s)", err) - } - - return nil -} - // NewMsgAggregateExchangeRateVote returns MsgAggregateExchangeRateVote instance func NewMsgAggregateExchangeRateVote(exchangeRates string, feeder sdk.AccAddress, validator sdk.ValAddress) *MsgAggregateExchangeRateVote { return &MsgAggregateExchangeRateVote{ @@ -136,112 +79,6 @@ func (msg MsgAggregateExchangeRateVote) ValidateBasic() error { return sdkerrors.Wrap(ErrInvalidExchangeRate, "overflow") } } - - if len(msg.Salt) > 4 || len(msg.Salt) < 1 { - return sdkerrors.Wrap(ErrInvalidSaltLength, "salt length must be [1, 4]") - } - - return nil -} - -// NewMsgAggregateExchangeRatePrevote returns MsgAggregateExchangeRatePrevote instance -func NewMsgAggregateExchangeRateCombinedVote(voteSalt string, voteExchangeRates string, prevoteHash AggregateVoteHash, feeder sdk.AccAddress, validator sdk.ValAddress) *MsgAggregateExchangeRateCombinedVote { - return &MsgAggregateExchangeRateCombinedVote{ - VoteSalt: voteSalt, - VoteExchangeRates: voteExchangeRates, - PrevoteHash: prevoteHash.String(), - Feeder: feeder.String(), - Validator: validator.String(), - } -} - -// Route implements sdk.Msg -func (msg MsgAggregateExchangeRateCombinedVote) Route() string { return RouterKey } - -// Type implements sdk.Msg -func (msg MsgAggregateExchangeRateCombinedVote) Type() string { - return TypeMsgAggregateExchangeRateCombinedVote -} - -// GetSignBytes implements sdk.Msg -func (msg MsgAggregateExchangeRateCombinedVote) GetSignBytes() []byte { - return sdk.MustSortJSON(ModuleCdc.MustMarshalJSON(&msg)) -} - -// GetSigners implements sdk.Msg -func (msg MsgAggregateExchangeRateCombinedVote) GetSigners() []sdk.AccAddress { - feeder, err := sdk.AccAddressFromBech32(msg.Feeder) - if err != nil { - panic(err) - } - - return []sdk.AccAddress{feeder} -} - -func (msg MsgAggregateExchangeRateCombinedVote) GetVoteFromCombinedVote() *MsgAggregateExchangeRateVote { - return &MsgAggregateExchangeRateVote{ - Salt: msg.VoteSalt, - ExchangeRates: msg.VoteExchangeRates, - Feeder: msg.Feeder, - Validator: msg.Validator, - } -} - -func (msg MsgAggregateExchangeRateCombinedVote) GetPrevoteFromCombinedVote() *MsgAggregateExchangeRatePrevote { - return &MsgAggregateExchangeRatePrevote{ - Hash: msg.PrevoteHash, - Feeder: msg.Feeder, - Validator: msg.Validator, - } -} - -// ValidateBasic Implements sdk.Msg -func (msg MsgAggregateExchangeRateCombinedVote) ValidateBasic() error { - // validate feeder + validator - _, err := sdk.AccAddressFromBech32(msg.Feeder) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid feeder address (%s)", err) - } - - _, err = sdk.ValAddressFromBech32(msg.Validator) - if err != nil { - return sdkerrors.Wrapf(sdkerrors.ErrInvalidAddress, "Invalid operator address (%s)", err) - } - - // validate the vote info - if l := len(msg.VoteExchangeRates); l == 0 { - return sdkerrors.Wrap(sdkerrors.ErrUnknownRequest, "must provide at least one oracle exchange rate") - } else if l > 4096 { - return sdkerrors.Wrap(sdkerrors.ErrInvalidRequest, "exchange rates string can not exceed 4096 characters") - } - - voteExchangeRates, err := ParseExchangeRateTuples(msg.VoteExchangeRates) - if err != nil { - return sdkerrors.Wrap(sdkerrors.ErrInvalidCoins, "failed to parse exchange rates string cause: "+err.Error()) - } - - for _, exchangeRate := range voteExchangeRates { - // Check overflow bit length - if exchangeRate.ExchangeRate.BigInt().BitLen() > 255+sdk.DecimalPrecisionBits { - return sdkerrors.Wrap(ErrInvalidExchangeRate, "overflow") - } - } - - if len(msg.VoteSalt) > 4 || len(msg.VoteSalt) < 1 { - return sdkerrors.Wrap(ErrInvalidSaltLength, "salt length must be [1, 4]") - } - - // validate the prevote hash - _, err = AggregateVoteHashFromHexString(msg.PrevoteHash) - if err != nil { - return sdkerrors.Wrapf(ErrInvalidHash, "Invalid vote hash (%s)", err) - } - - // HEX encoding doubles the hash length - if len(msg.PrevoteHash) != ed25519.TruncatedSize*2 { - return ErrInvalidHashLength - } - return nil } From 12115606e2880356e0c85845cfef92395ff52162 Mon Sep 17 00:00:00 2001 From: Xiaoyu Chen Date: Tue, 23 Aug 2022 17:50:06 -0700 Subject: [PATCH 03/30] update local scripts --- cmd/seid/cmd/init.go | 3 +-- scripts/initialize_local.sh | 6 ++++++ scripts/initialize_local_test_node.sh | 6 ++++++ scripts/old_initialize_local.sh | 6 ++++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/cmd/seid/cmd/init.go b/cmd/seid/cmd/init.go index c7d9d65856..58eb3c8318 100644 --- a/cmd/seid/cmd/init.go +++ b/cmd/seid/cmd/init.go @@ -5,7 +5,6 @@ import ( "encoding/json" "fmt" "os" - "path/filepath" "github.com/cosmos/go-bip39" "github.com/pkg/errors" @@ -141,7 +140,7 @@ func InitCmd(mbm module.BasicManager, defaultNodeHome string) *cobra.Command { toPrint := newPrintInfo(config.Moniker, chainID, nodeID, "", appState) - err = tmcfg.WriteConfigFile(filepath.Join(config.RootDir, "config", "config.toml"), config) + err = tmcfg.WriteConfigFile(config.RootDir, config) if err != nil { panic(err) } diff --git a/scripts/initialize_local.sh b/scripts/initialize_local.sh index fbd5f72386..990429d5ca 100755 --- a/scripts/initialize_local.sh +++ b/scripts/initialize_local.sh @@ -14,6 +14,12 @@ test_account_name=alice printf '00000000\n' | ./build/seid add-genesis-account $(./build/seid keys show $test_account_name -a) 100000000000000000000usei # generate genesis tx printf '00000000\n' | ./build/seid gentx $test_account_name 70000000000000000000usei --chain-id sei +sed -i 's/mode = "full"/mode = "validator"/g' $HOME/.sei/config/config.toml +KEY=$(jq '.pub_key' ~/.sei/config/priv_validator_key.json -c) +jq '.validators = [{}]' ~/.sei/config/genesis.json > ~/.sei/config/tmp_genesis.json +jq '.validators[0] += {"power":"70000000000000"}' ~/.sei/config/tmp_genesis.json > ~/.sei/config/tmp_genesis_2.json +jq '.validators[0] += {"pub_key":'$KEY'}' ~/.sei/config/tmp_genesis_2.json > ~/.sei/config/tmp_genesis_3.json +mv ~/.sei/config/tmp_genesis_3.json ~/.sei/config/genesis.json && rm ~/.sei/config/tmp_genesis.json && rm ~/.sei/config/tmp_genesis_2.json ./build/seid collect-gentxs cat ~/.sei/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="usei"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json cat ~/.sei/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="usei"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json diff --git a/scripts/initialize_local_test_node.sh b/scripts/initialize_local_test_node.sh index e27ee2bba2..e40343e5b4 100755 --- a/scripts/initialize_local_test_node.sh +++ b/scripts/initialize_local_test_node.sh @@ -35,6 +35,12 @@ sudo -S rm -r ~/test_accounts/ ~/go/bin/seid keys add $keyname ~/go/bin/seid add-genesis-account $(~/go/bin/seid keys show $keyname -a) 100000000000000000000usei,100000000000000000000uusdc,100000000000000000000uatom ~/go/bin/seid gentx $keyname 70000000000000000000usei --chain-id sei-chain +sed -i 's/mode = "full"/mode = "validator"/g' $HOME/.sei/config/config.toml +KEY=$(jq '.pub_key' ~/.sei/config/priv_validator_key.json -c) +jq '.validators = [{}]' ~/.sei/config/genesis.json > ~/.sei/config/tmp_genesis.json +jq '.validators[0] += {"power":"70000000000000"}' ~/.sei/config/tmp_genesis.json > ~/.sei/config/tmp_genesis_2.json +jq '.validators[0] += {"pub_key":'$KEY'}' ~/.sei/config/tmp_genesis_2.json > ~/.sei/config/tmp_genesis_3.json +mv ~/.sei/config/tmp_genesis_3.json ~/.sei/config/genesis.json && rm ~/.sei/config/tmp_genesis.json && rm ~/.sei/config/tmp_genesis_2.json ~/go/bin/seid collect-gentxs cat ~/.sei/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="usei"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json cat ~/.sei/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="usei"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json diff --git a/scripts/old_initialize_local.sh b/scripts/old_initialize_local.sh index 5324b2a8e2..72607c724b 100644 --- a/scripts/old_initialize_local.sh +++ b/scripts/old_initialize_local.sh @@ -36,6 +36,12 @@ printf '12345678\n' | ~/go/bin/seid add-genesis-account $(~/go/bin/seid keys sho printf '12345678\n' | ~/go/bin/seid add-genesis-account $(~/go/bin/seid keys show faucet -a) 100000000000000000000usei,100000000000000000000uusdc,100000000000000000000uatom python3 ./loadtest/scripts/populate_genesis_accounts.py $numtestaccount loc printf '12345678\n' | ~/go/bin/seid gentx $keyname 70000000000000000000usei --chain-id sei-chain +sed -i 's/mode = "full"/mode = "validator"/g' $HOME/.sei/config/config.toml +KEY=$(jq '.pub_key' ~/.sei/config/priv_validator_key.json -c) +jq '.validators = [{}]' ~/.sei/config/genesis.json > ~/.sei/config/tmp_genesis.json +jq '.validators[0] += {"power":"70000000000000"}' ~/.sei/config/tmp_genesis.json > ~/.sei/config/tmp_genesis_2.json +jq '.validators[0] += {"pub_key":'$KEY'}' ~/.sei/config/tmp_genesis_2.json > ~/.sei/config/tmp_genesis_3.json +mv ~/.sei/config/tmp_genesis_3.json ~/.sei/config/genesis.json && rm ~/.sei/config/tmp_genesis.json && rm ~/.sei/config/tmp_genesis_2.json ~/go/bin/seid collect-gentxs cat ~/.sei/config/genesis.json | jq '.app_state["crisis"]["constant_fee"]["denom"]="usei"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json cat ~/.sei/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["min_deposit"][0]["denom"]="usei"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json From 6cba0e3d06f2c3c469fe057c0d8f65137f813456 Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Mon, 17 Oct 2022 10:52:52 -0700 Subject: [PATCH 04/30] Fix validator mode --- scripts/initialize_local_test_node.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/initialize_local_test_node.sh b/scripts/initialize_local_test_node.sh index e40343e5b4..dfc7a47e97 100755 --- a/scripts/initialize_local_test_node.sh +++ b/scripts/initialize_local_test_node.sh @@ -35,7 +35,6 @@ sudo -S rm -r ~/test_accounts/ ~/go/bin/seid keys add $keyname ~/go/bin/seid add-genesis-account $(~/go/bin/seid keys show $keyname -a) 100000000000000000000usei,100000000000000000000uusdc,100000000000000000000uatom ~/go/bin/seid gentx $keyname 70000000000000000000usei --chain-id sei-chain -sed -i 's/mode = "full"/mode = "validator"/g' $HOME/.sei/config/config.toml KEY=$(jq '.pub_key' ~/.sei/config/priv_validator_key.json -c) jq '.validators = [{}]' ~/.sei/config/genesis.json > ~/.sei/config/tmp_genesis.json jq '.validators[0] += {"power":"70000000000000"}' ~/.sei/config/tmp_genesis.json > ~/.sei/config/tmp_genesis_2.json @@ -63,11 +62,13 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then sed -i 's/timeout_precommit =.*/timeout_precommit = "2000ms"/g' $CONFIG_PATH sed -i 's/timeout_commit =.*/timeout_commit = "2000ms"/g' $CONFIG_PATH sed -i 's/skip_timeout_commit =.*/skip_timeout_commit = false/g' $CONFIG_PATH + sed -i 's/mode = "full"/mode = "validator"/g' $HOME/.sei/config/config.toml elif [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' 's/timeout_prevote =.*/timeout_prevote = "2000ms"/g' $CONFIG_PATH sed -i '' 's/timeout_precommit =.*/timeout_precommit = "2000ms"/g' $CONFIG_PATH sed -i '' 's/timeout_commit =.*/timeout_commit = "2000ms"/g' $CONFIG_PATH sed -i '' 's/skip_timeout_commit =.*/skip_timeout_commit = false/g' $CONFIG_PATH + sed -i '' 's/mode = "full"/mode = "validator"/g' $HOME/.sei/config/config.toml else printf "Platform not supported, please ensure that the following values are set in your config.toml:\n" printf "### Consensus Configuration Options ###\n" @@ -75,6 +76,7 @@ else printf "\t timeout_precommit = \"2000ms\"\n" printf "\t timeout_commit = \"2000ms\"\n" printf "\t skip_timeout_commit = false\n" + printf "\t mode = validator\n" exit 1 fi From c362a63f5f23ece0e0cf822dd29ca4c0508ee67d Mon Sep 17 00:00:00 2001 From: codchen Date: Tue, 6 Sep 2022 12:44:26 -0700 Subject: [PATCH 05/30] Fix rebase conflicts --- app/abci.go | 21 ++-- app/app.go | 97 ++++++++++++++++--- app/apptesting/test_suite.go | 2 +- app/const.go | 2 + app/test_helpers.go | 11 +-- app/utils.go | 26 +++++ cmd/seid/cmd/root.go | 6 ++ go.mod | 14 ++- go.sum | 27 +++--- loadtest/contracts/deploy.sh | 64 ++++++------ scripts/dump_app_state_for_height.sh | 2 +- scripts/initialize_local.sh | 7 +- scripts/initialize_local_test_node.sh | 17 ++-- scripts/old_initialize_local.sh | 3 +- testutil/keeper/dex.go | 5 +- testutil/network/network.go | 2 +- utils/tracing/tracer.go | 14 ++- wasmbinding/test/query_test.go | 5 + x/dex/contract/abci.go | 15 +-- x/dex/contract/execution.go | 20 ++-- x/dex/contract/market_order.go | 11 +-- x/dex/keeper/abci/end_block_cancel_orders.go | 3 +- x/dex/keeper/abci/end_block_deposit.go | 3 +- x/dex/keeper/abci/end_block_place_orders.go | 5 +- .../abci/end_block_place_orders_test.go | 8 +- .../msgserver/msg_server_cancel_orders.go | 3 +- .../msgserver/msg_server_place_orders.go | 5 +- .../query/grpc_query_order_simulation.go | 5 +- .../query/grpc_query_order_simulation_test.go | 5 +- x/dex/module.go | 5 +- x/dex/module_test.go | 33 ++++--- x/dex/utils/context.go | 18 ++++ 32 files changed, 311 insertions(+), 153 deletions(-) create mode 100644 app/utils.go create mode 100644 x/dex/utils/context.go diff --git a/app/abci.go b/app/abci.go index 1356e5332d..9c2dba8ddf 100644 --- a/app/abci.go +++ b/app/abci.go @@ -3,24 +3,25 @@ package app import ( "context" + sdk "github.com/cosmos/cosmos-sdk/types" abci "github.com/tendermint/tendermint/abci/types" "go.opentelemetry.io/otel/attribute" ) -func (app *App) BeginBlock(req abci.RequestBeginBlock) (res abci.ResponseBeginBlock) { - ctx, topSpan := (*app.tracingInfo.Tracer).Start(context.Background(), "Block") +func (app *App) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) (res abci.ResponseBeginBlock) { + tracectx, topSpan := (*app.tracingInfo.Tracer).Start(context.Background(), "Block") topSpan.SetAttributes(attribute.Int64("height", req.Header.Height)) app.tracingInfo.BlockSpan = &topSpan - app.tracingInfo.TracerContext = ctx + app.tracingInfo.TracerContext = tracectx _, beginBlockSpan := (*app.tracingInfo.Tracer).Start(app.tracingInfo.TracerContext, "BeginBlock") defer beginBlockSpan.End() - return app.BaseApp.BeginBlock(req) + return app.BaseApp.BeginBlock(ctx, req) } -func (app *App) EndBlock(req abci.RequestEndBlock) (res abci.ResponseEndBlock) { +func (app *App) EndBlock(ctx sdk.Context, req abci.RequestEndBlock) (res abci.ResponseEndBlock) { _, span := (*app.tracingInfo.Tracer).Start(app.tracingInfo.TracerContext, "EndBlock") defer span.End() - return app.BaseApp.EndBlock(req) + return app.BaseApp.EndBlock(ctx, req) } func (app *App) CheckTx(ctx context.Context, req *abci.RequestCheckTx) (*abci.ResponseCheckTx, error) { @@ -29,13 +30,13 @@ func (app *App) CheckTx(ctx context.Context, req *abci.RequestCheckTx) (*abci.Re return app.BaseApp.CheckTx(ctx, req) } -func (app *App) DeliverTx(req abci.RequestDeliverTx) abci.ResponseDeliverTx { - ctx, span := (*app.tracingInfo.Tracer).Start(app.tracingInfo.TracerContext, "DeliverTx") +func (app *App) DeliverTx(ctx sdk.Context, req abci.RequestDeliverTx) abci.ResponseDeliverTx { + tracectx, span := (*app.tracingInfo.Tracer).Start(app.tracingInfo.TracerContext, "DeliverTx") oldCtx := app.tracingInfo.TracerContext - app.tracingInfo.TracerContext = ctx + app.tracingInfo.TracerContext = tracectx defer span.End() defer func() { app.tracingInfo.TracerContext = oldCtx }() - return app.BaseApp.DeliverTx(req) + return app.BaseApp.DeliverTx(ctx, req) } func (app *App) Commit(ctx context.Context) (res *abci.ResponseCommit, err error) { diff --git a/app/app.go b/app/app.go index 2be49b50f7..e8c64ec442 100644 --- a/app/app.go +++ b/app/app.go @@ -1,6 +1,7 @@ package app import ( + "bytes" "context" "encoding/json" "fmt" @@ -8,6 +9,7 @@ import ( "os" "path/filepath" "strings" + "time" storetypes "github.com/cosmos/cosmos-sdk/store/types" @@ -101,8 +103,10 @@ import ( "github.com/sei-protocol/sei-chain/utils/tracing" dexmodule "github.com/sei-protocol/sei-chain/x/dex" + dexcache "github.com/sei-protocol/sei-chain/x/dex/cache" dexmodulekeeper "github.com/sei-protocol/sei-chain/x/dex/keeper" dexmoduletypes "github.com/sei-protocol/sei-chain/x/dex/types" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" oraclemodule "github.com/sei-protocol/sei-chain/x/oracle" oraclekeeper "github.com/sei-protocol/sei-chain/x/oracle/keeper" @@ -313,6 +317,8 @@ type App struct { tracingInfo *tracing.Info configurator module.Configurator + + optimisticProcessingInfo *OptimisticProcessingInfo } // New returns a reference to an initialized blockchain app @@ -334,7 +340,7 @@ func New( cdc := encodingConfig.Amino interfaceRegistry := encodingConfig.InterfaceRegistry - bApp := baseapp.NewBaseApp(AppName, logger, db, encodingConfig.TxConfig.TxDecoder(), baseAppOptions...) + bApp := baseapp.NewBaseApp(AppName, logger, db, encodingConfig.TxConfig.TxDecoder(), appOpts, baseAppOptions...) bApp.SetCommitMultiStoreTracer(traceStore) bApp.SetVersion(version.Version) bApp.SetInterfaceRegistry(interfaceRegistry) @@ -849,21 +855,71 @@ func (app *App) PrepareProposalHandler(ctx sdk.Context, req *abci.RequestPrepare } func (app *App) ProcessProposalHandler(ctx sdk.Context, req *abci.RequestProcessProposal) (*abci.ResponseProcessProposal, error) { + if app.optimisticProcessingInfo == nil { + completionSignal := make(chan struct{}, 1) + optimisticProcessingInfo := &OptimisticProcessingInfo{ + Height: req.Height, + Hash: req.Hash, + Completion: completionSignal, + } + app.optimisticProcessingInfo = optimisticProcessingInfo + go func() { + events, txResults, endBlockResp, _ := app.ProcessBlock(ctx, req.Txs, req, req.ProposedLastCommit) + optimisticProcessingInfo.Events = events + optimisticProcessingInfo.TxRes = txResults + optimisticProcessingInfo.EndBlockResp = endBlockResp + optimisticProcessingInfo.Completion <- struct{}{} + }() + } else if !bytes.Equal(app.optimisticProcessingInfo.Hash, req.Hash) { + app.optimisticProcessingInfo.Aborted = true + } return &abci.ResponseProcessProposal{ Status: abci.ResponseProcessProposal_ACCEPT, }, nil } func (app *App) FinalizeBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlock) (*abci.ResponseFinalizeBlock, error) { + startTime := time.Now() + defer func() { + app.optimisticProcessingInfo = nil + duration := time.Since(startTime) + ctx.Logger().Info(fmt.Sprintf("FinalizeBlock took %dms", duration/time.Millisecond)) + }() + + if app.optimisticProcessingInfo != nil && !app.optimisticProcessingInfo.Aborted && bytes.Equal(app.optimisticProcessingInfo.Hash, req.Hash) { + select { + case <-app.optimisticProcessingInfo.Completion: + app.SetProcessProposalStateToCommit() + appHash := app.WriteStateToCommitAndGetWorkingHash() + resp := app.getFinalizeBlockResponse(appHash, app.optimisticProcessingInfo.Events, app.optimisticProcessingInfo.TxRes, app.optimisticProcessingInfo.EndBlockResp) + return &resp, nil + case <-time.After(OptimisticProcessingTimeoutInSeconds * time.Second): + ctx.Logger().Info("optimistic processing timed out") + break + } + } + ctx.Logger().Info("optimistic processing ineligible") + events, txResults, endBlockResp, _ := app.ProcessBlock(ctx, req.Txs, req, req.DecidedLastCommit) + + app.SetDeliverStateToCommit() + appHash := app.WriteStateToCommitAndGetWorkingHash() + resp := app.getFinalizeBlockResponse(appHash, events, txResults, endBlockResp) + return &resp, nil +} + +func (app *App) ProcessBlock(ctx sdk.Context, txs [][]byte, req BlockProcessRequest, lastCommit abci.CommitInfo) ([]abci.Event, []*abci.ExecTxResult, abci.ResponseEndBlock, error) { + goCtx := app.decorateContextWithDexMemState(ctx.Context()) + ctx = ctx.WithContext(goCtx) + events := []abci.Event{} - beginBlockResp := app.BeginBlock(abci.RequestBeginBlock{ - Hash: req.Hash, - ByzantineValidators: utils.Map(req.ByzantineValidators, func(mis abci.Misbehavior) abci.Evidence { + beginBlockReq := abci.RequestBeginBlock{ + Hash: req.GetHash(), + ByzantineValidators: utils.Map(req.GetByzantineValidators(), func(mis abci.Misbehavior) abci.Evidence { return abci.Evidence(mis) }), LastCommitInfo: abci.LastCommitInfo{ - Round: req.DecidedLastCommit.Round, - Votes: utils.Map(req.DecidedLastCommit.Votes, func(vote abci.VoteInfo) abci.VoteInfo { + Round: lastCommit.Round, + Votes: utils.Map(lastCommit.Votes, func(vote abci.VoteInfo) abci.VoteInfo { return abci.VoteInfo{ Validator: vote.Validator, SignedLastBlock: vote.SignedLastBlock, @@ -872,15 +928,17 @@ func (app *App) FinalizeBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlock) }, Header: tmproto.Header{ ChainID: app.ChainID, - Height: req.Height, - Time: req.Time, + Height: req.GetHeight(), + Time: req.GetTime(), ProposerAddress: ctx.BlockHeader().ProposerAddress, }, - }) + } + + beginBlockResp := app.BeginBlock(ctx, beginBlockReq) events = append(events, beginBlockResp.Events...) txResults := []*abci.ExecTxResult{} - for _, tx := range req.Txs { - deliverTxResp := app.DeliverTx(abci.RequestDeliverTx{ + for _, tx := range txs { + deliverTxResp := app.DeliverTx(ctx, abci.RequestDeliverTx{ Tx: tx, }) txResults = append(txResults, &abci.ExecTxResult{ @@ -894,13 +952,16 @@ func (app *App) FinalizeBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlock) Codespace: deliverTxResp.Codespace, }) } - endBlockResp := app.EndBlock(abci.RequestEndBlock{ - Height: req.Height, + endBlockResp := app.EndBlock(ctx, abci.RequestEndBlock{ + Height: req.GetHeight(), }) events = append(events, endBlockResp.Events...) - appHash := app.WriteDeliverStateAndGetWorkingHash() - return &abci.ResponseFinalizeBlock{ + return events, txResults, endBlockResp, nil +} + +func (app *App) getFinalizeBlockResponse(appHash []byte, events []abci.Event, txResults []*abci.ExecTxResult, endBlockResp abci.ResponseEndBlock) abci.ResponseFinalizeBlock { + return abci.ResponseFinalizeBlock{ Events: events, TxResults: txResults, ValidatorUpdates: utils.Map(endBlockResp.ValidatorUpdates, func(v abci.ValidatorUpdate) abci.ValidatorUpdate { @@ -927,7 +988,7 @@ func (app *App) FinalizeBlocker(ctx sdk.Context, req *abci.RequestFinalizeBlock) }, }, AppHash: appHash, - }, nil + } } // LoadHeight loads a particular height @@ -1070,6 +1131,10 @@ func (app *App) BlacklistedAccAddrs() map[string]bool { return blacklistedAddrs } +func (app *App) decorateContextWithDexMemState(base context.Context) context.Context { + return context.WithValue(base, dexutils.DexMemStateContextKey, dexcache.NewMemState()) +} + func init() { // override max wasm size to 1MB wasmtypes.MaxWasmSize = 1024 * 1024 diff --git a/app/apptesting/test_suite.go b/app/apptesting/test_suite.go index 56f6c6d075..860d6192c3 100644 --- a/app/apptesting/test_suite.go +++ b/app/apptesting/test_suite.go @@ -66,7 +66,7 @@ func (s *KeeperTestHelper) Commit() { panic(err) } newHeader := tmtypes.Header{Height: oldHeight + 1, ChainID: oldHeader.ChainID, Time: time.Now().UTC()} - s.App.BeginBlock(abci.RequestBeginBlock{Header: newHeader}) + s.App.BeginBlock(s.Ctx, abci.RequestBeginBlock{Header: newHeader}) s.Ctx = s.App.GetBaseApp().NewContext(false, newHeader) } diff --git a/app/const.go b/app/const.go index 4e3cb4999a..76746a8ff0 100644 --- a/app/const.go +++ b/app/const.go @@ -5,4 +5,6 @@ const ( AccountAddressPrefix = "sei" // Application name AppName = "sei" + + OptimisticProcessingTimeoutInSeconds = 5 ) diff --git a/app/test_helpers.go b/app/test_helpers.go index 7d654a68dd..814b3b8604 100644 --- a/app/test_helpers.go +++ b/app/test_helpers.go @@ -10,6 +10,7 @@ import ( "github.com/CosmWasm/wasmd/x/wasm" crptotypes "github.com/cosmos/cosmos-sdk/crypto/types" "github.com/cosmos/cosmos-sdk/simapp" + cosmostestutil "github.com/cosmos/cosmos-sdk/testutil" sdk "github.com/cosmos/cosmos-sdk/types" slashingtypes "github.com/cosmos/cosmos-sdk/x/slashing/types" "github.com/cosmos/cosmos-sdk/x/staking/teststaking" @@ -123,12 +124,6 @@ func (s *TestWrapper) EndBlock() { s.App.EndBlocker(s.Ctx, reqEndBlock) } -type EmptyAppOptions struct{} - -func (ao EmptyAppOptions) Get(o string) interface{} { - return nil -} - func Setup(isCheckTx bool) *App { db := dbm.NewMemDB() encodingConfig := MakeEncodingConfig() @@ -143,7 +138,7 @@ func Setup(isCheckTx bool) *App { 5, encodingConfig, wasm.EnableAllProposals, - EmptyAppOptions{}, + &cosmostestutil.TestAppOpts{}, EmptyWasmOpts, ) if !isCheckTx { @@ -186,7 +181,7 @@ func SetupTestingAppWithLevelDb(isCheckTx bool) (*App, func()) { 5, encodingConfig, wasm.EnableAllProposals, - EmptyAppOptions{}, + &cosmostestutil.TestAppOpts{}, EmptyWasmOpts, ) if !isCheckTx { diff --git a/app/utils.go b/app/utils.go new file mode 100644 index 0000000000..51ed0501a9 --- /dev/null +++ b/app/utils.go @@ -0,0 +1,26 @@ +package app + +import ( + "time" + + abci "github.com/tendermint/tendermint/abci/types" +) + +type OptimisticProcessingInfo struct { + Height int64 + Hash []byte + Aborted bool + Completion chan struct{} + // result fields + Events []abci.Event + TxRes []*abci.ExecTxResult + EndBlockResp abci.ResponseEndBlock +} + +type BlockProcessRequest interface { + GetHash() []byte + GetTxs() [][]byte + GetByzantineValidators() []abci.Misbehavior + GetHeight() int64 + GetTime() time.Time +} diff --git a/cmd/seid/cmd/root.go b/cmd/seid/cmd/root.go index d6b2373d9a..8dd6d13dad 100644 --- a/cmd/seid/cmd/root.go +++ b/cmd/seid/cmd/root.go @@ -28,6 +28,7 @@ import ( genutilcli "github.com/cosmos/cosmos-sdk/x/genutil/client/cli" "github.com/sei-protocol/sei-chain/app" "github.com/sei-protocol/sei-chain/app/params" + "github.com/sei-protocol/sei-chain/utils/tracing" "github.com/spf13/cast" "github.com/spf13/cobra" tmcli "github.com/tendermint/tendermint/libs/cli" @@ -124,6 +125,10 @@ func initRootCmd( config.Cmd(), ) + tracingProviderOpts, err := tracing.GetTracerProviderOptions(tracing.DefaultTracingURL) + if err != nil { + panic(err) + } // add server commands server.AddCommands( rootCmd, @@ -131,6 +136,7 @@ func initRootCmd( newApp, appExport, addModuleInitFlags, + tracingProviderOpts, ) // add keybase, auxiliary RPC, query, and tx child commands diff --git a/go.mod b/go.mod index 528b2afac1..3a9d155d6d 100644 --- a/go.mod +++ b/go.mod @@ -20,10 +20,10 @@ require ( github.com/stretchr/testify v1.7.2 github.com/tendermint/tendermint v0.37.0-dev github.com/tendermint/tm-db v0.6.8-0.20220519162814-e24b96538a12 - go.opentelemetry.io/otel v1.6.3 - go.opentelemetry.io/otel/exporters/jaeger v1.6.3 - go.opentelemetry.io/otel/sdk v1.6.3 - go.opentelemetry.io/otel/trace v1.6.3 + go.opentelemetry.io/otel v1.9.0 + go.opentelemetry.io/otel/exporters/jaeger v1.9.0 + go.opentelemetry.io/otel/sdk v1.9.0 + go.opentelemetry.io/otel/trace v1.9.0 google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc google.golang.org/grpc v1.48.0 google.golang.org/protobuf v1.28.1 @@ -55,7 +55,6 @@ require ( github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b // indirect github.com/felixge/httpsnoop v1.0.1 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect - github.com/ghodss/yaml v1.0.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.0 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect @@ -75,7 +74,6 @@ require ( github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect @@ -131,9 +129,9 @@ require ( ) replace ( - github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.3 + github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.15 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/keybase/go-keychain => github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 - github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.3 + github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.10 google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index ca7d49ef20..7b9ff66e74 100644 --- a/go.sum +++ b/go.sum @@ -373,7 +373,6 @@ github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmV github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -613,8 +612,6 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= 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= @@ -1099,10 +1096,10 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/sei-protocol/sei-cosmos v0.1.3 h1:TWtnnnCFOmseMklWUUGztCsbL4/3zT5YQDnGy7BILZg= -github.com/sei-protocol/sei-cosmos v0.1.3/go.mod h1:zJulKnuzuNbtCUOeSIEn0v/Jp/PrEJXEcW2j3rbQ/kw= -github.com/sei-protocol/sei-tendermint v0.1.3 h1:/ZDSKQeOLRM53sCYTKPfMQ95YJCs494H4FH4YS1cD0I= -github.com/sei-protocol/sei-tendermint v0.1.3/go.mod h1:z6ZykL+1iLl02bSQmXsA9tzS3MzJFt33zLpIDjEKV2g= +github.com/sei-protocol/sei-cosmos v0.1.15 h1:xwGdXv/N3mRPXqRJfKdFAqd38SywepmQkPw5FDhyjbY= +github.com/sei-protocol/sei-cosmos v0.1.15/go.mod h1:Z6iuVdX6zbTJufXkMyXJh2MKJZmjsGE4M8zk01IewgU= +github.com/sei-protocol/sei-tendermint v0.1.10 h1:htJPj7sP/o7o9pIVfv1JO3HB5DKj4HMHeIjQpg3G1rY= +github.com/sei-protocol/sei-tendermint v0.1.10/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= @@ -1297,14 +1294,14 @@ go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M= go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= -go.opentelemetry.io/otel v1.6.3 h1:FLOfo8f9JzFVFVyU+MSRJc2HdEAXQgm7pIv2uFKRSZE= -go.opentelemetry.io/otel v1.6.3/go.mod h1:7BgNga5fNlF/iZjG06hM3yofffp0ofKCDwSXx1GC4dI= -go.opentelemetry.io/otel/exporters/jaeger v1.6.3 h1:7tvBU1Ydbzq080efuepYYqC1Pv3/vOFBgCSrxLb24d0= -go.opentelemetry.io/otel/exporters/jaeger v1.6.3/go.mod h1:YgX3eZWbJzgrNyNHCK0otGreAMBTIAcObtZS2VRi6sU= -go.opentelemetry.io/otel/sdk v1.6.3 h1:prSHYdwCQOX5DrsEzxowH3nLhoAzEBdZhvrR79scfLs= -go.opentelemetry.io/otel/sdk v1.6.3/go.mod h1:A4iWF7HTXa+GWL/AaqESz28VuSBIcZ+0CV+IzJ5NMiQ= -go.opentelemetry.io/otel/trace v1.6.3 h1:IqN4L+5b0mPNjdXIiZ90Ni4Bl5BRkDQywePLWemd9bc= -go.opentelemetry.io/otel/trace v1.6.3/go.mod h1:GNJQusJlUgZl9/TQBPKU/Y/ty+0iVB5fjhKeJGZPGFs= +go.opentelemetry.io/otel v1.9.0 h1:8WZNQFIB2a71LnANS9JeyidJKKGOOremcUtb/OtHISw= +go.opentelemetry.io/otel v1.9.0/go.mod h1:np4EoPGzoPs3O67xUVNoPPcmSvsfOxNlNA4F4AC+0Eo= +go.opentelemetry.io/otel/exporters/jaeger v1.9.0 h1:gAEgEVGDWwFjcis9jJTOJqZNxDzoZfR12WNIxr7g9Ww= +go.opentelemetry.io/otel/exporters/jaeger v1.9.0/go.mod h1:hquezOLVAybNW6vanIxkdLXTXvzlj2Vn3wevSP15RYs= +go.opentelemetry.io/otel/sdk v1.9.0 h1:LNXp1vrr83fNXTHgU8eO89mhzxb/bbWAsHG6fNf3qWo= +go.opentelemetry.io/otel/sdk v1.9.0/go.mod h1:AEZc8nt5bd2F7BC24J5R0mrjYnpEgYHyTcM/vrSple4= +go.opentelemetry.io/otel/trace v1.9.0 h1:oZaCNJUjWcg60VXWee8lJKlqhPbXAPB51URuR47pQYc= +go.opentelemetry.io/otel/trace v1.9.0/go.mod h1:2737Q0MuG8q1uILYm2YYVkAyLtOofiTNGg6VODnOiPo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= 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= diff --git a/loadtest/contracts/deploy.sh b/loadtest/contracts/deploy.sh index 2c0b45dc17..e054c02b37 100644 --- a/loadtest/contracts/deploy.sh +++ b/loadtest/contracts/deploy.sh @@ -41,10 +41,10 @@ echo "Deploying contracts..." cd $seihome/loadtest/contracts # store echo "Storing..." -jupiterstoreres=$($seidbin tx wasm store jupiter/artifacts/jupiter.wasm -y --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --output=json) -marsstoreres=$($seidbin tx wasm store mars/artifacts/mars.wasm -y --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --output=json) -saturnstoreres=$($seidbin tx wasm store saturn/artifacts/saturn.wasm -y --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --output=json) -venusstoreres=$($seidbin tx wasm store venus/artifacts/venus.wasm -y --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --output=json) +jupiterstoreres=$(printf "12345678\n" | $seidbin tx wasm store jupiter/artifacts/jupiter.wasm -y --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --output=json) +marsstoreres=$(printf "12345678\n" | $seidbin tx wasm store mars/artifacts/mars.wasm -y --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --output=json) +saturnstoreres=$(printf "12345678\n" | $seidbin tx wasm store saturn/artifacts/saturn.wasm -y --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --output=json) +venusstoreres=$(printf "12345678\n" | $seidbin tx wasm store venus/artifacts/venus.wasm -y --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --output=json) jupiterid=$(python3 parser.py code_id $jupiterstoreres) marsid=$(python3 parser.py code_id $marsstoreres) saturnid=$(python3 parser.py code_id $saturnstoreres) @@ -52,47 +52,55 @@ venusid=$(python3 parser.py code_id $venusstoreres) # instantiate echo "Instantiating..." -marsinsres=$($seidbin tx wasm instantiate $marsid '{}' -y --no-admin --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --label=dex --output=json) -saturninsres=$($seidbin tx wasm instantiate $saturnid '{}' -y --no-admin --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --label=dex --output=json) -venusinsres=$($seidbin tx wasm instantiate $venusid '{}' -y --no-admin --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --label=dex --output=json) + +valaddr=$(printf "12345678\n" | $seidbin keys show $(printf "12345678\n" | $seidbin keys show node_admin --output json | jq -r .address) --bech=val --output json | jq -r '.address') +printf "12345678\n" | $seidbin tx staking delegate $valaddr 1000000000usei --from=$keyname --chain-id=$chainid -b block -y + +marsinsres=$(printf "12345678\n" | $seidbin tx wasm instantiate $marsid '{}' -y --no-admin --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --label=dex --output=json) +saturninsres=$(printf "12345678\n" | $seidbin tx wasm instantiate $saturnid '{}' -y --no-admin --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --label=dex --output=json) +venusinsres=$(printf "12345678\n" | $seidbin tx wasm instantiate $venusid '{}' -y --no-admin --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --label=dex --output=json) marsaddr=$(python3 parser.py contract_address $marsinsres) saturnaddr=$(python3 parser.py contract_address $saturninsres) venusaddr=$(python3 parser.py contract_address $venusinsres) -jupiterinsres=$($seidbin tx wasm instantiate $jupiterid '{"mars_address":"'$marsaddr'"}' -y --no-admin --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --label=dex --output=json) +jupiterinsres=$(printf "12345678\n" | $seidbin tx wasm instantiate $jupiterid '{"mars_address":"'$marsaddr'"}' -y --no-admin --from=$keyname --chain-id=$chainid --gas=5000000 --fees=1000000usei --broadcast-mode=block --label=dex --output=json) jupiteraddr=$(python3 parser.py contract_address $jupiterinsres) # register echo "Registering..." -$seidbin tx dex register-contract $marsaddr $marsid false true -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block -$seidbin tx dex register-contract $saturnaddr $saturnid false true $marsaddr -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block -$seidbin tx dex register-contract $venusaddr $venusid false true -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block -$seidbin tx dex register-contract $jupiteraddr $jupiterid false true $marsaddr -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx dex register-contract $marsaddr $marsid false true -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx dex register-contract $saturnaddr $saturnid false true $marsaddr -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx dex register-contract $venusaddr $venusid false true -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx dex register-contract $jupiteraddr $jupiterid false true $marsaddr -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block echo '{"title":"Jupiter","description":"jupiter","batch_contract_pair":[{"contract_addr":"'$jupiteraddr'","pairs":[{"price_denom":"SEI","asset_denom":"ATOM","tick_size":"0.0000001"}]}],"deposit":"1000000usei"}' > jupiter.json -jupiterpair=$($seidbin tx dex register-pairs-proposal jupiter.json -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block --output=json) +jupiterpair=$(printf "12345678\n" | $seidbin tx dex register-pairs-proposal jupiter.json -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block --output=json) jupiterproposalid=$(python3 parser.py proposal_id $jupiterpair) -$seidbin tx gov deposit $jupiterproposalid 10000000usei -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block -$seidbin tx gov vote $jupiterproposalid yes -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx gov deposit $jupiterproposalid 10000000usei -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx gov vote $jupiterproposalid yes -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block echo '{"title":"Mars","description":"mars","batch_contract_pair":[{"contract_addr":"'$marsaddr'","pairs":[{"price_denom":"SEI","asset_denom":"ATOM","tick_size":"0.0000001"}]}],"deposit":"1000000usei"}' > mars.json -marspair=$($seidbin tx dex register-pairs-proposal mars.json -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block --output=json) +marspair=$(printf "12345678\n" | $seidbin tx dex register-pairs-proposal mars.json -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block --output=json) marsproposalid=$(python3 parser.py proposal_id $marspair) -$seidbin tx gov deposit $marsproposalid 10000000usei -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block -$seidbin tx gov vote $marsproposalid yes -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx gov deposit $marsproposalid 10000000usei -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx gov vote $marsproposalid yes -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block echo '{"title":"Saturn","description":"saturn","batch_contract_pair":[{"contract_addr":"'$saturnaddr'","pairs":[{"price_denom":"SEI","asset_denom":"ATOM","tick_size":"0.0000001"}]}],"deposit":"1000000usei"}' > saturn.json -saturnpair=$($seidbin tx dex register-pairs-proposal saturn.json -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block --output=json) +saturnpair=$(printf "12345678\n" | $seidbin tx dex register-pairs-proposal saturn.json -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block --output=json) saturnproposalid=$(python3 parser.py proposal_id $saturnpair) -$seidbin tx gov deposit $saturnproposalid 10000000usei -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block -$seidbin tx gov vote $saturnproposalid yes -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx gov deposit $saturnproposalid 10000000usei -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx gov vote $saturnproposalid yes -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block echo '{"title":"Venus","description":"venus","batch_contract_pair":[{"contract_addr":"'$venusaddr'","pairs":[{"price_denom":"SEI","asset_denom":"ATOM","tick_size":"0.0000001"}]}],"deposit":"1000000usei"}' > venus.json -venuspair=$($seidbin tx dex register-pairs-proposal venus.json -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block --output=json) +venuspair=$(printf "12345678\n" | $seidbin tx dex register-pairs-proposal venus.json -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block --output=json) venusproposalid=$(python3 parser.py proposal_id $venuspair) -$seidbin tx gov deposit $venusproposalid 10000000usei -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block -$seidbin tx gov vote $venusproposalid yes -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx gov deposit $venusproposalid 10000000usei -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block +printf "12345678\n" | $seidbin tx gov vote $venusproposalid yes -y --from=$keyname --chain-id=$chainid --fees=10000000usei --gas=500000 --broadcast-mode=block + +sleep 90 + +printf "12345678\n" | $seidbin tx staking unbond $valaddr 1000000000usei --from=$keyname --chain-id=$chainid -b block -y -echo "Jupiter address: "$jupiteraddr -echo "Mars address: "$marsaddr -echo "Saturn address: "$saturnaddr -echo "Venus address: "$venusaddr +echo $jupiteraddr +echo $marsaddr +echo $saturnaddr +echo $venusaddr diff --git a/scripts/dump_app_state_for_height.sh b/scripts/dump_app_state_for_height.sh index f0f6d9b4c4..85a7163641 100644 --- a/scripts/dump_app_state_for_height.sh +++ b/scripts/dump_app_state_for_height.sh @@ -23,7 +23,7 @@ fi cd $HOME sudo rm -r state_$HEIGHT mkdir state_$HEIGHT -for key in dex wasm oracle epoch mint +for key in dex wasm oracle epoch mint acc bank crisis feegrant staking distribution slashing gov params ibc upgrade evidence transfer tokenfactory do $HOME/go/bin/iaviewer data $HOME/.sei/data/application.db "s/k:"$key"/" $HEIGHT > $HOME/state_$HEIGHT/$key.data $HOME/go/bin/iaviewer shape $HOME/.sei/data/application.db "s/k:"$key"/" $HEIGHT > $HOME/state_$HEIGHT/$key.shape diff --git a/scripts/initialize_local.sh b/scripts/initialize_local.sh index 990429d5ca..7b5f2c21f5 100755 --- a/scripts/initialize_local.sh +++ b/scripts/initialize_local.sh @@ -15,6 +15,7 @@ printf '00000000\n' | ./build/seid add-genesis-account $(./build/seid keys show # generate genesis tx printf '00000000\n' | ./build/seid gentx $test_account_name 70000000000000000000usei --chain-id sei sed -i 's/mode = "full"/mode = "validator"/g' $HOME/.sei/config/config.toml +sed -i 's/indexer = \["null"\]/indexer = \["kv"\]/g' $HOME/.sei/config/config.toml KEY=$(jq '.pub_key' ~/.sei/config/priv_validator_key.json -c) jq '.validators = [{}]' ~/.sei/config/genesis.json > ~/.sei/config/tmp_genesis.json jq '.validators[0] += {"power":"70000000000000"}' ~/.sei/config/tmp_genesis.json > ~/.sei/config/tmp_genesis_2.json @@ -28,5 +29,9 @@ cat ~/.sei/config/genesis.json | jq '.app_state["staking"]["params"]["bond_denom cat ~/.sei/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["max_deposit_period"]="30s"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json cat ~/.sei/config/genesis.json | jq '.app_state["gov"]["voting_params"]["voting_period"]="30s"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json cat ~/.sei/config/genesis.json | jq '.consensus_params["block"]["time_iota_ms"]="30"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json +<<<<<<< HEAD cat ~/.sei/config/genesis.json | jq '.app_state["distribution"]["params"]["community_tax"]="0.000000000000000000"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json -printf '00000000\n' | ./build/seid start --log_level warn \ No newline at end of file +printf '00000000\n' | ./build/seid start --log_level warn +======= +printf '00000000\n' | ./build/seid start --log_level warn --chain-id sei-chain +>>>>>>> 7031e020 (Implement optimistic processing (#222)) diff --git a/scripts/initialize_local_test_node.sh b/scripts/initialize_local_test_node.sh index dfc7a47e97..820f869bf8 100755 --- a/scripts/initialize_local_test_node.sh +++ b/scripts/initialize_local_test_node.sh @@ -3,9 +3,9 @@ echo -n Key Name to Add: read keyname echo -echo -n Release to Build \(please find the latest release on https://github.com/sei-protocol/sei-chain/releases. Example: 1.1.0beta\): -read release -echo +#echo -n Release to Build \(please find the latest release on https://github.com/sei-protocol/sei-chain/releases. Example: 1.1.0beta\): +#read release +#echo docker stop jaeger docker rm jaeger @@ -23,10 +23,10 @@ docker run -d --name jaeger \ jaegertracing/all-in-one:1.33 echo "Building..." -git fetch --tags -f -git checkout $release +#git fetch --tags -f +#git checkout $release make install -git checkout master +#git checkout master sudo -S rm -r ~/.sei/ sudo -S rm -r ~/test_accounts/ ~/go/bin/seid tendermint unsafe-reset-all @@ -63,12 +63,14 @@ if [[ "$OSTYPE" == "linux-gnu"* ]]; then sed -i 's/timeout_commit =.*/timeout_commit = "2000ms"/g' $CONFIG_PATH sed -i 's/skip_timeout_commit =.*/skip_timeout_commit = false/g' $CONFIG_PATH sed -i 's/mode = "full"/mode = "validator"/g' $HOME/.sei/config/config.toml + sed -i 's/indexer = \["null"\]/indexer = \["kv"\]/g' $HOME/.sei/config/config.toml elif [[ "$OSTYPE" == "darwin"* ]]; then sed -i '' 's/timeout_prevote =.*/timeout_prevote = "2000ms"/g' $CONFIG_PATH sed -i '' 's/timeout_precommit =.*/timeout_precommit = "2000ms"/g' $CONFIG_PATH sed -i '' 's/timeout_commit =.*/timeout_commit = "2000ms"/g' $CONFIG_PATH sed -i '' 's/skip_timeout_commit =.*/skip_timeout_commit = false/g' $CONFIG_PATH sed -i '' 's/mode = "full"/mode = "validator"/g' $HOME/.sei/config/config.toml + sed -i '' 's/indexer = \["null"\]/indexer = \["kv"\]/g' $HOME/.sei/config/config.toml else printf "Platform not supported, please ensure that the following values are set in your config.toml:\n" printf "### Consensus Configuration Options ###\n" @@ -77,8 +79,9 @@ else printf "\t timeout_commit = \"2000ms\"\n" printf "\t skip_timeout_commit = false\n" printf "\t mode = validator\n" + printf "\t indexer = [\"kv\"]\n" exit 1 fi # start the chain with log tracing -~/go/bin/seid start --trace \ No newline at end of file +~/go/bin/seid start --trace --chain-id sei-chain \ No newline at end of file diff --git a/scripts/old_initialize_local.sh b/scripts/old_initialize_local.sh index 72607c724b..a5d2352308 100644 --- a/scripts/old_initialize_local.sh +++ b/scripts/old_initialize_local.sh @@ -37,6 +37,7 @@ printf '12345678\n' | ~/go/bin/seid add-genesis-account $(~/go/bin/seid keys sho python3 ./loadtest/scripts/populate_genesis_accounts.py $numtestaccount loc printf '12345678\n' | ~/go/bin/seid gentx $keyname 70000000000000000000usei --chain-id sei-chain sed -i 's/mode = "full"/mode = "validator"/g' $HOME/.sei/config/config.toml +sed -i 's/indexer = \["null"\]/indexer = \["kv"\]/g' $HOME/.sei/config/config.toml KEY=$(jq '.pub_key' ~/.sei/config/priv_validator_key.json -c) jq '.validators = [{}]' ~/.sei/config/genesis.json > ~/.sei/config/tmp_genesis.json jq '.validators[0] += {"power":"70000000000000"}' ~/.sei/config/tmp_genesis.json > ~/.sei/config/tmp_genesis_2.json @@ -80,4 +81,4 @@ else fi # start the chain with log tracing -GORACE="log_path=/tmp/race/seid_race" ~/go/bin/seid start --trace \ No newline at end of file +GORACE="log_path=/tmp/race/seid_race" ~/go/bin/seid start --trace --chain-id sei-chain \ No newline at end of file diff --git a/testutil/keeper/dex.go b/testutil/keeper/dex.go index 527ec29ee7..8b98add356 100644 --- a/testutil/keeper/dex.go +++ b/testutil/keeper/dex.go @@ -1,6 +1,7 @@ package keeper import ( + "context" "testing" "github.com/cosmos/cosmos-sdk/codec" @@ -15,8 +16,10 @@ import ( paramskeeper "github.com/cosmos/cosmos-sdk/x/params/keeper" typesparams "github.com/cosmos/cosmos-sdk/x/params/types" "github.com/sei-protocol/sei-chain/app" + dexcache "github.com/sei-protocol/sei-chain/x/dex/cache" "github.com/sei-protocol/sei-chain/x/dex/keeper" "github.com/sei-protocol/sei-chain/x/dex/types" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" epochkeeper "github.com/sei-protocol/sei-chain/x/epoch/keeper" epochtypes "github.com/sei-protocol/sei-chain/x/epoch/types" "github.com/stretchr/testify/require" @@ -104,7 +107,7 @@ func DexKeeper(t testing.TB) (*keeper.Keeper, sdk.Context) { } bankKeeper.SetParams(ctx, bankParams) - return k, ctx + return k, ctx.WithContext(context.WithValue(ctx.Context(), dexutils.DexMemStateContextKey, dexcache.NewMemState())) } func CreateAssetMetadata(keeper *keeper.Keeper, ctx sdk.Context) types.AssetMetadata { diff --git a/testutil/network/network.go b/testutil/network/network.go index 080c75cac9..84a7f7427e 100644 --- a/testutil/network/network.go +++ b/testutil/network/network.go @@ -58,7 +58,7 @@ func DefaultConfig() network.Config { val.Ctx.Logger, tmdb.NewMemDB(), nil, true, map[int64]bool{}, val.Ctx.Config.RootDir, 0, encoding, wasm.EnableAllProposals, - simapp.EmptyAppOptions{}, + &simapp.EmptyAppOptions{}, nil, baseapp.SetPruning(storetypes.NewPruningOptionsFromString(val.AppConfig.Pruning)), baseapp.SetMinGasPrices(val.AppConfig.MinGasPrices), diff --git a/utils/tracing/tracer.go b/utils/tracing/tracer.go index 2d2e99a468..ec5424cb4d 100644 --- a/utils/tracing/tracer.go +++ b/utils/tracing/tracer.go @@ -18,11 +18,20 @@ func DefaultTracerProvider() (*trace.TracerProvider, error) { func TracerProvider(url string) (*trace.TracerProvider, error) { // Create the Jaeger exporter + opts, err := GetTracerProviderOptions(url) + if err != nil { + return nil, err + } + tp := trace.NewTracerProvider(opts...) + return tp, nil +} + +func GetTracerProviderOptions(url string) ([]trace.TracerProviderOption, error) { exp, err := jaeger.New(jaeger.WithCollectorEndpoint(jaeger.WithEndpoint(url))) if err != nil { return nil, err } - tp := trace.NewTracerProvider( + return []trace.TracerProviderOption{ // Always be sure to batch in production. trace.WithBatcher(exp), // Record information about this application in a Resource. @@ -32,8 +41,7 @@ func TracerProvider(url string) (*trace.TracerProvider, error) { attribute.String("environment", "production"), attribute.Int64("ID", 1), )), - ) - return tp, nil + }, nil } type Info struct { diff --git a/wasmbinding/test/query_test.go b/wasmbinding/test/query_test.go index c26b93db99..924652deed 100644 --- a/wasmbinding/test/query_test.go +++ b/wasmbinding/test/query_test.go @@ -1,6 +1,7 @@ package wasmbinding import ( + "context" "encoding/json" "testing" "time" @@ -10,9 +11,11 @@ import ( "github.com/sei-protocol/sei-chain/app" keepertest "github.com/sei-protocol/sei-chain/testutil/keeper" "github.com/sei-protocol/sei-chain/wasmbinding" + dexcache "github.com/sei-protocol/sei-chain/x/dex/cache" dexwasm "github.com/sei-protocol/sei-chain/x/dex/client/wasm" dexbinding "github.com/sei-protocol/sei-chain/x/dex/client/wasm/bindings" dextypes "github.com/sei-protocol/sei-chain/x/dex/types" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" epochwasm "github.com/sei-protocol/sei-chain/x/epoch/client/wasm" epochbinding "github.com/sei-protocol/sei-chain/x/epoch/client/wasm/bindings" epochtypes "github.com/sei-protocol/sei-chain/x/epoch/types" @@ -268,6 +271,7 @@ func TestWasmGetOrderSimulation(t *testing.T) { require.NoError(t, err) testWrapper.Ctx = testWrapper.Ctx.WithBlockHeight(11).WithBlockTime(time.Unix(3600, 0)) + testWrapper.Ctx = testWrapper.Ctx.WithContext(context.WithValue(testWrapper.Ctx.Context(), dexutils.DexMemStateContextKey, dexcache.NewMemState())) testWrapper.App.DexKeeper.AddRegisteredPair( testWrapper.Ctx, app.TestContract, @@ -280,6 +284,7 @@ func TestWasmGetOrderSimulation(t *testing.T) { }, app.TestContract) testWrapper.App.OracleKeeper.SetBaseExchangeRate(testWrapper.Ctx, oracleutils.MicroAtomDenom, sdk.NewDec(12)) testWrapper.Ctx = testWrapper.Ctx.WithBlockHeight(14).WithBlockTime(time.Unix(3700, 0)) + testWrapper.Ctx = testWrapper.Ctx.WithContext(context.WithValue(testWrapper.Ctx.Context(), dexutils.DexMemStateContextKey, dexcache.NewMemState())) res, err := customQuerier(testWrapper.Ctx, rawQuery) require.NoError(t, err) diff --git a/x/dex/contract/abci.go b/x/dex/contract/abci.go index e0154a98c1..76a47d594d 100644 --- a/x/dex/contract/abci.go +++ b/x/dex/contract/abci.go @@ -19,6 +19,7 @@ import ( "github.com/sei-protocol/sei-chain/x/dex/types" dextypesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" dextypeswasm "github.com/sei-protocol/sei-chain/x/dex/types/wasm" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" "github.com/sei-protocol/sei-chain/x/store" otrace "go.opentelemetry.io/otel/trace" ) @@ -36,13 +37,13 @@ type environment struct { eventManagerMutex *sync.Mutex } -func EndBlockerAtomic(ctx sdk.Context, keeper *keeper.Keeper, validContractsInfo []types.ContractInfo, tracingInfo *tracing.Info) ([]types.ContractInfo, bool) { +func EndBlockerAtomic(ctx sdk.Context, keeper *keeper.Keeper, validContractsInfo []types.ContractInfo, tracingInfo *tracing.Info) ([]types.ContractInfo, sdk.Context, bool) { tracer := tracingInfo.Tracer spanCtx, span := (*tracer).Start(tracingInfo.TracerContext, "DexEndBlockerAtomic") defer span.End() env := newEnv(ctx, validContractsInfo, keeper) ctx, msCached := cacheAndDecorateContext(ctx, env) - memStateCopy := keeper.MemState.DeepCopy() + memStateCopy := dexutils.GetMemState(ctx.Context()).DeepCopy() handleDeposits(ctx, env, keeper, tracer) @@ -58,12 +59,12 @@ func EndBlockerAtomic(ctx sdk.Context, keeper *keeper.Keeper, validContractsInfo // No error is thrown for any contract. This should happen most of the time. if env.failedContractAddresses.Size() == 0 { msCached.Write() - return env.validContractsInfo, true + return env.validContractsInfo, ctx, true } // restore keeper in-memory state - *keeper.MemState = *memStateCopy + newGoContext := context.WithValue(ctx.Context(), dexutils.DexMemStateContextKey, memStateCopy) - return filterNewValidContracts(env, keeper), false + return filterNewValidContracts(ctx, env), ctx.WithContext(newGoContext), false } func newEnv(ctx sdk.Context, validContractsInfo []types.ContractInfo, keeper *keeper.Keeper) *environment { @@ -233,7 +234,7 @@ func orderMatchingRecoverCallback(err any, ctx sdk.Context, env *environment, co env.failedContractAddresses.Add(contractInfo.ContractAddr) } -func filterNewValidContracts(env *environment, keeper *keeper.Keeper) []types.ContractInfo { +func filterNewValidContracts(ctx sdk.Context, env *environment) []types.ContractInfo { newValidContracts := []types.ContractInfo{} for _, contract := range env.validContractsInfo { if !env.failedContractAddresses.Contains(contract.ContractAddr) { @@ -241,7 +242,7 @@ func filterNewValidContracts(env *environment, keeper *keeper.Keeper) []types.Co } } for _, failedContractAddress := range env.failedContractAddresses.ToOrderedSlice(datastructures.StringComparator) { - keeper.MemState.DeepFilterAccount(failedContractAddress) + dexutils.GetMemState(ctx.Context()).DeepFilterAccount(failedContractAddress) } return newValidContracts } diff --git a/x/dex/contract/execution.go b/x/dex/contract/execution.go index 03d4858c22..1820281ba8 100644 --- a/x/dex/contract/execution.go +++ b/x/dex/contract/execution.go @@ -22,6 +22,7 @@ import ( "github.com/sei-protocol/sei-chain/x/dex/types" dextypesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" dextypeswasm "github.com/sei-protocol/sei-chain/x/dex/types/wasm" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" "go.opentelemetry.io/otel/attribute" ) @@ -57,14 +58,14 @@ func ExecutePair( typedPairStr := dextypesutils.GetPairString(&pair) // First cancel orders - cancelForPair(ctx, typedContractAddr, typedPairStr, dexkeeper, orderbook) + cancelForPair(ctx, typedContractAddr, typedPairStr, orderbook) // Add all limit orders to the orderbook orders := dexkeeper.MemState.GetBlockOrders(ctx, typedContractAddr, typedPairStr) limitBuys := orders.GetLimitOrders(types.PositionDirection_LONG) limitSells := orders.GetLimitOrders(types.PositionDirection_SHORT) exchange.AddOutstandingLimitOrdersToOrderbook(orderbook, limitBuys, limitSells) // Fill market orders - marketOrderOutcome := matchMarketOrderForPair(ctx, typedContractAddr, typedPairStr, dexkeeper, orderbook) + marketOrderOutcome := matchMarketOrderForPair(ctx, typedContractAddr, typedPairStr, orderbook) // Fill limit orders limitOrderOutcome := exchange.MatchLimitOrders(ctx, orderbook) totalOutcome := marketOrderOutcome.Merge(&limitOrderOutcome) @@ -80,10 +81,9 @@ func cancelForPair( ctx sdk.Context, typedContractAddr dextypesutils.ContractAddress, typedPairStr dextypesutils.PairString, - dexkeeper *keeper.Keeper, orderbook *types.OrderBook, ) { - cancels := dexkeeper.MemState.GetBlockCancels(ctx, typedContractAddr, typedPairStr) + cancels := dexutils.GetMemState(ctx.Context()).GetBlockCancels(ctx, typedContractAddr, typedPairStr) exchange.CancelOrders(cancels.Get(), orderbook) } @@ -91,10 +91,9 @@ func matchMarketOrderForPair( ctx sdk.Context, typedContractAddr dextypesutils.ContractAddress, typedPairStr dextypesutils.PairString, - dexkeeper *keeper.Keeper, orderbook *types.OrderBook, ) exchange.ExecutionOutcome { - orders := dexkeeper.MemState.GetBlockOrders(ctx, typedContractAddr, typedPairStr) + orders := dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, typedContractAddr, typedPairStr) marketBuys := orders.GetSortedMarketOrders(types.PositionDirection_LONG, true) marketSells := orders.GetSortedMarketOrders(types.PositionDirection_SHORT, true) marketBuyOutcome := exchange.MatchMarketOrders( @@ -170,10 +169,9 @@ func GetMatchResults( ctx sdk.Context, typedContractAddr dextypesutils.ContractAddress, typedPairStr dextypesutils.PairString, - dexkeeper *keeper.Keeper, ) ([]*types.Order, []*types.Cancellation) { orderResults := []*types.Order{} - orders := dexkeeper.MemState.GetBlockOrders(ctx, typedContractAddr, typedPairStr) + orders := dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, typedContractAddr, typedPairStr) // First add any new order, whether successfully placed or not, to the store for _, order := range orders.Get() { if order.Quantity.IsZero() { @@ -182,7 +180,7 @@ func GetMatchResults( orderResults = append(orderResults, order) } // Then update order status and insert cancel record for any cancellation - cancelResults := dexkeeper.MemState.GetBlockCancels(ctx, typedContractAddr, typedPairStr).Get() + cancelResults := dexutils.GetMemState(ctx.Context()).GetBlockCancels(ctx, typedContractAddr, typedPairStr).Get() return orderResults, cancelResults } @@ -230,11 +228,11 @@ func ExecutePairsInParallel(ctx sdk.Context, contractAddr string, dexkeeper *kee } pairSettlements := ExecutePair(pairCtx, contractAddr, pair, dexkeeper, orderbook.DeepCopy()) orderIDToSettledQuantities := GetOrderIDToSettledQuantities(pairSettlements) - PrepareCancelUnfulfilledMarketOrders(pairCtx, typedContractAddr, pairStr, dexkeeper, orderIDToSettledQuantities) + PrepareCancelUnfulfilledMarketOrders(pairCtx, typedContractAddr, pairStr, orderIDToSettledQuantities) mu.Lock() defer mu.Unlock() - orders, cancels := GetMatchResults(ctx, typedContractAddr, dextypesutils.GetPairString(&pairCopy), dexkeeper) + orders, cancels := GetMatchResults(ctx, typedContractAddr, dextypesutils.GetPairString(&pairCopy)) orderResults = append(orderResults, orders...) cancelResults = append(cancelResults, cancels...) settlements = append(settlements, pairSettlements...) diff --git a/x/dex/contract/market_order.go b/x/dex/contract/market_order.go index 179884d165..4b7f39243a 100644 --- a/x/dex/contract/market_order.go +++ b/x/dex/contract/market_order.go @@ -8,6 +8,7 @@ import ( dexkeeperabci "github.com/sei-protocol/sei-chain/x/dex/keeper/abci" "github.com/sei-protocol/sei-chain/x/dex/types" dextypesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" "go.opentelemetry.io/otel/attribute" otrace "go.opentelemetry.io/otel/trace" ) @@ -16,12 +17,11 @@ func PrepareCancelUnfulfilledMarketOrders( ctx sdk.Context, typedContractAddr dextypesutils.ContractAddress, typedPairStr dextypesutils.PairString, - dexkeeper *keeper.Keeper, orderIDToSettledQuantities map[uint64]sdk.Dec, ) { - dexkeeper.MemState.ClearCancellationForPair(ctx, typedContractAddr, typedPairStr) - for _, marketOrderID := range getUnfulfilledPlacedMarketOrderIds(ctx, typedContractAddr, typedPairStr, dexkeeper, orderIDToSettledQuantities) { - dexkeeper.MemState.GetBlockCancels(ctx, typedContractAddr, typedPairStr).Add(&types.Cancellation{ + dexutils.GetMemState(ctx.Context()).ClearCancellationForPair(ctx, typedContractAddr, typedPairStr) + for _, marketOrderID := range getUnfulfilledPlacedMarketOrderIds(ctx, typedContractAddr, typedPairStr, orderIDToSettledQuantities) { + dexutils.GetMemState(ctx.Context()).GetBlockCancels(ctx, typedContractAddr, typedPairStr).Add(&types.Cancellation{ Id: marketOrderID, Initiator: types.CancellationInitiator_USER, }) @@ -32,11 +32,10 @@ func getUnfulfilledPlacedMarketOrderIds( ctx sdk.Context, typedContractAddr dextypesutils.ContractAddress, typedPairStr dextypesutils.PairString, - dexkeeper *keeper.Keeper, orderIDToSettledQuantities map[uint64]sdk.Dec, ) []uint64 { res := []uint64{} - for _, order := range dexkeeper.MemState.GetBlockOrders(ctx, typedContractAddr, typedPairStr).Get() { + for _, order := range dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, typedContractAddr, typedPairStr).Get() { if order.Status == types.OrderStatus_FAILED_TO_PLACE { continue } diff --git a/x/dex/keeper/abci/end_block_cancel_orders.go b/x/dex/keeper/abci/end_block_cancel_orders.go index 5465f0c3df..937a2b8c8f 100644 --- a/x/dex/keeper/abci/end_block_cancel_orders.go +++ b/x/dex/keeper/abci/end_block_cancel_orders.go @@ -9,6 +9,7 @@ import ( "github.com/sei-protocol/sei-chain/x/dex/types" typesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" "github.com/sei-protocol/sei-chain/x/dex/types/wasm" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" "go.opentelemetry.io/otel/attribute" otrace "go.opentelemetry.io/otel/trace" ) @@ -31,7 +32,7 @@ func (w KeeperWrapper) getCancelSudoMsg(sdkCtx sdk.Context, typedContractAddr ty idsToCancel := []uint64{} for _, pair := range registeredPairs { typedPairStr := typesutils.GetPairString(&pair) //nolint:gosec // THIS MAY BE CAUSE FOR CONCERN AND WE MIGHT WANT TO REFACTOR. - for _, cancel := range w.MemState.GetBlockCancels(sdkCtx, typedContractAddr, typedPairStr).Get() { + for _, cancel := range dexutils.GetMemState(sdkCtx.Context()).GetBlockCancels(sdkCtx, typedContractAddr, typedPairStr).Get() { idsToCancel = append(idsToCancel, cancel.Id) } } diff --git a/x/dex/keeper/abci/end_block_deposit.go b/x/dex/keeper/abci/end_block_deposit.go index 63c55d7918..22662ad0a9 100644 --- a/x/dex/keeper/abci/end_block_deposit.go +++ b/x/dex/keeper/abci/end_block_deposit.go @@ -9,6 +9,7 @@ import ( "github.com/sei-protocol/sei-chain/x/dex/types" typesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" "github.com/sei-protocol/sei-chain/x/dex/types/wasm" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" "go.opentelemetry.io/otel/attribute" otrace "go.opentelemetry.io/otel/trace" ) @@ -31,7 +32,7 @@ func (w KeeperWrapper) HandleEBDeposit(ctx context.Context, sdkCtx sdk.Context, func (w KeeperWrapper) GetDepositSudoMsg(ctx sdk.Context, typedContractAddr typesutils.ContractAddress) wasm.SudoOrderPlacementMsg { contractDepositInfo := []wasm.ContractDepositInfo{} - for _, depositInfo := range w.MemState.GetDepositInfo(ctx, typedContractAddr).Get() { + for _, depositInfo := range dexutils.GetMemState(ctx.Context()).GetDepositInfo(ctx, typedContractAddr).Get() { fund := sdk.NewCoins(sdk.NewCoin(depositInfo.Denom, depositInfo.Amount.RoundInt())) sender, err := sdk.AccAddressFromBech32(depositInfo.Creator) if err != nil { diff --git a/x/dex/keeper/abci/end_block_place_orders.go b/x/dex/keeper/abci/end_block_place_orders.go index 70c84746ec..b939c9a10b 100644 --- a/x/dex/keeper/abci/end_block_place_orders.go +++ b/x/dex/keeper/abci/end_block_place_orders.go @@ -10,6 +10,7 @@ import ( "github.com/sei-protocol/sei-chain/x/dex/types" typesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" "github.com/sei-protocol/sei-chain/x/dex/types/wasm" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" "go.opentelemetry.io/otel/attribute" otrace "go.opentelemetry.io/otel/trace" ) @@ -46,7 +47,7 @@ func (w KeeperWrapper) HandleEBPlaceOrders(ctx context.Context, sdkCtx sdk.Conte for _, pair := range registeredPairs { typedPairStr := typesutils.GetPairString(&pair) //nolint:gosec // USING THE POINTER HERE COULD BE BAD, LET'S CHECK IT. for _, response := range responses { - w.MemState.GetBlockOrders(sdkCtx, typedContractAddr, typedPairStr).MarkFailedToPlace(response.UnsuccessfulOrders) + dexutils.GetMemState(sdkCtx.Context()).GetBlockOrders(sdkCtx, typedContractAddr, typedPairStr).MarkFailedToPlace(response.UnsuccessfulOrders) } } return nil @@ -57,7 +58,7 @@ func (w KeeperWrapper) GetPlaceSudoMsg(ctx sdk.Context, typedContractAddr typesu contractOrderPlacements := []types.Order{} for _, pair := range registeredPairs { typedPairStr := typesutils.GetPairString(&pair) //nolint:gosec // USING THE POINTER HERE COULD BE BAD, LET'S CHECK IT. - for _, order := range w.MemState.GetBlockOrders(ctx, typedContractAddr, typedPairStr).Get() { + for _, order := range dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, typedContractAddr, typedPairStr).Get() { contractOrderPlacements = append(contractOrderPlacements, *order) if len(contractOrderPlacements) == MaxOrdersPerSudoCall { msgs = append(msgs, wasm.SudoOrderPlacementMsg{ diff --git a/x/dex/keeper/abci/end_block_place_orders_test.go b/x/dex/keeper/abci/end_block_place_orders_test.go index b46ac896ed..e9f6c027cc 100644 --- a/x/dex/keeper/abci/end_block_place_orders_test.go +++ b/x/dex/keeper/abci/end_block_place_orders_test.go @@ -1,14 +1,17 @@ package abci_test import ( + "context" "testing" sdk "github.com/cosmos/cosmos-sdk/types" keepertest "github.com/sei-protocol/sei-chain/testutil/keeper" dex "github.com/sei-protocol/sei-chain/x/dex/cache" + dexcache "github.com/sei-protocol/sei-chain/x/dex/cache" "github.com/sei-protocol/sei-chain/x/dex/keeper/abci" "github.com/sei-protocol/sei-chain/x/dex/types" typesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" minttypes "github.com/sei-protocol/sei-chain/x/mint/types" "github.com/stretchr/testify/require" tmproto "github.com/tendermint/tendermint/proto/tendermint/types" @@ -17,7 +20,7 @@ import ( func TestGetPlaceSudoMsg(t *testing.T) { pair := types.Pair{PriceDenom: keepertest.TestPriceDenom, AssetDenom: keepertest.TestAssetDenom} keeper, ctx := keepertest.DexKeeper(t) - keeper.MemState.GetBlockOrders(ctx, keepertest.TestContract, typesutils.GetPairString(&pair)).Add( + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, keepertest.TestContract, typesutils.GetPairString(&pair)).Add( &types.Order{ Id: 1, Price: sdk.OneDec(), @@ -37,13 +40,14 @@ func TestGetPlaceSudoMsg(t *testing.T) { func TestGetDepositSudoMsg(t *testing.T) { testApp := keepertest.TestApp() ctx := testApp.BaseApp.NewContext(false, tmproto.Header{}) + ctx = ctx.WithContext(context.WithValue(ctx.Context(), dexutils.DexMemStateContextKey, dexcache.NewMemState())) bankkeeper := testApp.BankKeeper testAccount, _ := sdk.AccAddressFromBech32("sei1yezq49upxhunjjhudql2fnj5dgvcwjj87pn2wx") amounts := sdk.NewCoins(sdk.NewCoin("usei", sdk.NewInt(1000000))) bankkeeper.MintCoins(ctx, minttypes.ModuleName, amounts) bankkeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, testAccount, amounts) keeper := testApp.DexKeeper - keeper.MemState.GetDepositInfo(ctx, keepertest.TestContract).Add( + dexutils.GetMemState(ctx.Context()).GetDepositInfo(ctx, keepertest.TestContract).Add( &dex.DepositInfoEntry{ Creator: testAccount.String(), Denom: amounts[0].Denom, diff --git a/x/dex/keeper/msgserver/msg_server_cancel_orders.go b/x/dex/keeper/msgserver/msg_server_cancel_orders.go index 564939f5b5..d0dfbbe382 100644 --- a/x/dex/keeper/msgserver/msg_server_cancel_orders.go +++ b/x/dex/keeper/msgserver/msg_server_cancel_orders.go @@ -8,6 +8,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/sei-protocol/sei-chain/x/dex/types" typesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" ) func (k msgServer) CancelOrders(goCtx context.Context, msg *types.MsgCancelOrders) (*types.MsgCancelOrdersResponse, error) { @@ -34,7 +35,7 @@ func (k msgServer) CancelOrders(goCtx context.Context, msg *types.MsgCancelOrder } pair := types.Pair{PriceDenom: cancellation.PriceDenom, AssetDenom: cancellation.AssetDenom} pairStr := typesutils.GetPairString(&pair) - pairBlockCancellations := k.MemState.GetBlockCancels(ctx, typesutils.ContractAddress(msg.GetContractAddr()), pairStr) + pairBlockCancellations := dexutils.GetMemState(ctx.Context()).GetBlockCancels(ctx, typesutils.ContractAddress(msg.GetContractAddr()), pairStr) cancelledInCurrentBlock := false for _, cancelInCurrentBlock := range pairBlockCancellations.Get() { if cancelInCurrentBlock.Id == cancellation.Id { diff --git a/x/dex/keeper/msgserver/msg_server_place_orders.go b/x/dex/keeper/msgserver/msg_server_place_orders.go index eeb9567599..ebfd752f44 100644 --- a/x/dex/keeper/msgserver/msg_server_place_orders.go +++ b/x/dex/keeper/msgserver/msg_server_place_orders.go @@ -10,6 +10,7 @@ import ( dexcache "github.com/sei-protocol/sei-chain/x/dex/cache" "github.com/sei-protocol/sei-chain/x/dex/types" typesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" ) func (k msgServer) transferFunds(goCtx context.Context, msg *types.MsgPlaceOrders) error { @@ -38,7 +39,7 @@ func (k msgServer) transferFunds(goCtx context.Context, msg *types.MsgPlaceOrder if fund.Amount.IsNil() || fund.IsNegative() { return errors.New("fund deposits cannot be nil or negative") } - k.MemState.GetDepositInfo(ctx, typesutils.ContractAddress(msg.GetContractAddr())).Add(&dexcache.DepositInfoEntry{ + dexutils.GetMemState(ctx.Context()).GetDepositInfo(ctx, typesutils.ContractAddress(msg.GetContractAddr())).Add(&dexcache.DepositInfoEntry{ Creator: msg.Creator, Denom: fund.Denom, Amount: sdk.NewDec(fund.Amount.Int64()), @@ -72,7 +73,7 @@ func (k msgServer) PlaceOrders(goCtx context.Context, msg *types.MsgPlaceOrders) order.Id = nextID order.Account = msg.Creator order.ContractAddr = msg.GetContractAddr() - k.MemState.GetBlockOrders(ctx, typesutils.ContractAddress(msg.GetContractAddr()), pairStr).Add(order) + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, typesutils.ContractAddress(msg.GetContractAddr()), pairStr).Add(order) idsInResp = append(idsInResp, nextID) nextID++ } diff --git a/x/dex/keeper/query/grpc_query_order_simulation.go b/x/dex/keeper/query/grpc_query_order_simulation.go index 5c011b053e..ce28992bde 100644 --- a/x/dex/keeper/query/grpc_query_order_simulation.go +++ b/x/dex/keeper/query/grpc_query_order_simulation.go @@ -7,6 +7,7 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/sei-protocol/sei-chain/x/dex/types" "github.com/sei-protocol/sei-chain/x/dex/types/utils" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" ) type priceQuantity struct { @@ -52,7 +53,7 @@ func (k KeeperWrapper) getMatchedPriceQuantities(ctx sdk.Context, req *types.Que // exclude liquidity to be cancelled pair := types.Pair{PriceDenom: req.Order.PriceDenom, AssetDenom: req.Order.AssetDenom} - for _, cancel := range k.MemState.GetBlockCancels(ctx, utils.ContractAddress(req.ContractAddr), utils.GetPairString(&pair)).Get() { + for _, cancel := range dexutils.GetMemState(ctx.Context()).GetBlockCancels(ctx, utils.ContractAddress(req.ContractAddr), utils.GetPairString(&pair)).Get() { var cancelledAllocation *types.Allocation var found bool if cancel.PositionDirection == types.PositionDirection_LONG { @@ -85,7 +86,7 @@ func (k KeeperWrapper) getMatchedPriceQuantities(ctx sdk.Context, req *types.Que // exclude liquidity to be taken ptr := 0 - for _, order := range k.MemState.GetBlockOrders(ctx, utils.ContractAddress(req.ContractAddr), utils.GetPairString(&pair)).GetSortedMarketOrders( + for _, order := range dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(req.ContractAddr), utils.GetPairString(&pair)).GetSortedMarketOrders( orderDirection, false, ) { // If existing market order has price zero, it means it doesn't specify a worst price and will always have precedence over the simulated diff --git a/x/dex/keeper/query/grpc_query_order_simulation_test.go b/x/dex/keeper/query/grpc_query_order_simulation_test.go index 9c6bd6b5da..7148a21804 100644 --- a/x/dex/keeper/query/grpc_query_order_simulation_test.go +++ b/x/dex/keeper/query/grpc_query_order_simulation_test.go @@ -8,6 +8,7 @@ import ( "github.com/sei-protocol/sei-chain/x/dex/keeper/query" "github.com/sei-protocol/sei-chain/x/dex/types" "github.com/sei-protocol/sei-chain/x/dex/types/utils" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" "github.com/stretchr/testify/require" ) @@ -76,7 +77,7 @@ func TestGetOrderSimulation(t *testing.T) { }, }, }) - keeper.MemState.GetBlockCancels(ctx, utils.ContractAddress(keepertest.TestContract), utils.GetPairString(&keepertest.TestPair)).Add( + dexutils.GetMemState(ctx.Context()).GetBlockCancels(ctx, utils.ContractAddress(keepertest.TestContract), utils.GetPairString(&keepertest.TestPair)).Add( &types.Cancellation{Id: 1, Price: sdk.MustNewDecFromStr("9"), PositionDirection: types.PositionDirection_SHORT, PriceDenom: keepertest.TestPriceDenom, AssetDenom: keepertest.TestAssetDenom}, ) res, err = wrapper.GetOrderSimulation(wctx, &types.QueryOrderSimulationRequest{Order: &testOrder, ContractAddr: keepertest.TestContract}) @@ -84,7 +85,7 @@ func TestGetOrderSimulation(t *testing.T) { require.Equal(t, sdk.OneDec(), *res.ExecutedQuantity) // liquidity taken by earlier market orders - keeper.MemState.GetBlockOrders(ctx, utils.ContractAddress(keepertest.TestContract), utils.GetPairString(&keepertest.TestPair)).Add( + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(keepertest.TestContract), utils.GetPairString(&keepertest.TestPair)).Add( &types.Order{ Account: keepertest.TestAccount, PriceDenom: keepertest.TestPriceDenom, diff --git a/x/dex/module.go b/x/dex/module.go index 149967535b..37dd02454e 100644 --- a/x/dex/module.go +++ b/x/dex/module.go @@ -29,6 +29,7 @@ import ( dexkeeperquery "github.com/sei-protocol/sei-chain/x/dex/keeper/query" "github.com/sei-protocol/sei-chain/x/dex/migrations" "github.com/sei-protocol/sei-chain/x/dex/types" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" ) var ( @@ -219,7 +220,7 @@ func (am AppModule) BeginBlock(ctx sdk.Context, _ abci.RequestBeginBlock) { }() defer utils.PanicHandler(func(err any) { utils.MetricsPanicCallback(err, ctx, types.ModuleName) })() - am.keeper.MemState.Clear() + dexutils.GetMemState(ctx.Context()).Clear() isNewEpoch, currentEpoch := am.keeper.IsNewEpoch(ctx) if isNewEpoch { am.keeper.SetEpoch(ctx, currentEpoch) @@ -271,7 +272,7 @@ func (am AppModule) EndBlock(ctx sdk.Context, _ abci.RequestEndBlock) (ret []abc // `validContractAddresses` will always decrease in size every iteration. iterCounter := len(validContractsInfo) for len(validContractsInfo) > 0 { - newValidContractsInfo, ok := contract.EndBlockerAtomic(ctx, &am.keeper, validContractsInfo, am.tracingInfo) + newValidContractsInfo, ctx, ok := contract.EndBlockerAtomic(ctx, &am.keeper, validContractsInfo, am.tracingInfo) if ok { break } diff --git a/x/dex/module_test.go b/x/dex/module_test.go index 8c2b07d286..0f65dd0fff 100644 --- a/x/dex/module_test.go +++ b/x/dex/module_test.go @@ -1,6 +1,7 @@ package dex_test import ( + "context" "io/ioutil" "testing" "time" @@ -13,6 +14,7 @@ import ( dexkeeperabci "github.com/sei-protocol/sei-chain/x/dex/keeper/abci" "github.com/sei-protocol/sei-chain/x/dex/types" "github.com/sei-protocol/sei-chain/x/dex/types/utils" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" minttypes "github.com/sei-protocol/sei-chain/x/mint/types" "github.com/stretchr/testify/require" abci "github.com/tendermint/tendermint/abci/types" @@ -35,6 +37,7 @@ const ( func TestEndBlockMarketOrder(t *testing.T) { testApp := keepertest.TestApp() ctx := testApp.BaseApp.NewContext(false, tmproto.Header{Time: time.Now()}) + ctx = ctx.WithContext(context.WithValue(ctx.Context(), dexutils.DexMemStateContextKey, dexcache.NewMemState())) dexkeeper := testApp.DexKeeper pair := types.Pair{PriceDenom: "SEI", AssetDenom: "ATOM"} @@ -62,7 +65,7 @@ func TestEndBlockMarketOrder(t *testing.T) { dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: true, NeedOrderMatching: true}) dexkeeper.AddRegisteredPair(ctx, contractAddr.String(), pair) // place one order to a nonexistent contract - dexkeeper.MemState.GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( &types.Order{ Id: 1, Account: testAccount.String(), @@ -76,7 +79,7 @@ func TestEndBlockMarketOrder(t *testing.T) { Data: "{\"position_effect\":\"Open\",\"leverage\":\"1\"}", }, ) - dexkeeper.MemState.GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( &types.Order{ Id: 2, Account: testAccount.String(), @@ -90,7 +93,7 @@ func TestEndBlockMarketOrder(t *testing.T) { Data: "{\"position_effect\":\"Open\",\"leverage\":\"1\"}", }, ) - dexkeeper.MemState.GetDepositInfo(ctx, utils.ContractAddress(contractAddr.String())).Add( + dexutils.GetMemState(ctx.Context()).GetDepositInfo(ctx, utils.ContractAddress(contractAddr.String())).Add( &dexcache.DepositInfoEntry{ Creator: testAccount.String(), Denom: "usei", @@ -104,8 +107,8 @@ func TestEndBlockMarketOrder(t *testing.T) { // Long book should be populated require.True(t, found) - dexkeeper.MemState.Clear() - dexkeeper.MemState.GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + dexutils.GetMemState(ctx.Context()).Clear() + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( &types.Order{ Id: 2, Account: testAccount.String(), @@ -133,8 +136,8 @@ func TestEndBlockMarketOrder(t *testing.T) { require.Equal(t, 1, len(matchResults.Orders)) require.Equal(t, 2, len(matchResults.Settlements)) - dexkeeper.MemState.Clear() - dexkeeper.MemState.GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + dexutils.GetMemState(ctx.Context()).Clear() + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( &types.Order{ Id: 3, Account: testAccount.String(), @@ -160,13 +163,14 @@ func TestEndBlockMarketOrder(t *testing.T) { func TestEndBlockRollback(t *testing.T) { testApp := keepertest.TestApp() ctx := testApp.BaseApp.NewContext(false, tmproto.Header{}) + ctx = ctx.WithContext(context.WithValue(ctx.Context(), dexutils.DexMemStateContextKey, dexcache.NewMemState())) dexkeeper := testApp.DexKeeper pair := TEST_PAIR() // register contract and pair dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: keepertest.TestContract, NeedHook: true, NeedOrderMatching: true}) dexkeeper.AddRegisteredPair(ctx, keepertest.TestContract, pair) // place one order to a nonexistent contract - dexkeeper.MemState.GetBlockOrders(ctx, utils.ContractAddress(keepertest.TestContract), utils.GetPairString(&pair)).Add( + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(keepertest.TestContract), utils.GetPairString(&pair)).Add( &types.Order{ Id: 1, Account: keepertest.TestAccount, @@ -189,6 +193,7 @@ func TestEndBlockRollback(t *testing.T) { func TestEndBlockPartialRollback(t *testing.T) { testApp := keepertest.TestApp() ctx := testApp.BaseApp.NewContext(false, tmproto.Header{Time: time.Now()}) + ctx = ctx.WithContext(context.WithValue(ctx.Context(), dexutils.DexMemStateContextKey, dexcache.NewMemState())) // BAD CONTRACT dexkeeper := testApp.DexKeeper pair := TEST_PAIR() @@ -196,7 +201,7 @@ func TestEndBlockPartialRollback(t *testing.T) { dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: keepertest.TestContract, NeedHook: true, NeedOrderMatching: true}) dexkeeper.AddRegisteredPair(ctx, keepertest.TestContract, pair) // place one order to a nonexistent contract - dexkeeper.MemState.GetBlockOrders(ctx, utils.ContractAddress(keepertest.TestContract), utils.GetPairString(&pair)).Add( + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(keepertest.TestContract), utils.GetPairString(&pair)).Add( &types.Order{ Id: 1, Account: keepertest.TestAccount, @@ -234,7 +239,7 @@ func TestEndBlockPartialRollback(t *testing.T) { dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: true, NeedOrderMatching: true}) dexkeeper.AddRegisteredPair(ctx, contractAddr.String(), pair) // place one order to a nonexistent contract - dexkeeper.MemState.GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( &types.Order{ Id: 2, Account: testAccount.String(), @@ -248,7 +253,7 @@ func TestEndBlockPartialRollback(t *testing.T) { Data: "{\"position_effect\":\"Open\",\"leverage\":\"1\"}", }, ) - dexkeeper.MemState.GetDepositInfo(ctx, utils.ContractAddress(contractAddr.String())).Add( + dexutils.GetMemState(ctx.Context()).GetDepositInfo(ctx, utils.ContractAddress(contractAddr.String())).Add( &dexcache.DepositInfoEntry{ Creator: testAccount.String(), Denom: "uusdc", @@ -271,6 +276,7 @@ func TestEndBlockPartialRollback(t *testing.T) { func TestBeginBlock(t *testing.T) { testApp := keepertest.TestApp() ctx := testApp.BaseApp.NewContext(false, tmproto.Header{Time: time.Now()}) + ctx = ctx.WithContext(context.WithValue(ctx.Context(), dexutils.DexMemStateContextKey, dexcache.NewMemState())) dexkeeper := testApp.DexKeeper testAccount, _ := sdk.AccAddressFromBech32("sei1yezq49upxhunjjhudql2fnj5dgvcwjj87pn2wx") @@ -309,6 +315,7 @@ func TestBeginBlock(t *testing.T) { func TestEndBlockPanicHandling(t *testing.T) { testApp := keepertest.TestApp() ctx := testApp.BaseApp.NewContext(false, tmproto.Header{Time: time.Now()}) + ctx = ctx.WithContext(context.WithValue(ctx.Context(), dexutils.DexMemStateContextKey, dexcache.NewMemState())) dexkeeper := testApp.DexKeeper pair := types.Pair{PriceDenom: "SEI", AssetDenom: "ATOM"} @@ -335,7 +342,7 @@ func TestEndBlockPanicHandling(t *testing.T) { } dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: true, NeedOrderMatching: true}) dexkeeper.AddRegisteredPair(ctx, contractAddr.String(), pair) - dexkeeper.MemState.GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( &types.Order{ Id: 1, Account: testAccount.String(), @@ -349,7 +356,7 @@ func TestEndBlockPanicHandling(t *testing.T) { Data: "{\"position_effect\":\"Open\",\"leverage\":\"1\"}", }, ) - dexkeeper.MemState.GetDepositInfo(ctx, utils.ContractAddress(contractAddr.String())).Add( + dexutils.GetMemState(ctx.Context()).GetDepositInfo(ctx, utils.ContractAddress(contractAddr.String())).Add( &dexcache.DepositInfoEntry{ Creator: testAccount.String(), Denom: "usei", diff --git a/x/dex/utils/context.go b/x/dex/utils/context.go new file mode 100644 index 0000000000..1b23c04f52 --- /dev/null +++ b/x/dex/utils/context.go @@ -0,0 +1,18 @@ +package utils + +import ( + "context" + + dexcache "github.com/sei-protocol/sei-chain/x/dex/cache" +) + +type MemStateKeyType string + +const DexMemStateContextKey MemStateKeyType = MemStateKeyType("dex-memstate") + +func GetMemState(ctx context.Context) *dexcache.MemState { + if val := ctx.Value(DexMemStateContextKey); val != nil { + return val.(*dexcache.MemState) + } + panic("cannot find mem state in context") +} From 6f55bc7d843986192e89955567fa361e583e5453 Mon Sep 17 00:00:00 2001 From: codchen Date: Thu, 8 Sep 2022 21:07:31 -0700 Subject: [PATCH 06/30] Use SR25519 as signing algo (#238) * Use SR25519 as signing algo * batch verification * idx * bump * bump * bump * remove extra tracing --- app/abci.go | 10 +++++----- app/ante.go | 17 ++++++++++------- app/app.go | 23 ++++++++++++++++++++++- go.mod | 4 ++-- go.sum | 9 ++++----- loadtest/sign.go | 2 +- 6 files changed, 44 insertions(+), 21 deletions(-) diff --git a/app/abci.go b/app/abci.go index 9c2dba8ddf..35b2a84ae5 100644 --- a/app/abci.go +++ b/app/abci.go @@ -31,11 +31,11 @@ func (app *App) CheckTx(ctx context.Context, req *abci.RequestCheckTx) (*abci.Re } func (app *App) DeliverTx(ctx sdk.Context, req abci.RequestDeliverTx) abci.ResponseDeliverTx { - tracectx, span := (*app.tracingInfo.Tracer).Start(app.tracingInfo.TracerContext, "DeliverTx") - oldCtx := app.tracingInfo.TracerContext - app.tracingInfo.TracerContext = tracectx - defer span.End() - defer func() { app.tracingInfo.TracerContext = oldCtx }() + // tracectx, span := (*app.tracingInfo.Tracer).Start(app.tracingInfo.TracerContext, "DeliverTx") + // oldCtx := app.tracingInfo.TracerContext + // app.tracingInfo.TracerContext = tracectx + // defer span.End() + // defer func() { app.tracingInfo.TracerContext = oldCtx }() return app.BaseApp.DeliverTx(ctx, req) } diff --git a/app/ante.go b/app/ante.go index 1c55b5e76e..3f04c6a9d9 100644 --- a/app/ante.go +++ b/app/ante.go @@ -9,7 +9,6 @@ import ( ibcante "github.com/cosmos/ibc-go/v3/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" "github.com/sei-protocol/sei-chain/app/antedecorators" - "github.com/sei-protocol/sei-chain/utils" "github.com/sei-protocol/sei-chain/utils/tracing" "github.com/sei-protocol/sei-chain/x/dex" dexkeeper "github.com/sei-protocol/sei-chain/x/dex/keeper" @@ -64,6 +63,14 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { sigGasConsumer = ante.DefaultSigVerificationGasConsumer } + // var sigVerifyDecorator sdk.AnteDecorator + sequentialVerifyDecorator := ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler) + // if options.BatchVerifier == nil { + // sigVerifyDecorator = sequentialVerifyDecorator + // } else { + // sigVerifyDecorator = ante.NewBatchSigVerificationDecorator(options.BatchVerifier, sequentialVerifyDecorator) + // } + memPoolDecorator := ante.NewMempoolFeeDecorator() anteDecorators := []sdk.AnteDecorator{ ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first @@ -82,15 +89,11 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewSetPubKeyDecorator(options.AccountKeeper), ante.NewValidateSigCountDecorator(options.AccountKeeper), ante.NewSigGasConsumeDecorator(options.AccountKeeper, sigGasConsumer), - ante.NewSigVerificationDecorator(options.AccountKeeper, options.SignModeHandler), + sequentialVerifyDecorator, ante.NewIncrementSequenceDecorator(options.AccountKeeper), ibcante.NewAnteDecorator(options.IBCKeeper), dex.NewTickSizeMultipleDecorator(*options.DexKeeper), } - tracedDecorators := utils.Map(anteDecorators, func(d sdk.AnteDecorator) sdk.AnteDecorator { - return antedecorators.NewTracedAnteDecorator(d, options.TracingInfo) - }) - - return sdk.ChainAnteDecorators(tracedDecorators...), nil + return sdk.ChainAnteDecorators(anteDecorators...), nil } diff --git a/app/app.go b/app/app.go index e8c64ec442..f8db6e55d2 100644 --- a/app/app.go +++ b/app/app.go @@ -319,6 +319,9 @@ type App struct { configurator module.Configurator optimisticProcessingInfo *OptimisticProcessingInfo + + // batchVerifier *ante.SR25519BatchVerifier + // txDecoder sdk.TxDecoder } // New returns a reference to an initialized blockchain app @@ -378,6 +381,7 @@ func New( Tracer: &tr, TracerContext: context.Background(), }, + // txDecoder: encodingConfig.TxConfig.TxDecoder(), } app.ParamsKeeper = initParamsKeeper(appCodec, cdc, keys[paramstypes.StoreKey], tkeys[paramstypes.TStoreKey]) @@ -719,14 +723,18 @@ func New( app.SetInitChainer(app.InitChainer) app.SetBeginBlocker(app.BeginBlocker) + signModeHandler := encodingConfig.TxConfig.SignModeHandler() + // app.batchVerifier = ante.NewSR25519BatchVerifier(app.AccountKeeper, signModeHandler) + anteHandler, err := NewAnteHandler( HandlerOptions{ HandlerOptions: ante.HandlerOptions{ AccountKeeper: app.AccountKeeper, BankKeeper: app.BankKeeper, FeegrantKeeper: app.FeeGrantKeeper, - SignModeHandler: encodingConfig.TxConfig.SignModeHandler(), + SignModeHandler: signModeHandler, SigGasConsumer: ante.DefaultSigVerificationGasConsumer, + // BatchVerifier: app.batchVerifier, }, IBCKeeper: app.IBCKeeper, TXCounterStoreKey: keys[wasm.StoreKey], @@ -936,8 +944,21 @@ func (app *App) ProcessBlock(ctx sdk.Context, txs [][]byte, req BlockProcessRequ beginBlockResp := app.BeginBlock(ctx, beginBlockReq) events = append(events, beginBlockResp.Events...) + + // typedTxs := []sdk.Tx{} + // for _, tx := range req.GetTxs() { + // typedTx, err := app.txDecoder(tx) + // if err != nil { + // typedTxs = append(typedTxs, nil) + // } else { + // typedTxs = append(typedTxs, typedTx) + // } + // } + // app.batchVerifier.VerifyTxs(ctx, typedTxs) + txResults := []*abci.ExecTxResult{} for _, tx := range txs { + // ctx = ctx.WithContext(context.WithValue(ctx.Context(), ante.ContextKeyTxIndexKey, i)) deliverTxResp := app.DeliverTx(ctx, abci.RequestDeliverTx{ Tx: tx, }) diff --git a/go.mod b/go.mod index 3a9d155d6d..5046f3d92c 100644 --- a/go.mod +++ b/go.mod @@ -129,9 +129,9 @@ require ( ) replace ( - github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.15 + github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.20 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/keybase/go-keychain => github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 - github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.10 + github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.13 google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index 7b9ff66e74..a9d62d1af7 100644 --- a/go.sum +++ b/go.sum @@ -950,7 +950,6 @@ github.com/openzipkin/zipkin-go v0.2.5/go.mod h1:KpXfKdgRDnnhsxw4pNIH9Md5lyFqKUa 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/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/copy v1.6.0 h1:IinKAryFFuPONZ7cm6T6E2QX/vcJwSnlaA5lfoaXIiQ= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= @@ -1096,10 +1095,10 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/sei-protocol/sei-cosmos v0.1.15 h1:xwGdXv/N3mRPXqRJfKdFAqd38SywepmQkPw5FDhyjbY= -github.com/sei-protocol/sei-cosmos v0.1.15/go.mod h1:Z6iuVdX6zbTJufXkMyXJh2MKJZmjsGE4M8zk01IewgU= -github.com/sei-protocol/sei-tendermint v0.1.10 h1:htJPj7sP/o7o9pIVfv1JO3HB5DKj4HMHeIjQpg3G1rY= -github.com/sei-protocol/sei-tendermint v0.1.10/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= +github.com/sei-protocol/sei-cosmos v0.1.20 h1:QqYntfddnFBRLGCOVdIlwDg5Xa3TlfmhSEcg9ehx1Ys= +github.com/sei-protocol/sei-cosmos v0.1.20/go.mod h1:9JV9q6Ds2FpU409zu8sw8feCaOiGZApUMjaHvXQOmc8= +github.com/sei-protocol/sei-tendermint v0.1.13 h1:uaMXhi+zpaqcUDlshxjqmPmUI/zSZla2a2ZmOtDK5RM= +github.com/sei-protocol/sei-tendermint v0.1.13/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= diff --git a/loadtest/sign.go b/loadtest/sign.go index cd430b4e98..0ebaccd94e 100644 --- a/loadtest/sign.go +++ b/loadtest/sign.go @@ -44,7 +44,7 @@ func GetKey(accountIdx uint64) cryptotypes.PrivKey { } kr, _ := keyring.New(sdk.KeyringServiceName(), "test", filepath.Join(userHomeDir, ".sei"), os.Stdin) keyringAlgos, _ := kr.SupportedAlgorithms() - algoStr := string(hd.Secp256k1Type) + algoStr := string(hd.Sr25519Type) algo, _ := keyring.NewSigningAlgoFromString(algoStr, keyringAlgos) hdpath := hd.CreateHDPath(sdk.GetConfig().GetCoinType(), 0, 0).String() derivedPriv, _ := algo.Derive()(accountInfo.Mnemonic, "", hdpath) From 7248ade7e9e6f0b19498f55c758b27cdd11a0d1e Mon Sep 17 00:00:00 2001 From: Brandon Weng <18161326+BrandonWeng@users.noreply.github.com> Date: Fri, 23 Sep 2022 09:57:55 -0700 Subject: [PATCH 07/30] Register accesscontrol module (#257) --- app/ante.go | 6 +----- app/app.go | 59 +++++++++++++++++++++++++++++++++++++---------------- go.mod | 4 ++-- go.sum | 10 +++++---- 4 files changed, 50 insertions(+), 29 deletions(-) diff --git a/app/ante.go b/app/ante.go index 3f04c6a9d9..90fee3a383 100644 --- a/app/ante.go +++ b/app/ante.go @@ -8,7 +8,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/ante" ibcante "github.com/cosmos/ibc-go/v3/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" - "github.com/sei-protocol/sei-chain/app/antedecorators" "github.com/sei-protocol/sei-chain/utils/tracing" "github.com/sei-protocol/sei-chain/x/dex" dexkeeper "github.com/sei-protocol/sei-chain/x/dex/keeper" @@ -70,12 +69,9 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { // } else { // sigVerifyDecorator = ante.NewBatchSigVerificationDecorator(options.BatchVerifier, sequentialVerifyDecorator) // } - - memPoolDecorator := ante.NewMempoolFeeDecorator() anteDecorators := []sdk.AnteDecorator{ ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first // TODO: have dex antehandler separate, and then call the individual antehandlers FROM the gasless antehandler decorator wrapper - antedecorators.NewGaslessDecorator([]sdk.AnteDecorator{&memPoolDecorator}, *options.OracleKeeper, *options.NitroKeeper), wasmkeeper.NewLimitSimulationGasDecorator(options.WasmConfig.SimulationGasLimit), // after setup context to enforce limits early wasmkeeper.NewCountTXDecorator(options.TXCounterStoreKey), ante.NewRejectExtensionOptionsDecorator(), @@ -84,7 +80,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper), + ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewSetPubKeyDecorator(options.AccountKeeper), ante.NewValidateSigCountDecorator(options.AccountKeeper), diff --git a/app/app.go b/app/app.go index f8db6e55d2..d0de7051eb 100644 --- a/app/app.go +++ b/app/app.go @@ -33,6 +33,10 @@ import ( "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/ante" + + aclmodule "github.com/cosmos/cosmos-sdk/x/accesscontrol" + aclkeeper "github.com/cosmos/cosmos-sdk/x/accesscontrol/keeper" + acltypes "github.com/cosmos/cosmos-sdk/x/accesscontrol/types" authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" @@ -158,6 +162,7 @@ var ( // non-dependant module elements, such as codec registration // and genesis verification. ModuleBasics = module.NewBasicManager( + aclmodule.AppModuleBasic{}, auth.AppModuleBasic{}, genutil.AppModuleBasic{}, bank.AppModuleBasic{}, @@ -186,6 +191,7 @@ var ( // module account permissions maccPerms = map[string][]string{ + acltypes.ModuleName: nil, authtypes.FeeCollectorName: nil, distrtypes.ModuleName: nil, minttypes.ModuleName: {authtypes.Minter}, @@ -278,23 +284,24 @@ type App struct { memKeys map[string]*sdk.MemoryStoreKey // keepers - AccountKeeper authkeeper.AccountKeeper - BankKeeper bankkeeper.Keeper - CapabilityKeeper *capabilitykeeper.Keeper - StakingKeeper stakingkeeper.Keeper - SlashingKeeper slashingkeeper.Keeper - MintKeeper mintkeeper.Keeper - DistrKeeper distrkeeper.Keeper - GovKeeper govkeeper.Keeper - CrisisKeeper crisiskeeper.Keeper - UpgradeKeeper upgradekeeper.Keeper - ParamsKeeper paramskeeper.Keeper - IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly - EvidenceKeeper evidencekeeper.Keeper - TransferKeeper ibctransferkeeper.Keeper - FeeGrantKeeper feegrantkeeper.Keeper - WasmKeeper wasm.Keeper - OracleKeeper oraclekeeper.Keeper + AccessControlKeeper aclkeeper.Keeper + AccountKeeper authkeeper.AccountKeeper + BankKeeper bankkeeper.Keeper + CapabilityKeeper *capabilitykeeper.Keeper + StakingKeeper stakingkeeper.Keeper + SlashingKeeper slashingkeeper.Keeper + MintKeeper mintkeeper.Keeper + DistrKeeper distrkeeper.Keeper + GovKeeper govkeeper.Keeper + CrisisKeeper crisiskeeper.Keeper + UpgradeKeeper upgradekeeper.Keeper + ParamsKeeper paramskeeper.Keeper + IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + EvidenceKeeper evidencekeeper.Keeper + TransferKeeper ibctransferkeeper.Keeper + FeeGrantKeeper feegrantkeeper.Keeper + WasmKeeper wasm.Keeper + OracleKeeper oraclekeeper.Keeper // make scoped keepers public for test purposes ScopedIBCKeeper capabilitykeeper.ScopedKeeper @@ -349,7 +356,7 @@ func New( bApp.SetInterfaceRegistry(interfaceRegistry) keys := sdk.NewKVStoreKeys( - authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, + acltypes.StoreKey, authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, oracletypes.StoreKey, wasm.StoreKey, @@ -399,6 +406,11 @@ func New( // this line is used by starport scaffolding # stargate/app/scopedKeeper // add keepers + app.AccessControlKeeper = aclkeeper.NewKeeper( + appCodec, + app.keys[acltypes.StoreKey], + app.GetSubspace(acltypes.ModuleName), + ) app.AccountKeeper = authkeeper.NewAccountKeeper( appCodec, keys[authtypes.StoreKey], app.GetSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, maccPerms, ) @@ -568,6 +580,7 @@ func New( app.AccountKeeper, app.StakingKeeper, app.BaseApp.DeliverTx, encodingConfig.TxConfig, ), + aclmodule.NewAppModule(appCodec, app.AccessControlKeeper), auth.NewAppModule(appCodec, app.AccountKeeper, nil), vesting.NewAppModule(app.AccountKeeper, app.BankKeeper), bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), @@ -621,6 +634,7 @@ func New( wasm.ModuleName, tokenfactorytypes.ModuleName, nitrotypes.ModuleName, + acltypes.ModuleName, ) app.mm.SetOrderEndBlockers( @@ -647,6 +661,7 @@ func New( wasm.ModuleName, tokenfactorytypes.ModuleName, nitrotypes.ModuleName, + acltypes.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -678,6 +693,7 @@ func New( dexmoduletypes.ModuleName, nitrotypes.ModuleName, wasm.ModuleName, + acltypes.ModuleName, // this line is used by starport scaffolding # stargate/app/initGenesis ) @@ -813,6 +829,12 @@ func (app *App) SetStoreUpgradeHandlers() { storeUpgrades := storetypes.StoreUpgrades{ Added: []string{nitrotypes.StoreKey}, } + app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) + } + if upgradeInfo.Name == "1.2.3beta" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { + storeUpgrades := storetypes.StoreUpgrades{ + Added: []string{acltypes.StoreKey}, + } // configure store loader that checks if version == upgradeHeight and applies store upgrades app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) @@ -1117,6 +1139,7 @@ func GetMaccPerms() map[string][]string { func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper { paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey) + paramsKeeper.Subspace(acltypes.ModuleName) paramsKeeper.Subspace(authtypes.ModuleName) paramsKeeper.Subspace(banktypes.ModuleName) paramsKeeper.Subspace(stakingtypes.ModuleName) diff --git a/go.mod b/go.mod index 5046f3d92c..980c742f99 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/regen-network/cosmos-proto v0.3.1 github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.4.0 - github.com/stretchr/testify v1.7.2 + github.com/stretchr/testify v1.8.0 github.com/tendermint/tendermint v0.37.0-dev github.com/tendermint/tm-db v0.6.8-0.20220519162814-e24b96538a12 go.opentelemetry.io/otel v1.9.0 @@ -129,7 +129,7 @@ require ( ) replace ( - github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.20 + github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.66 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/keybase/go-keychain => github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.13 diff --git a/go.sum b/go.sum index a9d62d1af7..deff6c322a 100644 --- a/go.sum +++ b/go.sum @@ -1095,8 +1095,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/sei-protocol/sei-cosmos v0.1.20 h1:QqYntfddnFBRLGCOVdIlwDg5Xa3TlfmhSEcg9ehx1Ys= -github.com/sei-protocol/sei-cosmos v0.1.20/go.mod h1:9JV9q6Ds2FpU409zu8sw8feCaOiGZApUMjaHvXQOmc8= +github.com/sei-protocol/sei-cosmos v0.1.66 h1:ow4z4wKm1iN1GoZAaz+kCB6nv+BKSLnhpFvyale785M= +github.com/sei-protocol/sei-cosmos v0.1.66/go.mod h1:3uCdb2FCio9uVQRPdZxZ1GqHqyb1moYH93xtTMa7DL8= github.com/sei-protocol/sei-tendermint v0.1.13 h1:uaMXhi+zpaqcUDlshxjqmPmUI/zSZla2a2ZmOtDK5RM= github.com/sei-protocol/sei-tendermint v0.1.13/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= @@ -1166,8 +1166,9 @@ github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5J github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= +github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -1177,8 +1178,9 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI= github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= From b369033f1ce12a9253dffd6a4852abcba08e2750 Mon Sep 17 00:00:00 2001 From: kbhat1 Date: Mon, 26 Sep 2022 11:38:41 -0400 Subject: [PATCH 08/30] Ante decorator for tx priorities --- app/ante.go | 3 ++ app/antedecorators/priority.go | 52 ++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 app/antedecorators/priority.go diff --git a/app/ante.go b/app/ante.go index 90fee3a383..d6e5b04e74 100644 --- a/app/ante.go +++ b/app/ante.go @@ -8,6 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/ante" ibcante "github.com/cosmos/ibc-go/v3/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" + "github.com/sei-protocol/sei-chain/app/antedecorators" "github.com/sei-protocol/sei-chain/utils/tracing" "github.com/sei-protocol/sei-chain/x/dex" dexkeeper "github.com/sei-protocol/sei-chain/x/dex/keeper" @@ -81,6 +82,8 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), + // PriorityDecorator must be called after DeductFeeDecorator which sets tx priority based on tx fees + antedecorators.NewPriorityDecorator(), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewSetPubKeyDecorator(options.AccountKeeper), ante.NewValidateSigCountDecorator(options.AccountKeeper), diff --git a/app/antedecorators/priority.go b/app/antedecorators/priority.go new file mode 100644 index 0000000000..f9bf71ab24 --- /dev/null +++ b/app/antedecorators/priority.go @@ -0,0 +1,52 @@ +package antedecorators + +import ( + "math" + + sdk "github.com/cosmos/cosmos-sdk/types" + oracletypes "github.com/sei-protocol/sei-chain/x/oracle/types" +) + +type PriorityDecorator struct {} + +func NewPriorityDecorator() PriorityDecorator { + return PriorityDecorator{} +} + +func intMin(a, b int64) int64 { + if a < b { + return a + } + return b +} + +// Assigns higher priority to certain types of transactions including oracle +func (pd PriorityDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { + // Cap priority to MAXINT64 - 1000 + // Use higher priorities for tiers including oracle tx's + priority := intMin(ctx.Priority(), math.MaxInt64 - 1000) + + if isOracleTx(tx) { + priority = math.MaxInt64 - 100 + } + + newCtx := ctx.WithPriority(priority) + + return next(newCtx, tx, simulate) +} + +func isOracleTx(tx sdk.Tx) bool { + if len(tx.GetMsgs()) == 0 { + // empty TX isn't oracle + return false + } + for _, msg := range tx.GetMsgs() { + switch msg.(type) { + case *oracletypes.MsgAggregateExchangeRateVote: + continue + default: + return false + } + } + return true +} From b9451d3d887305c50f4e229ab45410498d0933c2 Mon Sep 17 00:00:00 2001 From: kbhat1 Date: Mon, 26 Sep 2022 11:39:35 -0400 Subject: [PATCH 09/30] Revert "Ante decorator for tx priorities" This reverts commit 01929ee96bdfe18776387d37f5cdc25f235f482f. --- app/ante.go | 3 -- app/antedecorators/priority.go | 52 ---------------------------------- 2 files changed, 55 deletions(-) delete mode 100644 app/antedecorators/priority.go diff --git a/app/ante.go b/app/ante.go index d6e5b04e74..90fee3a383 100644 --- a/app/ante.go +++ b/app/ante.go @@ -8,7 +8,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/ante" ibcante "github.com/cosmos/ibc-go/v3/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" - "github.com/sei-protocol/sei-chain/app/antedecorators" "github.com/sei-protocol/sei-chain/utils/tracing" "github.com/sei-protocol/sei-chain/x/dex" dexkeeper "github.com/sei-protocol/sei-chain/x/dex/keeper" @@ -82,8 +81,6 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), - // PriorityDecorator must be called after DeductFeeDecorator which sets tx priority based on tx fees - antedecorators.NewPriorityDecorator(), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewSetPubKeyDecorator(options.AccountKeeper), ante.NewValidateSigCountDecorator(options.AccountKeeper), diff --git a/app/antedecorators/priority.go b/app/antedecorators/priority.go deleted file mode 100644 index f9bf71ab24..0000000000 --- a/app/antedecorators/priority.go +++ /dev/null @@ -1,52 +0,0 @@ -package antedecorators - -import ( - "math" - - sdk "github.com/cosmos/cosmos-sdk/types" - oracletypes "github.com/sei-protocol/sei-chain/x/oracle/types" -) - -type PriorityDecorator struct {} - -func NewPriorityDecorator() PriorityDecorator { - return PriorityDecorator{} -} - -func intMin(a, b int64) int64 { - if a < b { - return a - } - return b -} - -// Assigns higher priority to certain types of transactions including oracle -func (pd PriorityDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { - // Cap priority to MAXINT64 - 1000 - // Use higher priorities for tiers including oracle tx's - priority := intMin(ctx.Priority(), math.MaxInt64 - 1000) - - if isOracleTx(tx) { - priority = math.MaxInt64 - 100 - } - - newCtx := ctx.WithPriority(priority) - - return next(newCtx, tx, simulate) -} - -func isOracleTx(tx sdk.Tx) bool { - if len(tx.GetMsgs()) == 0 { - // empty TX isn't oracle - return false - } - for _, msg := range tx.GetMsgs() { - switch msg.(type) { - case *oracletypes.MsgAggregateExchangeRateVote: - continue - default: - return false - } - } - return true -} From b84b9e136d16b349b39cda141aa126f9b47bd282 Mon Sep 17 00:00:00 2001 From: Kbhat1 Date: Mon, 26 Sep 2022 15:19:59 -0400 Subject: [PATCH 10/30] Prioritize ante decorator (#262) * Prioritize ante decorator * lint --- app/ante.go | 3 ++ app/antedecorators/priority.go | 52 ++++++++++++++++++++++++++++++++++ 2 files changed, 55 insertions(+) create mode 100644 app/antedecorators/priority.go diff --git a/app/ante.go b/app/ante.go index 90fee3a383..d6e5b04e74 100644 --- a/app/ante.go +++ b/app/ante.go @@ -8,6 +8,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/ante" ibcante "github.com/cosmos/ibc-go/v3/modules/core/ante" ibckeeper "github.com/cosmos/ibc-go/v3/modules/core/keeper" + "github.com/sei-protocol/sei-chain/app/antedecorators" "github.com/sei-protocol/sei-chain/utils/tracing" "github.com/sei-protocol/sei-chain/x/dex" dexkeeper "github.com/sei-protocol/sei-chain/x/dex/keeper" @@ -81,6 +82,8 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), + // PriorityDecorator must be called after DeductFeeDecorator which sets tx priority based on tx fees + antedecorators.NewPriorityDecorator(), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewSetPubKeyDecorator(options.AccountKeeper), ante.NewValidateSigCountDecorator(options.AccountKeeper), diff --git a/app/antedecorators/priority.go b/app/antedecorators/priority.go new file mode 100644 index 0000000000..a8d741bcb5 --- /dev/null +++ b/app/antedecorators/priority.go @@ -0,0 +1,52 @@ +package antedecorators + +import ( + "math" + + sdk "github.com/cosmos/cosmos-sdk/types" + oracletypes "github.com/sei-protocol/sei-chain/x/oracle/types" +) + +type PriorityDecorator struct{} + +func NewPriorityDecorator() PriorityDecorator { + return PriorityDecorator{} +} + +func intMin(a, b int64) int64 { + if a < b { + return a + } + return b +} + +// Assigns higher priority to certain types of transactions including oracle +func (pd PriorityDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { + // Cap priority to MAXINT64 - 1000 + // Use higher priorities for tiers including oracle tx's + priority := intMin(ctx.Priority(), math.MaxInt64-1000) + + if isOracleTx(tx) { + priority = math.MaxInt64 - 100 + } + + newCtx := ctx.WithPriority(priority) + + return next(newCtx, tx, simulate) +} + +func isOracleTx(tx sdk.Tx) bool { + if len(tx.GetMsgs()) == 0 { + // empty TX isn't oracle + return false + } + for _, msg := range tx.GetMsgs() { + switch msg.(type) { + case *oracletypes.MsgAggregateExchangeRateVote: + continue + default: + return false + } + } + return true +} From 2c6503a3bc34ad08cb183320e8098861284c38ed Mon Sep 17 00:00:00 2001 From: Philip Su Date: Thu, 29 Sep 2022 08:49:08 -0700 Subject: [PATCH 11/30] Use tx digest dissemination binaries (#265) * Update sei-tendermint and sei-cosmos for tx-digest * Add paralleism to populate accounts --- go.mod | 2 +- go.sum | 4 +-- loadtest/scripts/populate_genesis_accounts.py | 26 +++++++++++++++++++ 3 files changed, 29 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 980c742f99..d265812107 100644 --- a/go.mod +++ b/go.mod @@ -132,6 +132,6 @@ replace ( github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.66 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/keybase/go-keychain => github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 - github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.13 + github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.54 google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index deff6c322a..cb9db7350f 100644 --- a/go.sum +++ b/go.sum @@ -1097,8 +1097,8 @@ github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+f github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/sei-protocol/sei-cosmos v0.1.66 h1:ow4z4wKm1iN1GoZAaz+kCB6nv+BKSLnhpFvyale785M= github.com/sei-protocol/sei-cosmos v0.1.66/go.mod h1:3uCdb2FCio9uVQRPdZxZ1GqHqyb1moYH93xtTMa7DL8= -github.com/sei-protocol/sei-tendermint v0.1.13 h1:uaMXhi+zpaqcUDlshxjqmPmUI/zSZla2a2ZmOtDK5RM= -github.com/sei-protocol/sei-tendermint v0.1.13/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= +github.com/sei-protocol/sei-tendermint v0.1.54 h1:T8snsZ5schPUSMa2STd61a0Mt/yoz1H5MTn3HRTbzj8= +github.com/sei-protocol/sei-tendermint v0.1.54/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= diff --git a/loadtest/scripts/populate_genesis_accounts.py b/loadtest/scripts/populate_genesis_accounts.py index 5bb88244b8..08ad73bce1 100644 --- a/loadtest/scripts/populate_genesis_accounts.py +++ b/loadtest/scripts/populate_genesis_accounts.py @@ -1,9 +1,16 @@ import json import os +import multiprocessing import subprocess import sys import threading import time +<<<<<<< HEAD +======= + +PARALLEISM=32 +LOCK=threading.Lock() +>>>>>>> 41453369 (Use tx digest dissemination binaries (#265)) PARALLEISM=32 @@ -39,7 +46,11 @@ def add_genesis_account(account_name, lock, local=False): sleep_time = 1 while not success and retry_counter > 0: try: +<<<<<<< HEAD with lock: +======= + with LOCK: +>>>>>>> 41453369 (Use tx digest dissemination binaries (#265)) subprocess.check_call( [add_account_cmd], shell=True, @@ -52,7 +63,11 @@ def add_genesis_account(account_name, lock, local=False): time.sleep(sleep_time) +<<<<<<< HEAD def bulk_create_genesis_accounts(number_of_accounts, start_idx, lock, is_local=False): +======= +def bulk_create_genesis_accounts(number_of_accounts, start_idx, is_local=False): +>>>>>>> 41453369 (Use tx digest dissemination binaries (#265)) for i in range(start_idx, start_idx + number_of_accounts): print(f"Creating account {i}") add_genesis_account(f"ta{i}", lock, is_local) @@ -63,6 +78,7 @@ def main(): is_local = False if len(args) > 1 and args[1] == "loc": is_local = True +<<<<<<< HEAD num_threads = number_of_accounts // PARALLEISM threads = [] lock=threading.Lock() @@ -72,6 +88,16 @@ def main(): t.start() for t in threads: t.join() +======= + num_processes = number_of_accounts // PARALLEISM + processes = [] + for i in range(0, number_of_accounts, num_processes): + processes.append(multiprocessing.Process(target=bulk_create_genesis_accounts, args=(num_processes, i, is_local))) + for p in processes: + p.start() + for p in processes: + p.join() +>>>>>>> 41453369 (Use tx digest dissemination binaries (#265)) if __name__ == "__main__": main() From 6282e08a3cdfaf92c17441fc4c2fc1a51904ff1d Mon Sep 17 00:00:00 2001 From: Philip Su Date: Thu, 29 Sep 2022 09:24:21 -0700 Subject: [PATCH 12/30] Update tm and cosmos releases (#267) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index d265812107..96921cfca1 100644 --- a/go.mod +++ b/go.mod @@ -132,6 +132,6 @@ replace ( github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.66 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/keybase/go-keychain => github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 - github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.54 + github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.56 google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index cb9db7350f..7af5100042 100644 --- a/go.sum +++ b/go.sum @@ -1097,8 +1097,8 @@ github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+f github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/sei-protocol/sei-cosmos v0.1.66 h1:ow4z4wKm1iN1GoZAaz+kCB6nv+BKSLnhpFvyale785M= github.com/sei-protocol/sei-cosmos v0.1.66/go.mod h1:3uCdb2FCio9uVQRPdZxZ1GqHqyb1moYH93xtTMa7DL8= -github.com/sei-protocol/sei-tendermint v0.1.54 h1:T8snsZ5schPUSMa2STd61a0Mt/yoz1H5MTn3HRTbzj8= -github.com/sei-protocol/sei-tendermint v0.1.54/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= +github.com/sei-protocol/sei-tendermint v0.1.56 h1:iRVhiIetj+GSwpBzaR9lqgvmgcOqmShfACS6x3tuBIw= +github.com/sei-protocol/sei-tendermint v0.1.56/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= From bb70ccbf714697f4eb6616302cb8778ac416588f Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Tue, 18 Oct 2022 09:41:07 -0700 Subject: [PATCH 13/30] fix populate genesis script --- loadtest/scripts/populate_genesis_accounts.py | 26 ------------------- 1 file changed, 26 deletions(-) diff --git a/loadtest/scripts/populate_genesis_accounts.py b/loadtest/scripts/populate_genesis_accounts.py index 08ad73bce1..5bb88244b8 100644 --- a/loadtest/scripts/populate_genesis_accounts.py +++ b/loadtest/scripts/populate_genesis_accounts.py @@ -1,16 +1,9 @@ import json import os -import multiprocessing import subprocess import sys import threading import time -<<<<<<< HEAD -======= - -PARALLEISM=32 -LOCK=threading.Lock() ->>>>>>> 41453369 (Use tx digest dissemination binaries (#265)) PARALLEISM=32 @@ -46,11 +39,7 @@ def add_genesis_account(account_name, lock, local=False): sleep_time = 1 while not success and retry_counter > 0: try: -<<<<<<< HEAD with lock: -======= - with LOCK: ->>>>>>> 41453369 (Use tx digest dissemination binaries (#265)) subprocess.check_call( [add_account_cmd], shell=True, @@ -63,11 +52,7 @@ def add_genesis_account(account_name, lock, local=False): time.sleep(sleep_time) -<<<<<<< HEAD def bulk_create_genesis_accounts(number_of_accounts, start_idx, lock, is_local=False): -======= -def bulk_create_genesis_accounts(number_of_accounts, start_idx, is_local=False): ->>>>>>> 41453369 (Use tx digest dissemination binaries (#265)) for i in range(start_idx, start_idx + number_of_accounts): print(f"Creating account {i}") add_genesis_account(f"ta{i}", lock, is_local) @@ -78,7 +63,6 @@ def main(): is_local = False if len(args) > 1 and args[1] == "loc": is_local = True -<<<<<<< HEAD num_threads = number_of_accounts // PARALLEISM threads = [] lock=threading.Lock() @@ -88,16 +72,6 @@ def main(): t.start() for t in threads: t.join() -======= - num_processes = number_of_accounts // PARALLEISM - processes = [] - for i in range(0, number_of_accounts, num_processes): - processes.append(multiprocessing.Process(target=bulk_create_genesis_accounts, args=(num_processes, i, is_local))) - for p in processes: - p.start() - for p in processes: - p.join() ->>>>>>> 41453369 (Use tx digest dissemination binaries (#265)) if __name__ == "__main__": main() From 1fb04239011b11151fdedb984025dd9ed1eb408d Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Tue, 18 Oct 2022 09:55:06 -0700 Subject: [PATCH 14/30] upgrade tm version --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 96921cfca1..cb60caf320 100644 --- a/go.mod +++ b/go.mod @@ -132,6 +132,6 @@ replace ( github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.66 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/keybase/go-keychain => github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 - github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.56 + github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.59 google.golang.org/grpc => google.golang.org/grpc v1.33.2 ) diff --git a/go.sum b/go.sum index 7af5100042..47d08ae200 100644 --- a/go.sum +++ b/go.sum @@ -1097,8 +1097,8 @@ github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+f github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= github.com/sei-protocol/sei-cosmos v0.1.66 h1:ow4z4wKm1iN1GoZAaz+kCB6nv+BKSLnhpFvyale785M= github.com/sei-protocol/sei-cosmos v0.1.66/go.mod h1:3uCdb2FCio9uVQRPdZxZ1GqHqyb1moYH93xtTMa7DL8= -github.com/sei-protocol/sei-tendermint v0.1.56 h1:iRVhiIetj+GSwpBzaR9lqgvmgcOqmShfACS6x3tuBIw= -github.com/sei-protocol/sei-tendermint v0.1.56/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= +github.com/sei-protocol/sei-tendermint v0.1.59 h1:POGL60PumMQHF4EzAHzvkGfDnodQJLHpl65LuiwSO/Y= +github.com/sei-protocol/sei-tendermint v0.1.59/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shirou/gopsutil v2.20.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= From fd850daf4bcf94f3161fb9155f227bc5e84a0a35 Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Tue, 18 Oct 2022 13:35:43 -0700 Subject: [PATCH 15/30] Uncomment script --- scripts/initialize_local_test_node.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/initialize_local_test_node.sh b/scripts/initialize_local_test_node.sh index 820f869bf8..58815164a5 100755 --- a/scripts/initialize_local_test_node.sh +++ b/scripts/initialize_local_test_node.sh @@ -3,9 +3,9 @@ echo -n Key Name to Add: read keyname echo -#echo -n Release to Build \(please find the latest release on https://github.com/sei-protocol/sei-chain/releases. Example: 1.1.0beta\): -#read release -#echo +echo -n Release to Build \(please find the latest release on https://github.com/sei-protocol/sei-chain/releases. Example: 1.1.0beta\): +read release +echo docker stop jaeger docker rm jaeger @@ -23,10 +23,10 @@ docker run -d --name jaeger \ jaegertracing/all-in-one:1.33 echo "Building..." -#git fetch --tags -f -#git checkout $release +git fetch --tags -f +git checkout $release make install -#git checkout master +git checkout master sudo -S rm -r ~/.sei/ sudo -S rm -r ~/test_accounts/ ~/go/bin/seid tendermint unsafe-reset-all From 3fa040d3ae1a45e58c21a331129eebba0573efff Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Tue, 18 Oct 2022 13:43:47 -0700 Subject: [PATCH 16/30] fix go mod --- go.mod | 8 ++++---- go.sum | 12 ------------ 2 files changed, 4 insertions(+), 16 deletions(-) diff --git a/go.mod b/go.mod index 01ffe78bcd..c48c793523 100644 --- a/go.mod +++ b/go.mod @@ -74,14 +74,13 @@ require ( github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect - github.com/grpc-ecosystem/grpc-gateway/v2 v2.12.0 // indirect + github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect github.com/hashicorp/hcl v1.0.0 // indirect github.com/hdevalence/ed25519consensus v0.0.0-20210204194344-59a8610d2b87 // indirect - github.com/improbable-eng/ - -web v0.14.1 // indirect + github.com/improbable-eng/grpc-web v0.14.1 // indirect github.com/inconshreveable/mousetrap v1.0.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/keybase/go-keychain v0.0.0-20190712205309-48d3d31d256d // indirect @@ -121,8 +120,9 @@ require ( go.opencensus.io v0.23.0 // indirect golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4 // indirect golang.org/x/net v0.0.0-20220909164309-bea034e7d591 // indirect + golang.org/x/sync v0.0.0-20220513210516-0976fa681c29 // indirect golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 // indirect - golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 // indirect + golang.org/x/term v0.0.0-20220411215600-e5f449aeb171 // indirect golang.org/x/text v0.3.8 // indirect gopkg.in/ini.v1 v1.66.4 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/go.sum b/go.sum index 3541bd48e8..dd8e83bc54 100644 --- a/go.sum +++ b/go.sum @@ -520,7 +520,6 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8 h1:e6P7q2lk1O+qJJb4BtCQXlK8vWEO8V1ZeuEdJNOqZyg= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -614,10 +613,6 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.12.0 h1:kr3j8iIMR4ywO/O0rvksXaJvauGGCMg2zAZIiNZ9uIQ= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.12.0/go.mod h1:ummNFgdgLhhX7aIiy35vVmQNS0rWXknfPE0qe6fmFXg= 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= @@ -1481,8 +1476,6 @@ golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e h1:TsQ7F31D3bUCLeqPT0u+yjp1guoArKaNKmCr22PYgTQ= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220909164309-bea034e7d591 h1:D0B/7al0LLrVC8aWF4+oxpv/m8bc7ViFfVS8/gXGdqI= golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -1635,8 +1628,6 @@ golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d h1:Zu/JngovGLVi6t2J3nmAf3AoTDwuzw85YZ3b9o4yU7s= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 h1:WIoqL4EROvwiPdUtaip4VcDdpZ4kha7wBWZrbVKCIZg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= @@ -1652,7 +1643,6 @@ golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7 h1:olpwvP2KacW1ZWvsR7uQhoyTYvKAupfQrRGBFM352Gk= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8 h1:nAL+RVCQ9uMn3vJZbV+MRnydTJFPf8qqY42YiA6MrqY= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= @@ -1915,8 +1905,6 @@ google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= google.golang.org/genproto v0.0.0-20220519153652-3a47de7e79bd/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc h1:Nf+EdcTLHR8qDNN/KfkQL0u0ssxt9OhbaWCl5C0ucEI= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a h1:GH6UPn3ixhWcKDhpnEC55S75cerLPdpp3hrhfKYjZgw= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o= From 06d1a09469da0acfc4f72ab4d9d94fbaae11866e Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Tue, 18 Oct 2022 13:46:22 -0700 Subject: [PATCH 17/30] Fix script --- scripts/initialize_local.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scripts/initialize_local.sh b/scripts/initialize_local.sh index 7b5f2c21f5..adf6c2f31a 100755 --- a/scripts/initialize_local.sh +++ b/scripts/initialize_local.sh @@ -29,9 +29,5 @@ cat ~/.sei/config/genesis.json | jq '.app_state["staking"]["params"]["bond_denom cat ~/.sei/config/genesis.json | jq '.app_state["gov"]["deposit_params"]["max_deposit_period"]="30s"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json cat ~/.sei/config/genesis.json | jq '.app_state["gov"]["voting_params"]["voting_period"]="30s"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json cat ~/.sei/config/genesis.json | jq '.consensus_params["block"]["time_iota_ms"]="30"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json -<<<<<<< HEAD cat ~/.sei/config/genesis.json | jq '.app_state["distribution"]["params"]["community_tax"]="0.000000000000000000"' > ~/.sei/config/tmp_genesis.json && mv ~/.sei/config/tmp_genesis.json ~/.sei/config/genesis.json -printf '00000000\n' | ./build/seid start --log_level warn -======= printf '00000000\n' | ./build/seid start --log_level warn --chain-id sei-chain ->>>>>>> 7031e020 (Implement optimistic processing (#222)) From 14cfd63a649a2afe5bacb8be9058ea646715c6a7 Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Tue, 18 Oct 2022 14:17:10 -0700 Subject: [PATCH 18/30] Revert "Register accesscontrol module (#257)" This reverts commit 7248ade7e9e6f0b19498f55c758b27cdd11a0d1e. --- app/ante.go | 5 ++++- app/app.go | 59 ++++++++++++++++------------------------------------- go.mod | 4 ++-- go.sum | 10 ++++----- 4 files changed, 28 insertions(+), 50 deletions(-) diff --git a/app/ante.go b/app/ante.go index d6e5b04e74..3df2e5c05f 100644 --- a/app/ante.go +++ b/app/ante.go @@ -70,9 +70,12 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { // } else { // sigVerifyDecorator = ante.NewBatchSigVerificationDecorator(options.BatchVerifier, sequentialVerifyDecorator) // } + + memPoolDecorator := ante.NewMempoolFeeDecorator() anteDecorators := []sdk.AnteDecorator{ ante.NewSetUpContextDecorator(), // outermost AnteDecorator. SetUpContext must be called first // TODO: have dex antehandler separate, and then call the individual antehandlers FROM the gasless antehandler decorator wrapper + antedecorators.NewGaslessDecorator([]sdk.AnteDecorator{&memPoolDecorator}, *options.OracleKeeper, *options.NitroKeeper), wasmkeeper.NewLimitSimulationGasDecorator(options.WasmConfig.SimulationGasLimit), // after setup context to enforce limits early wasmkeeper.NewCountTXDecorator(options.TXCounterStoreKey), ante.NewRejectExtensionOptionsDecorator(), @@ -81,7 +84,7 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewTxTimeoutHeightDecorator(), ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), - ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper, options.TxFeeChecker), + ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper), // PriorityDecorator must be called after DeductFeeDecorator which sets tx priority based on tx fees antedecorators.NewPriorityDecorator(), // SetPubKeyDecorator must be called before all signature verification decorators diff --git a/app/app.go b/app/app.go index d0de7051eb..f8db6e55d2 100644 --- a/app/app.go +++ b/app/app.go @@ -33,10 +33,6 @@ import ( "github.com/cosmos/cosmos-sdk/version" "github.com/cosmos/cosmos-sdk/x/auth" "github.com/cosmos/cosmos-sdk/x/auth/ante" - - aclmodule "github.com/cosmos/cosmos-sdk/x/accesscontrol" - aclkeeper "github.com/cosmos/cosmos-sdk/x/accesscontrol/keeper" - acltypes "github.com/cosmos/cosmos-sdk/x/accesscontrol/types" authrest "github.com/cosmos/cosmos-sdk/x/auth/client/rest" authkeeper "github.com/cosmos/cosmos-sdk/x/auth/keeper" authsims "github.com/cosmos/cosmos-sdk/x/auth/simulation" @@ -162,7 +158,6 @@ var ( // non-dependant module elements, such as codec registration // and genesis verification. ModuleBasics = module.NewBasicManager( - aclmodule.AppModuleBasic{}, auth.AppModuleBasic{}, genutil.AppModuleBasic{}, bank.AppModuleBasic{}, @@ -191,7 +186,6 @@ var ( // module account permissions maccPerms = map[string][]string{ - acltypes.ModuleName: nil, authtypes.FeeCollectorName: nil, distrtypes.ModuleName: nil, minttypes.ModuleName: {authtypes.Minter}, @@ -284,24 +278,23 @@ type App struct { memKeys map[string]*sdk.MemoryStoreKey // keepers - AccessControlKeeper aclkeeper.Keeper - AccountKeeper authkeeper.AccountKeeper - BankKeeper bankkeeper.Keeper - CapabilityKeeper *capabilitykeeper.Keeper - StakingKeeper stakingkeeper.Keeper - SlashingKeeper slashingkeeper.Keeper - MintKeeper mintkeeper.Keeper - DistrKeeper distrkeeper.Keeper - GovKeeper govkeeper.Keeper - CrisisKeeper crisiskeeper.Keeper - UpgradeKeeper upgradekeeper.Keeper - ParamsKeeper paramskeeper.Keeper - IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly - EvidenceKeeper evidencekeeper.Keeper - TransferKeeper ibctransferkeeper.Keeper - FeeGrantKeeper feegrantkeeper.Keeper - WasmKeeper wasm.Keeper - OracleKeeper oraclekeeper.Keeper + AccountKeeper authkeeper.AccountKeeper + BankKeeper bankkeeper.Keeper + CapabilityKeeper *capabilitykeeper.Keeper + StakingKeeper stakingkeeper.Keeper + SlashingKeeper slashingkeeper.Keeper + MintKeeper mintkeeper.Keeper + DistrKeeper distrkeeper.Keeper + GovKeeper govkeeper.Keeper + CrisisKeeper crisiskeeper.Keeper + UpgradeKeeper upgradekeeper.Keeper + ParamsKeeper paramskeeper.Keeper + IBCKeeper *ibckeeper.Keeper // IBC Keeper must be a pointer in the app, so we can SetRouter on it correctly + EvidenceKeeper evidencekeeper.Keeper + TransferKeeper ibctransferkeeper.Keeper + FeeGrantKeeper feegrantkeeper.Keeper + WasmKeeper wasm.Keeper + OracleKeeper oraclekeeper.Keeper // make scoped keepers public for test purposes ScopedIBCKeeper capabilitykeeper.ScopedKeeper @@ -356,7 +349,7 @@ func New( bApp.SetInterfaceRegistry(interfaceRegistry) keys := sdk.NewKVStoreKeys( - acltypes.StoreKey, authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, + authtypes.StoreKey, banktypes.StoreKey, stakingtypes.StoreKey, minttypes.StoreKey, distrtypes.StoreKey, slashingtypes.StoreKey, govtypes.StoreKey, paramstypes.StoreKey, ibchost.StoreKey, upgradetypes.StoreKey, feegrant.StoreKey, evidencetypes.StoreKey, ibctransfertypes.StoreKey, capabilitytypes.StoreKey, oracletypes.StoreKey, wasm.StoreKey, @@ -406,11 +399,6 @@ func New( // this line is used by starport scaffolding # stargate/app/scopedKeeper // add keepers - app.AccessControlKeeper = aclkeeper.NewKeeper( - appCodec, - app.keys[acltypes.StoreKey], - app.GetSubspace(acltypes.ModuleName), - ) app.AccountKeeper = authkeeper.NewAccountKeeper( appCodec, keys[authtypes.StoreKey], app.GetSubspace(authtypes.ModuleName), authtypes.ProtoBaseAccount, maccPerms, ) @@ -580,7 +568,6 @@ func New( app.AccountKeeper, app.StakingKeeper, app.BaseApp.DeliverTx, encodingConfig.TxConfig, ), - aclmodule.NewAppModule(appCodec, app.AccessControlKeeper), auth.NewAppModule(appCodec, app.AccountKeeper, nil), vesting.NewAppModule(app.AccountKeeper, app.BankKeeper), bank.NewAppModule(appCodec, app.BankKeeper, app.AccountKeeper), @@ -634,7 +621,6 @@ func New( wasm.ModuleName, tokenfactorytypes.ModuleName, nitrotypes.ModuleName, - acltypes.ModuleName, ) app.mm.SetOrderEndBlockers( @@ -661,7 +647,6 @@ func New( wasm.ModuleName, tokenfactorytypes.ModuleName, nitrotypes.ModuleName, - acltypes.ModuleName, ) // NOTE: The genutils module must occur after staking so that pools are @@ -693,7 +678,6 @@ func New( dexmoduletypes.ModuleName, nitrotypes.ModuleName, wasm.ModuleName, - acltypes.ModuleName, // this line is used by starport scaffolding # stargate/app/initGenesis ) @@ -829,12 +813,6 @@ func (app *App) SetStoreUpgradeHandlers() { storeUpgrades := storetypes.StoreUpgrades{ Added: []string{nitrotypes.StoreKey}, } - app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) - } - if upgradeInfo.Name == "1.2.3beta" && !app.UpgradeKeeper.IsSkipHeight(upgradeInfo.Height) { - storeUpgrades := storetypes.StoreUpgrades{ - Added: []string{acltypes.StoreKey}, - } // configure store loader that checks if version == upgradeHeight and applies store upgrades app.SetStoreLoader(upgradetypes.UpgradeStoreLoader(upgradeInfo.Height, &storeUpgrades)) @@ -1139,7 +1117,6 @@ func GetMaccPerms() map[string][]string { func initParamsKeeper(appCodec codec.BinaryCodec, legacyAmino *codec.LegacyAmino, key, tkey sdk.StoreKey) paramskeeper.Keeper { paramsKeeper := paramskeeper.NewKeeper(appCodec, legacyAmino, key, tkey) - paramsKeeper.Subspace(acltypes.ModuleName) paramsKeeper.Subspace(authtypes.ModuleName) paramsKeeper.Subspace(banktypes.ModuleName) paramsKeeper.Subspace(stakingtypes.ModuleName) diff --git a/go.mod b/go.mod index c48c793523..3d34c290f9 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,7 @@ require ( github.com/regen-network/cosmos-proto v0.3.1 github.com/spf13/cast v1.5.0 github.com/spf13/cobra v1.4.0 - github.com/stretchr/testify v1.8.0 + github.com/stretchr/testify v1.7.2 github.com/tendermint/tendermint v0.37.0-dev github.com/tendermint/tm-db v0.6.8-0.20220519162814-e24b96538a12 go.opentelemetry.io/otel v1.9.0 @@ -130,7 +130,7 @@ require ( ) replace ( - github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.66 + github.com/cosmos/cosmos-sdk => github.com/sei-protocol/sei-cosmos v0.1.20 github.com/gogo/protobuf => github.com/regen-network/protobuf v1.3.3-alpha.regen.1 github.com/keybase/go-keychain => github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 github.com/tendermint/tendermint => github.com/sei-protocol/sei-tendermint v0.1.59 diff --git a/go.sum b/go.sum index dd8e83bc54..4668461d27 100644 --- a/go.sum +++ b/go.sum @@ -1096,8 +1096,8 @@ github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg github.com/seccomp/libseccomp-golang v0.9.1/go.mod h1:GbW5+tmTXfcxTToHLXlScSlAvWlF4P2Ca7zGrPiEpWo= github.com/securego/gosec/v2 v2.11.0/go.mod h1:SX8bptShuG8reGC0XS09+a4H2BoWSJi+fscA+Pulbpo= github.com/segmentio/fasthash v1.0.3/go.mod h1:waKX8l2N8yckOgmSsXJi7x1ZfdKZ4x7KRMzBtS3oedY= -github.com/sei-protocol/sei-cosmos v0.1.66 h1:ow4z4wKm1iN1GoZAaz+kCB6nv+BKSLnhpFvyale785M= -github.com/sei-protocol/sei-cosmos v0.1.66/go.mod h1:3uCdb2FCio9uVQRPdZxZ1GqHqyb1moYH93xtTMa7DL8= +github.com/sei-protocol/sei-cosmos v0.1.20 h1:QqYntfddnFBRLGCOVdIlwDg5Xa3TlfmhSEcg9ehx1Ys= +github.com/sei-protocol/sei-cosmos v0.1.20/go.mod h1:9JV9q6Ds2FpU409zu8sw8feCaOiGZApUMjaHvXQOmc8= github.com/sei-protocol/sei-tendermint v0.1.59 h1:POGL60PumMQHF4EzAHzvkGfDnodQJLHpl65LuiwSO/Y= github.com/sei-protocol/sei-tendermint v0.1.59/go.mod h1:Olwbjyagrpoxj5DAUhHxMTWDVEfQ3FYdpypaJ3+6Hs8= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= @@ -1167,9 +1167,8 @@ github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5J github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48= github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/objx v0.4.0 h1:M2gUjqZET1qApGOWNSnZ49BAIMX4F/1plDv3+l31EJ4= -github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/testify v0.0.0-20170130113145-4d4bfba8f1d1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= @@ -1179,9 +1178,8 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= -github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= -github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/subosito/gotenv v1.3.0 h1:mjC+YW8QpAdXibNi+vNWgzmgBH4+5l5dCXv8cNysBLI= github.com/subosito/gotenv v1.3.0/go.mod h1:YzJjq/33h7nrwdY+iHMhEOEEbW0ovIz0tB6t6PwAXzs= From 72dd49eaa559fe53d6e9c1ff6814d87032abbd13 Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Tue, 18 Oct 2022 18:44:00 -0700 Subject: [PATCH 19/30] rm priority --- app/ante.go | 2 -- app/antedecorators/priority.go | 52 ---------------------------------- 2 files changed, 54 deletions(-) delete mode 100644 app/antedecorators/priority.go diff --git a/app/ante.go b/app/ante.go index 3df2e5c05f..3f04c6a9d9 100644 --- a/app/ante.go +++ b/app/ante.go @@ -85,8 +85,6 @@ func NewAnteHandler(options HandlerOptions) (sdk.AnteHandler, error) { ante.NewValidateMemoDecorator(options.AccountKeeper), ante.NewConsumeGasForTxSizeDecorator(options.AccountKeeper), ante.NewDeductFeeDecorator(options.AccountKeeper, options.BankKeeper, options.FeegrantKeeper), - // PriorityDecorator must be called after DeductFeeDecorator which sets tx priority based on tx fees - antedecorators.NewPriorityDecorator(), // SetPubKeyDecorator must be called before all signature verification decorators ante.NewSetPubKeyDecorator(options.AccountKeeper), ante.NewValidateSigCountDecorator(options.AccountKeeper), diff --git a/app/antedecorators/priority.go b/app/antedecorators/priority.go deleted file mode 100644 index a8d741bcb5..0000000000 --- a/app/antedecorators/priority.go +++ /dev/null @@ -1,52 +0,0 @@ -package antedecorators - -import ( - "math" - - sdk "github.com/cosmos/cosmos-sdk/types" - oracletypes "github.com/sei-protocol/sei-chain/x/oracle/types" -) - -type PriorityDecorator struct{} - -func NewPriorityDecorator() PriorityDecorator { - return PriorityDecorator{} -} - -func intMin(a, b int64) int64 { - if a < b { - return a - } - return b -} - -// Assigns higher priority to certain types of transactions including oracle -func (pd PriorityDecorator) AnteHandle(ctx sdk.Context, tx sdk.Tx, simulate bool, next sdk.AnteHandler) (sdk.Context, error) { - // Cap priority to MAXINT64 - 1000 - // Use higher priorities for tiers including oracle tx's - priority := intMin(ctx.Priority(), math.MaxInt64-1000) - - if isOracleTx(tx) { - priority = math.MaxInt64 - 100 - } - - newCtx := ctx.WithPriority(priority) - - return next(newCtx, tx, simulate) -} - -func isOracleTx(tx sdk.Tx) bool { - if len(tx.GetMsgs()) == 0 { - // empty TX isn't oracle - return false - } - for _, msg := range tx.GetMsgs() { - switch msg.(type) { - case *oracletypes.MsgAggregateExchangeRateVote: - continue - default: - return false - } - } - return true -} From ab1ae9db7820c6a3cb9ae57060ad1ff885ccd4ef Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Tue, 18 Oct 2022 20:09:18 -0700 Subject: [PATCH 20/30] rm test --- .../msg_server_cancel_orders_test.go | 150 ------------------ 1 file changed, 150 deletions(-) delete mode 100644 x/dex/keeper/msgserver/msg_server_cancel_orders_test.go diff --git a/x/dex/keeper/msgserver/msg_server_cancel_orders_test.go b/x/dex/keeper/msgserver/msg_server_cancel_orders_test.go deleted file mode 100644 index e5df0214f3..0000000000 --- a/x/dex/keeper/msgserver/msg_server_cancel_orders_test.go +++ /dev/null @@ -1,150 +0,0 @@ -package msgserver_test - -import ( - "testing" - - sdk "github.com/cosmos/cosmos-sdk/types" - keepertest "github.com/sei-protocol/sei-chain/testutil/keeper" - "github.com/sei-protocol/sei-chain/x/dex/keeper/msgserver" - "github.com/sei-protocol/sei-chain/x/dex/types" - typesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" - "github.com/stretchr/testify/require" -) - -func TestCancelOrder(t *testing.T) { - // store a long limit order to the orderbook - keeper, ctx := keepertest.DexKeeper(t) - keeper.SetLongBook(ctx, keepertest.TestContract, types.LongBook{ - Price: sdk.OneDec(), - Entry: &types.OrderEntry{ - Price: sdk.OneDec(), - Quantity: sdk.MustNewDecFromStr("2"), - PriceDenom: keepertest.TestPriceDenom, - AssetDenom: keepertest.TestAssetDenom, - Allocations: []*types.Allocation{ - { - Account: keepertest.TestAccount, - OrderId: 1, - Quantity: sdk.MustNewDecFromStr("2"), - }, - }, - }, - }) - - // cancel order - msg := &types.MsgCancelOrders{ - Creator: keepertest.TestAccount, - ContractAddr: keepertest.TestContract, - Cancellations: []*types.Cancellation{ - { - Price: sdk.OneDec(), - PositionDirection: types.PositionDirection_LONG, - PriceDenom: keepertest.TestPriceDenom, - AssetDenom: keepertest.TestAssetDenom, - Id: 1, - }, - }, - } - keeper.AddRegisteredPair(ctx, keepertest.TestContract, keepertest.TestPair) - keeper.SetTickSizeForPair(ctx, keepertest.TestContract, keepertest.TestPair, *keepertest.TestPair.Ticksize) - wctx := sdk.WrapSDKContext(ctx) - server := msgserver.NewMsgServerImpl(*keeper) - _, err := server.CancelOrders(wctx, msg) - - pairBlockCancellations := keeper.MemState.GetBlockCancels(ctx, keepertest.TestContract, typesutils.GetPairString(&keepertest.TestPair)) - require.Nil(t, err) - require.Equal(t, 1, len(pairBlockCancellations.Get())) - require.Equal(t, uint64(1), pairBlockCancellations.Get()[0].Id) - require.Equal(t, sdk.OneDec(), pairBlockCancellations.Get()[0].Price) - require.Equal(t, "atom", pairBlockCancellations.Get()[0].AssetDenom) - require.Equal(t, "usdc", pairBlockCancellations.Get()[0].PriceDenom) - require.Equal(t, keepertest.TestAccount, pairBlockCancellations.Get()[0].Creator) - require.Equal(t, keepertest.TestContract, pairBlockCancellations.Get()[0].ContractAddr) -} - -func TestInvalidCancels(t *testing.T) { - // nil cancel price - keeper, ctx := keepertest.DexKeeper(t) - msg := &types.MsgCancelOrders{ - Creator: keepertest.TestAccount, - ContractAddr: keepertest.TestContract, - Cancellations: []*types.Cancellation{ - { - PositionDirection: types.PositionDirection_LONG, - PriceDenom: keepertest.TestPriceDenom, - AssetDenom: keepertest.TestAssetDenom, - Id: 1, - }, - }, - } - keeper.AddRegisteredPair(ctx, keepertest.TestContract, keepertest.TestPair) - keeper.SetTickSizeForPair(ctx, keepertest.TestContract, keepertest.TestPair, *keepertest.TestPair.Ticksize) - wctx := sdk.WrapSDKContext(ctx) - server := msgserver.NewMsgServerImpl(*keeper) - _, err := server.CancelOrders(wctx, msg) - require.NotNil(t, err) - - // nil creator - msg = &types.MsgCancelOrders{ - ContractAddr: keepertest.TestContract, - Cancellations: []*types.Cancellation{ - { - PositionDirection: types.PositionDirection_LONG, - PriceDenom: keepertest.TestPriceDenom, - AssetDenom: keepertest.TestAssetDenom, - Id: 1, - Price: sdk.OneDec(), - }, - }, - } - _, err = server.CancelOrders(wctx, msg) - require.NotNil(t, err) - - // nil contract address - msg = &types.MsgCancelOrders{ - Creator: keepertest.TestAccount, - Cancellations: []*types.Cancellation{ - { - Price: sdk.OneDec(), - PositionDirection: types.PositionDirection_LONG, - PriceDenom: keepertest.TestPriceDenom, - AssetDenom: keepertest.TestAssetDenom, - Id: 1, - }, - }, - } - _, err = server.CancelOrders(wctx, msg) - require.NotNil(t, err) - - // nil price denom - msg = &types.MsgCancelOrders{ - Creator: keepertest.TestAccount, - ContractAddr: keepertest.TestContract, - Cancellations: []*types.Cancellation{ - { - Price: sdk.OneDec(), - PositionDirection: types.PositionDirection_LONG, - AssetDenom: keepertest.TestAssetDenom, - Id: 1, - }, - }, - } - _, err = server.CancelOrders(wctx, msg) - require.NotNil(t, err) - - // nil asset denom - msg = &types.MsgCancelOrders{ - Creator: keepertest.TestAccount, - ContractAddr: keepertest.TestContract, - Cancellations: []*types.Cancellation{ - { - Price: sdk.OneDec(), - PositionDirection: types.PositionDirection_LONG, - PriceDenom: keepertest.TestPriceDenom, - Id: 1, - }, - }, - } - _, err = server.CancelOrders(wctx, msg) - require.NotNil(t, err) -} From 206bbf7fe16afc866d1e432edb451054ee2ea2a3 Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Wed, 19 Oct 2022 07:57:16 -0700 Subject: [PATCH 21/30] more fixes --- go.mod | 2 ++ go.sum | 3 +++ x/mint/keeper/hooks_test.go | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 3d34c290f9..c766dc5b26 100644 --- a/go.mod +++ b/go.mod @@ -55,6 +55,7 @@ require ( github.com/dvsekhvalnov/jose2go v0.0.0-20200901110807-248326c1351b // indirect github.com/felixge/httpsnoop v1.0.1 // indirect github.com/fsnotify/fsnotify v1.5.4 // indirect + github.com/ghodss/yaml v1.0.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.0 // indirect github.com/go-logfmt/logfmt v0.5.1 // indirect @@ -75,6 +76,7 @@ require ( github.com/gorilla/websocket v1.5.0 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 // indirect github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 // indirect + github.com/grpc-ecosystem/grpc-gateway/v2 v2.12.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/golang-lru v0.5.4 // indirect diff --git a/go.sum b/go.sum index 4668461d27..dd32879970 100644 --- a/go.sum +++ b/go.sum @@ -373,6 +373,7 @@ github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmV github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM= github.com/fzipp/gocyclo v0.5.1/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff/go.mod h1:x7DCsMOv1taUwEWCzT4cmDeAkigA5/QCwUodaVOe8Ww= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= @@ -613,6 +614,8 @@ github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t github.com/grpc-ecosystem/grpc-gateway v1.12.1/go.mod h1:8XEsbTttt/W+VvjtQhLACqCisSPWTxCZ7sBRjU6iH9c= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.12.0 h1:kr3j8iIMR4ywO/O0rvksXaJvauGGCMg2zAZIiNZ9uIQ= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.12.0/go.mod h1:ummNFgdgLhhX7aIiy35vVmQNS0rWXknfPE0qe6fmFXg= 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= diff --git a/x/mint/keeper/hooks_test.go b/x/mint/keeper/hooks_test.go index 75bf4a9678..d63c1d1b20 100644 --- a/x/mint/keeper/hooks_test.go +++ b/x/mint/keeper/hooks_test.go @@ -43,7 +43,7 @@ func TestEndOfEpochMintedCoinDistribution(t *testing.T) { seiApp.MintKeeper.SetParams(ctx, mintParams) header := tmproto.Header{Height: seiApp.LastBlockHeight() + 1} - seiApp.BeginBlock(abci.RequestBeginBlock{Header: header}) + seiApp.BeginBlock(ctx, abci.RequestBeginBlock{Header: header}) // Year 1 currTime := genesisTime.AddDate(1, 0, 0) @@ -80,7 +80,7 @@ func TestNoEpochPassedNoDistribution(t *testing.T) { seiApp := app.Setup(false) ctx := seiApp.BaseApp.NewContext(false, tmproto.Header{}) header := tmproto.Header{Height: seiApp.LastBlockHeight() + 1} - seiApp.BeginBlock(abci.RequestBeginBlock{Header: header}) + seiApp.BeginBlock(ctx, abci.RequestBeginBlock{Header: header}) // Get mint params mintParams := seiApp.MintKeeper.GetParams(ctx) genesisTime := time.Date(2022, time.Month(7), 18, 10, 0, 0, 0, time.UTC) From e60060c3bcb0d6714d0eef5f777295bebe4aa485 Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Wed, 19 Oct 2022 20:14:15 -0700 Subject: [PATCH 22/30] Add back cancel test --- .../msg_server_cancel_orders_test.go | 150 ++++++++++++++++++ 1 file changed, 150 insertions(+) create mode 100644 x/dex/keeper/msgserver/msg_server_cancel_orders_test.go diff --git a/x/dex/keeper/msgserver/msg_server_cancel_orders_test.go b/x/dex/keeper/msgserver/msg_server_cancel_orders_test.go new file mode 100644 index 0000000000..e5df0214f3 --- /dev/null +++ b/x/dex/keeper/msgserver/msg_server_cancel_orders_test.go @@ -0,0 +1,150 @@ +package msgserver_test + +import ( + "testing" + + sdk "github.com/cosmos/cosmos-sdk/types" + keepertest "github.com/sei-protocol/sei-chain/testutil/keeper" + "github.com/sei-protocol/sei-chain/x/dex/keeper/msgserver" + "github.com/sei-protocol/sei-chain/x/dex/types" + typesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" + "github.com/stretchr/testify/require" +) + +func TestCancelOrder(t *testing.T) { + // store a long limit order to the orderbook + keeper, ctx := keepertest.DexKeeper(t) + keeper.SetLongBook(ctx, keepertest.TestContract, types.LongBook{ + Price: sdk.OneDec(), + Entry: &types.OrderEntry{ + Price: sdk.OneDec(), + Quantity: sdk.MustNewDecFromStr("2"), + PriceDenom: keepertest.TestPriceDenom, + AssetDenom: keepertest.TestAssetDenom, + Allocations: []*types.Allocation{ + { + Account: keepertest.TestAccount, + OrderId: 1, + Quantity: sdk.MustNewDecFromStr("2"), + }, + }, + }, + }) + + // cancel order + msg := &types.MsgCancelOrders{ + Creator: keepertest.TestAccount, + ContractAddr: keepertest.TestContract, + Cancellations: []*types.Cancellation{ + { + Price: sdk.OneDec(), + PositionDirection: types.PositionDirection_LONG, + PriceDenom: keepertest.TestPriceDenom, + AssetDenom: keepertest.TestAssetDenom, + Id: 1, + }, + }, + } + keeper.AddRegisteredPair(ctx, keepertest.TestContract, keepertest.TestPair) + keeper.SetTickSizeForPair(ctx, keepertest.TestContract, keepertest.TestPair, *keepertest.TestPair.Ticksize) + wctx := sdk.WrapSDKContext(ctx) + server := msgserver.NewMsgServerImpl(*keeper) + _, err := server.CancelOrders(wctx, msg) + + pairBlockCancellations := keeper.MemState.GetBlockCancels(ctx, keepertest.TestContract, typesutils.GetPairString(&keepertest.TestPair)) + require.Nil(t, err) + require.Equal(t, 1, len(pairBlockCancellations.Get())) + require.Equal(t, uint64(1), pairBlockCancellations.Get()[0].Id) + require.Equal(t, sdk.OneDec(), pairBlockCancellations.Get()[0].Price) + require.Equal(t, "atom", pairBlockCancellations.Get()[0].AssetDenom) + require.Equal(t, "usdc", pairBlockCancellations.Get()[0].PriceDenom) + require.Equal(t, keepertest.TestAccount, pairBlockCancellations.Get()[0].Creator) + require.Equal(t, keepertest.TestContract, pairBlockCancellations.Get()[0].ContractAddr) +} + +func TestInvalidCancels(t *testing.T) { + // nil cancel price + keeper, ctx := keepertest.DexKeeper(t) + msg := &types.MsgCancelOrders{ + Creator: keepertest.TestAccount, + ContractAddr: keepertest.TestContract, + Cancellations: []*types.Cancellation{ + { + PositionDirection: types.PositionDirection_LONG, + PriceDenom: keepertest.TestPriceDenom, + AssetDenom: keepertest.TestAssetDenom, + Id: 1, + }, + }, + } + keeper.AddRegisteredPair(ctx, keepertest.TestContract, keepertest.TestPair) + keeper.SetTickSizeForPair(ctx, keepertest.TestContract, keepertest.TestPair, *keepertest.TestPair.Ticksize) + wctx := sdk.WrapSDKContext(ctx) + server := msgserver.NewMsgServerImpl(*keeper) + _, err := server.CancelOrders(wctx, msg) + require.NotNil(t, err) + + // nil creator + msg = &types.MsgCancelOrders{ + ContractAddr: keepertest.TestContract, + Cancellations: []*types.Cancellation{ + { + PositionDirection: types.PositionDirection_LONG, + PriceDenom: keepertest.TestPriceDenom, + AssetDenom: keepertest.TestAssetDenom, + Id: 1, + Price: sdk.OneDec(), + }, + }, + } + _, err = server.CancelOrders(wctx, msg) + require.NotNil(t, err) + + // nil contract address + msg = &types.MsgCancelOrders{ + Creator: keepertest.TestAccount, + Cancellations: []*types.Cancellation{ + { + Price: sdk.OneDec(), + PositionDirection: types.PositionDirection_LONG, + PriceDenom: keepertest.TestPriceDenom, + AssetDenom: keepertest.TestAssetDenom, + Id: 1, + }, + }, + } + _, err = server.CancelOrders(wctx, msg) + require.NotNil(t, err) + + // nil price denom + msg = &types.MsgCancelOrders{ + Creator: keepertest.TestAccount, + ContractAddr: keepertest.TestContract, + Cancellations: []*types.Cancellation{ + { + Price: sdk.OneDec(), + PositionDirection: types.PositionDirection_LONG, + AssetDenom: keepertest.TestAssetDenom, + Id: 1, + }, + }, + } + _, err = server.CancelOrders(wctx, msg) + require.NotNil(t, err) + + // nil asset denom + msg = &types.MsgCancelOrders{ + Creator: keepertest.TestAccount, + ContractAddr: keepertest.TestContract, + Cancellations: []*types.Cancellation{ + { + Price: sdk.OneDec(), + PositionDirection: types.PositionDirection_LONG, + PriceDenom: keepertest.TestPriceDenom, + Id: 1, + }, + }, + } + _, err = server.CancelOrders(wctx, msg) + require.NotNil(t, err) +} From 4022147188b8b31a073ba39016103c1be5a06237 Mon Sep 17 00:00:00 2001 From: codchen Date: Wed, 19 Oct 2022 20:42:59 -0700 Subject: [PATCH 23/30] Fix dex module test (#321) --- loadtest/contracts/jupiter/Cargo.lock | 4 ++-- loadtest/contracts/jupiter/Cargo.toml | 2 +- loadtest/contracts/jupiter/src/contract.rs | 2 +- loadtest/contracts/mars/Cargo.lock | 4 ++-- loadtest/contracts/mars/Cargo.toml | 2 +- loadtest/contracts/saturn/Cargo.toml | 2 +- loadtest/contracts/venus/Cargo.toml | 2 +- x/dex/module_test.go | 21 +++++++++++---------- x/dex/testdata/mars.wasm | Bin 0 -> 191011 bytes 9 files changed, 20 insertions(+), 19 deletions(-) create mode 100644 x/dex/testdata/mars.wasm diff --git a/loadtest/contracts/jupiter/Cargo.lock b/loadtest/contracts/jupiter/Cargo.lock index 3f9c9d5dfd..183d960221 100644 --- a/loadtest/contracts/jupiter/Cargo.lock +++ b/loadtest/contracts/jupiter/Cargo.lock @@ -501,9 +501,9 @@ dependencies = [ [[package]] name = "sei-cosmwasm" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cace5feff10f2f826f42ed459b8162d023b785aaf677bc640f42091c0e16e0" +checksum = "869bc11575e307e8f885de6ade9a5a3458cc52a1a3fd2c58af730301c43ec0cc" dependencies = [ "cosmwasm-std", "schemars", diff --git a/loadtest/contracts/jupiter/Cargo.toml b/loadtest/contracts/jupiter/Cargo.toml index 8ef36e801a..e09876be5e 100644 --- a/loadtest/contracts/jupiter/Cargo.toml +++ b/loadtest/contracts/jupiter/Cargo.toml @@ -19,7 +19,7 @@ serde = { version = "1.0.127", default-features = false, features = ["derive"] } serde_json = { version = "1.0", default-features = false, features = ["alloc"] } thiserror = { version = "1.0.26" } base64 = { version = "0.13.0" } -sei-cosmwasm = "0.2.0" +sei-cosmwasm = "0.3.0" [dependencies.forward_ref] version = "1" diff --git a/loadtest/contracts/jupiter/src/contract.rs b/loadtest/contracts/jupiter/src/contract.rs index b56dff8ee9..4a83baaf9c 100644 --- a/loadtest/contracts/jupiter/src/contract.rs +++ b/loadtest/contracts/jupiter/src/contract.rs @@ -83,11 +83,11 @@ pub fn process_bulk_order_placements( position_direction: PositionDirection::Long, order_type: OrderType::Limit, data: "".to_string(), + status_description: "".to_string(), }; let order = sei_cosmwasm::SeiMsg::PlaceOrders { funds: vec![], orders: vec![order_placement], - creator: env.contract.address, contract_address: MARS_ADDR.load(deps.storage)?, }; response = Response::new().add_message(order); diff --git a/loadtest/contracts/mars/Cargo.lock b/loadtest/contracts/mars/Cargo.lock index 3415d08c99..bafff58d33 100644 --- a/loadtest/contracts/mars/Cargo.lock +++ b/loadtest/contracts/mars/Cargo.lock @@ -501,9 +501,9 @@ dependencies = [ [[package]] name = "sei-cosmwasm" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "32cace5feff10f2f826f42ed459b8162d023b785aaf677bc640f42091c0e16e0" +checksum = "869bc11575e307e8f885de6ade9a5a3458cc52a1a3fd2c58af730301c43ec0cc" dependencies = [ "cosmwasm-std", "schemars", diff --git a/loadtest/contracts/mars/Cargo.toml b/loadtest/contracts/mars/Cargo.toml index aa09a99450..fd18d75f8a 100644 --- a/loadtest/contracts/mars/Cargo.toml +++ b/loadtest/contracts/mars/Cargo.toml @@ -19,7 +19,7 @@ serde = { version = "1.0.127", default-features = false, features = ["derive"] } serde_json = { version = "1.0", default-features = false, features = ["alloc"] } thiserror = { version = "1.0.26" } base64 = { version = "0.13.0" } -sei-cosmwasm = "0.2.0" +sei-cosmwasm = "0.3.0" [dependencies.forward_ref] version = "1" diff --git a/loadtest/contracts/saturn/Cargo.toml b/loadtest/contracts/saturn/Cargo.toml index c442a5cb58..e973b8bed9 100644 --- a/loadtest/contracts/saturn/Cargo.toml +++ b/loadtest/contracts/saturn/Cargo.toml @@ -19,7 +19,7 @@ serde = { version = "1.0.127", default-features = false, features = ["derive"] } serde_json = { version = "1.0", default-features = false, features = ["alloc"] } thiserror = { version = "1.0.26" } base64 = { version = "0.13.0" } -sei-cosmwasm = "0.2.0" +sei-cosmwasm = "0.3.0" [dependencies.forward_ref] version = "1" diff --git a/loadtest/contracts/venus/Cargo.toml b/loadtest/contracts/venus/Cargo.toml index ed70cdfa92..f571fd4959 100644 --- a/loadtest/contracts/venus/Cargo.toml +++ b/loadtest/contracts/venus/Cargo.toml @@ -19,7 +19,7 @@ serde = { version = "1.0.127", default-features = false, features = ["derive"] } serde_json = { version = "1.0", default-features = false, features = ["alloc"] } thiserror = { version = "1.0.26" } base64 = { version = "0.13.0" } -sei-cosmwasm = "0.2.0" +sei-cosmwasm = "0.3.0" [dependencies.forward_ref] version = "1" diff --git a/x/dex/module_test.go b/x/dex/module_test.go index 914fb05fa5..0f53e4080c 100644 --- a/x/dex/module_test.go +++ b/x/dex/module_test.go @@ -58,7 +58,7 @@ func TestEndBlockMarketOrder(t *testing.T) { bankkeeper := testApp.BankKeeper bankkeeper.MintCoins(ctx, minttypes.ModuleName, amounts) bankkeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, testAccount, amounts) - wasm, err := ioutil.ReadFile("./testdata/clearing_house.wasm") + wasm, err := ioutil.ReadFile("./testdata/mars.wasm") if err != nil { panic(err) } @@ -74,7 +74,7 @@ func TestEndBlockMarketOrder(t *testing.T) { if err != nil { panic(err) } - dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: true, NeedOrderMatching: true}) + dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: false, NeedOrderMatching: true}) dexkeeper.AddRegisteredPair(ctx, contractAddr.String(), pair) // place one order to a nonexistent contract dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( @@ -141,6 +141,7 @@ func TestEndBlockMarketOrder(t *testing.T) { // Long book should be removed since it's executed // No state change should've been persisted for bad contract _, found = dexkeeper.GetLongBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("2"), pair.PriceDenom, pair.AssetDenom) + // Long book should be populated require.False(t, found) _, found = dexkeeper.GetLongBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("1"), pair.PriceDenom, pair.AssetDenom) require.True(t, found) @@ -180,7 +181,7 @@ func TestEndBlockRollback(t *testing.T) { dexkeeper := testApp.DexKeeper pair := TEST_PAIR() // register contract and pair - dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: keepertest.TestContract, NeedHook: true, NeedOrderMatching: true}) + dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: keepertest.TestContract, NeedHook: false, NeedOrderMatching: true}) dexkeeper.AddRegisteredPair(ctx, keepertest.TestContract, pair) // place one order to a nonexistent contract dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(keepertest.TestContract), utils.GetPairString(&pair)).Add( @@ -211,7 +212,7 @@ func TestEndBlockPartialRollback(t *testing.T) { dexkeeper := testApp.DexKeeper pair := TEST_PAIR() // register contract and pair - dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: keepertest.TestContract, NeedHook: true, NeedOrderMatching: true}) + dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: keepertest.TestContract, NeedHook: false, NeedOrderMatching: true}) dexkeeper.AddRegisteredPair(ctx, keepertest.TestContract, pair) // place one order to a nonexistent contract dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(keepertest.TestContract), utils.GetPairString(&pair)).Add( @@ -233,7 +234,7 @@ func TestEndBlockPartialRollback(t *testing.T) { bankkeeper := testApp.BankKeeper bankkeeper.MintCoins(ctx, minttypes.ModuleName, amounts) bankkeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, testAccount, amounts) - wasm, err := ioutil.ReadFile("./testdata/clearing_house.wasm") + wasm, err := ioutil.ReadFile("./testdata/mars.wasm") if err != nil { panic(err) } @@ -249,7 +250,7 @@ func TestEndBlockPartialRollback(t *testing.T) { if err != nil { panic(err) } - dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: true, NeedOrderMatching: true}) + dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: false, NeedOrderMatching: true}) dexkeeper.AddRegisteredPair(ctx, contractAddr.String(), pair) // place one order to a nonexistent contract dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( @@ -297,7 +298,7 @@ func TestBeginBlock(t *testing.T) { bankkeeper := testApp.BankKeeper bankkeeper.MintCoins(ctx, minttypes.ModuleName, amounts) bankkeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, testAccount, amounts) - wasm, err := ioutil.ReadFile("./testdata/clearing_house.wasm") + wasm, err := ioutil.ReadFile("./testdata/mars.wasm") if err != nil { panic(err) } @@ -313,7 +314,7 @@ func TestBeginBlock(t *testing.T) { if err != nil { panic(err) } - dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: true, NeedOrderMatching: true}) + dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: false, NeedOrderMatching: true}) // right now just make sure it doesn't crash since it doesn't register any state to be checked against testApp.BeginBlocker(ctx, abci.RequestBeginBlock{}) @@ -337,7 +338,7 @@ func TestEndBlockPanicHandling(t *testing.T) { bankkeeper := testApp.BankKeeper bankkeeper.MintCoins(ctx, minttypes.ModuleName, amounts) bankkeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, testAccount, amounts) - wasm, err := ioutil.ReadFile("./testdata/clearing_house.wasm") + wasm, err := ioutil.ReadFile("./testdata/mars.wasm") if err != nil { panic(err) } @@ -353,7 +354,7 @@ func TestEndBlockPanicHandling(t *testing.T) { if err != nil { panic(err) } - dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: true, NeedOrderMatching: true}) + dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: false, NeedOrderMatching: true}) dexkeeper.AddRegisteredPair(ctx, contractAddr.String(), pair) dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( &types.Order{ diff --git a/x/dex/testdata/mars.wasm b/x/dex/testdata/mars.wasm new file mode 100644 index 0000000000000000000000000000000000000000..8addcee304dbfe95128720b948d636864291403a GIT binary patch literal 191011 zcmeFa542}jRp)vC{QkY)pZ9+CFZEuk67KIuN?%Ep7LHOy$kKPKsU(O>Ovlw}o0(Kd ziXpE;NGb)5JsGM3X^0RoD6K(J3r(8{gpM}dlh%w@FhI0v32PWTJ&m)03L3Q^9$DqLsoL8PcdUxlN|M9vaF-lzojCC}{J#yoBe)o63^yO3UY>kDlyZ-nMZ{tc9fT&G}Noch> z*G}7c+HN+}@CKE51*npCXgW=s&D(>;xbo4$Ip{}@_ELyaV* zayQ?!Sv|M1R%1)DHLZ_Ipad?f0hL)*Fw!@lD5mG)sCn-E#Z!>u))JlSt>=8n?gs#y2H5_KzL8 z?aenGJ97JVw;#DFd1L4Ln{R&84XW^=w0q-`>h9;#O;trG_t^Ev-*hZ_7D7@ z(|?-2GksTjclu-LyVLii_oVMl7jC%W244HM^uy`DO#j#0jvc>c;UB-{tq-UF%c=BN z(|^K~hiLZ1!d>b6(jQOnRe!&n{#^F9g*&+V&Yw=-ys-b{>Az6%!q2C_kbW+G{laI{ zf0r(N=Wl1P|9utz`*cB7o=X2O9{tDki#+I{eRPE(mzlC zYx-=u@RQk3Wbe=ZJpJ+P-s}U}1KESwsqA#N@Qc~+WFO6bHT$*fce8()eIol;*}u)Y zAAYd=$?QMpY2!q;6#o^;VwTJ{(ngjiy&@_5%iNE%#*!X1Mro0i^EZ#Oe5pvwhMw^x z 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 F{|`2uo0k9p literal 0 HcmV?d00001 From 9a8838c90afc56d7b32b6b1a0820f0f0bc5935fb Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Thu, 20 Oct 2022 07:54:22 -0700 Subject: [PATCH 24/30] fix cancel tests --- x/dex/keeper/msgserver/msg_server_cancel_orders_test.go | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/x/dex/keeper/msgserver/msg_server_cancel_orders_test.go b/x/dex/keeper/msgserver/msg_server_cancel_orders_test.go index e5df0214f3..eb1656c273 100644 --- a/x/dex/keeper/msgserver/msg_server_cancel_orders_test.go +++ b/x/dex/keeper/msgserver/msg_server_cancel_orders_test.go @@ -8,6 +8,7 @@ import ( "github.com/sei-protocol/sei-chain/x/dex/keeper/msgserver" "github.com/sei-protocol/sei-chain/x/dex/types" typesutils "github.com/sei-protocol/sei-chain/x/dex/types/utils" + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" "github.com/stretchr/testify/require" ) @@ -51,7 +52,7 @@ func TestCancelOrder(t *testing.T) { server := msgserver.NewMsgServerImpl(*keeper) _, err := server.CancelOrders(wctx, msg) - pairBlockCancellations := keeper.MemState.GetBlockCancels(ctx, keepertest.TestContract, typesutils.GetPairString(&keepertest.TestPair)) + pairBlockCancellations := dexutils.GetMemState(ctx.Context()).GetBlockCancels(ctx, keepertest.TestContract, typesutils.GetPairString(&keepertest.TestPair)) require.Nil(t, err) require.Equal(t, 1, len(pairBlockCancellations.Get())) require.Equal(t, uint64(1), pairBlockCancellations.Get()[0].Id) From 841f2cbe3a761c6e4488c67e57c7ecce410e9f22 Mon Sep 17 00:00:00 2001 From: Cody Wang Date: Fri, 21 Oct 2022 18:14:04 -0700 Subject: [PATCH 25/30] Constant load test (#326) --- .gitignore | 4 ++- loadtest/config.json | 8 +++-- loadtest/main.go | 75 ++++++++++++++++++++++++++++++++++---------- loadtest/tx.go | 21 +++++++++++-- run_constant_load.sh | 1 + run_loadtest.sh | 12 +++++++ 6 files changed, 98 insertions(+), 23 deletions(-) create mode 100755 run_constant_load.sh create mode 100755 run_loadtest.sh diff --git a/.gitignore b/.gitignore index 7705f24352..57751b8f78 100644 --- a/.gitignore +++ b/.gitignore @@ -30,4 +30,6 @@ c.out # loadtest contracts build artifact loadtest/contracts/**/artifacts/ loadtest/contracts/**/target/ -loadtest/contracts/**.json \ No newline at end of file +loadtest/contracts/**.json + +loadtest_results.txt diff --git a/loadtest/config.json b/loadtest/config.json index d8673d83b0..70b835cd60 100644 --- a/loadtest/config.json +++ b/loadtest/config.json @@ -1,8 +1,8 @@ { - "batch_size": 10, + "batch_size": 1, "chain_id": "sei-loadtest-testnet", - "orders_per_block": 400, - "rounds": 5, + "orders_per_block": 1, + "rounds": 1, "price_distribution": { "min": "45", "max": "55", @@ -17,6 +17,8 @@ "limit_order_percentage": "0.2", "market_order_percentage": "0.8" }, + "constant": true, + "const_load_interval": 10, "message_type": "basic", "contract_distribution": [ { diff --git a/loadtest/main.go b/loadtest/main.go index 1759091eca..61110d5c06 100644 --- a/loadtest/main.go +++ b/loadtest/main.go @@ -37,15 +37,17 @@ type EncodingConfig struct { } type Config struct { - BatchSize uint64 `json:"batch_size"` - ChainID string `json:"chain_id"` - OrdersPerBlock uint64 `json:"orders_per_block"` - Rounds uint64 `json:"rounds"` - MessageType string `json:"message_type"` - PriceDistr NumericDistribution `json:"price_distribution"` - QuantityDistr NumericDistribution `json:"quantity_distribution"` - MsgTypeDistr MsgTypeDistribution `json:"message_type_distribution"` - ContractDistr ContractDistributions `json:"contract_distribution"` + BatchSize uint64 `json:"batch_size"` + ChainID string `json:"chain_id"` + OrdersPerBlock uint64 `json:"orders_per_block"` + Rounds uint64 `json:"rounds"` + MessageType string `json:"message_type"` + PriceDistr NumericDistribution `json:"price_distribution"` + QuantityDistr NumericDistribution `json:"quantity_distribution"` + MsgTypeDistr MsgTypeDistribution `json:"message_type_distribution"` + ContractDistr ContractDistributions `json:"contract_distribution"` + Constant bool `json:"constant"` + ConstLoadInterval int64 `json:"const_load_interval"` } type NumericDistribution struct { @@ -158,7 +160,7 @@ func run(config Config) { } } wgs := []*sync.WaitGroup{} - sendersList := [][]func(){} + sendersList := [][]func() string{} configString, _ := json.Marshal(config) fmt.Printf("Running with \n %s \ns", string(configString)) @@ -167,7 +169,7 @@ func run(config Config) { for i := 0; i < int(config.Rounds); i++ { fmt.Printf("Preparing %d-th round\n", i) wg := &sync.WaitGroup{} - var senders []func() + var senders []func() string wgs = append(wgs, wg) for _, account := range activeAccounts { key := GetKey(uint64(account)) @@ -184,9 +186,9 @@ func run(config Config) { // as is. sender := SendTx(key, &txBuilder, mode, seqDelta, &mu) wg.Add(1) - senders = append(senders, func() { + senders = append(senders, func() string { defer wg.Done() - sender() + return sender() }) } sendersList = append(sendersList, senders) @@ -195,6 +197,7 @@ func run(config Config) { } lastHeight := getLastHeight() + txs := []string{} for i := 0; i < int(config.Rounds); i++ { newHeight := getLastHeight() for newHeight == lastHeight { @@ -205,17 +208,44 @@ func run(config Config) { senders := sendersList[i] wg := wgs[i] for _, sender := range senders { - go sender() + go func() { + //nolint:govet + tx := sender() + if tx != "" { + txs = append(txs, tx) + } + }() } wg.Wait() lastHeight = newHeight } + + if config.Constant { + // sleep 3 seconds wait for transaction to finish + time.Sleep(3 * time.Second) + for i := 0; i < len(txs); i++ { + txResponse := GetTxResponse(txs[i]) + if txResponse.Tx == nil { + // TODO: add metrics to detect non committed txs + fmt.Println("transaction not committed") + } + } + } fmt.Printf("%s - Finished\n", time.Now().Format("2006-01-02T15:04:05")) } func generateMessage(config Config, key cryptotypes.PrivKey, batchSize uint64) sdk.Msg { var msg sdk.Msg - switch config.MessageType { + messageTypes := []string{"basic", "dex"} + messageType := config.MessageType + + // Use a random message type if it's running constant load test + if config.Constant { + // need to update seed otherwise it's the same value for randomization + rand.Seed(time.Now().UnixNano()) + messageType = messageTypes[rand.Intn(len(messageTypes))] + } + switch messageType { case "basic": msg = &banktypes.MsgSend{ FromAddress: sdk.AccAddress(key.PubKey().Address()).String(), @@ -291,9 +321,20 @@ func getLastHeight() int { func main() { config := Config{} pwd, _ := os.Getwd() - file, _ := os.ReadFile(pwd + "/loadtest/config.json") + + fileName := "/loadtest/config.json" + file, _ := os.ReadFile(pwd + fileName) if err := json.Unmarshal(file, &config); err != nil { panic(err) } - run(config) + + if config.Constant { + // If it's constant load, run forever with sleep intervals + for { + run(config) + time.Sleep(time.Duration(config.ConstLoadInterval) * time.Second) + } + } else { + run(config) + } } diff --git a/loadtest/tx.go b/loadtest/tx.go index 6dced6c6c6..115f29c99e 100644 --- a/loadtest/tx.go +++ b/loadtest/tx.go @@ -19,14 +19,14 @@ func SendTx( mode typestx.BroadcastMode, seqDelta uint64, mu *sync.Mutex, -) func() { +) func() string { (*txBuilder).SetGasLimit(200000000) (*txBuilder).SetFeeAmount([]sdk.Coin{ sdk.NewCoin("usei", sdk.NewInt(10000000)), }) SignTx(txBuilder, key, seqDelta) txBytes, _ := TestConfig.TxConfig.TxEncoder()((*txBuilder).GetTx()) - return func() { + return func() string { grpcRes, err := TxClient.BroadcastTx( context.Background(), &typestx.BroadcastTxRequest{ @@ -60,6 +60,23 @@ func SendTx( if _, err := TxHashFile.WriteString(fmt.Sprintf("%s\n", grpcRes.TxResponse.TxHash)); err != nil { panic(err) } + return grpcRes.TxResponse.TxHash } + return "" } } + +func GetTxResponse(hash string) *sdk.TxResponse { + grpcRes, err := TxClient.GetTx( + context.Background(), + &typestx.GetTxRequest{ + Hash: hash, + }, + ) + if err != nil { + fmt.Println(err) + return &sdk.TxResponse{} + } + + return grpcRes.TxResponse +} diff --git a/run_constant_load.sh b/run_constant_load.sh new file mode 100755 index 0000000000..9b5fae5bd5 --- /dev/null +++ b/run_constant_load.sh @@ -0,0 +1 @@ +/home/ubuntu/sei-chain/build/loadtest diff --git a/run_loadtest.sh b/run_loadtest.sh new file mode 100755 index 0000000000..a28140abf7 --- /dev/null +++ b/run_loadtest.sh @@ -0,0 +1,12 @@ +#!/bin/bash +iterations=$1 + +# This script just runs the load test $iteration times and saves the metrics to a text file +for i in `eval echo {1..$iterations}` +do + /home/ubuntu/sei-chain/build/loadtest + date | tee -a loadtest_results.txt + sleep 5 + python3 /home/ubuntu/sei-chain/loadtest/scripts/metrics.py | tee -a loadtest_results.txt +done + From cb8cd2bcec9bb19b20be79b12ca1c11317361370 Mon Sep 17 00:00:00 2001 From: Kevin Huo <5000881+kwhuo68@users.noreply.github.com> Date: Mon, 24 Oct 2022 11:57:49 -0400 Subject: [PATCH 26/30] Add failure load client (#323) * initial test for failure example * add failure examples * print and not panic errs failure mode * small edit * edit jsons * remove multiple json configs * fix lint issues * change config failure type to message type --- loadtest/config.json | 4 +- loadtest/main.go | 178 ++++++++++++++++++++++++++++++++++++++++--- loadtest/tx.go | 13 +++- 3 files changed, 183 insertions(+), 12 deletions(-) diff --git a/loadtest/config.json b/loadtest/config.json index 70b835cd60..509e76fba3 100644 --- a/loadtest/config.json +++ b/loadtest/config.json @@ -17,9 +17,11 @@ "limit_order_percentage": "0.2", "market_order_percentage": "0.8" }, - "constant": true, + "constant": false, "const_load_interval": 10, "message_type": "basic", + "failure_mode": false, + "failure_type": "", "contract_distribution": [ { "contract_address": "sei1yw4xvtc43me9scqfr2jr2gzvcxd3a9y4eq7gaukreugw2yd2f8tsy4qgdm", diff --git a/loadtest/main.go b/loadtest/main.go index 61110d5c06..d6af9f2db1 100644 --- a/loadtest/main.go +++ b/loadtest/main.go @@ -2,12 +2,14 @@ package main import ( "encoding/json" + "flag" "fmt" "math/rand" "os" "os/exec" "path/filepath" "strconv" + "strings" "sync" "time" @@ -28,6 +30,16 @@ import ( "google.golang.org/grpc" ) +const ( + Basic string = "basic" + FailureBasicMalformed string = "failure_basic_malformed" + FailureBasicInvalid string = "failure_basic_invalid" + FailureDexMalformed string = "failure_dex_malformed" + FailureDexInvalid string = "failure_dex_invalid" + Dex string = "dex" + Limit string = "limit" +) + type EncodingConfig struct { InterfaceRegistry types.InterfaceRegistry // NOTE: this field will be renamed to Codec @@ -42,6 +54,8 @@ type Config struct { OrdersPerBlock uint64 `json:"orders_per_block"` Rounds uint64 `json:"rounds"` MessageType string `json:"message_type"` + FailureMode bool `json:"failure_mode"` + FailureType string `json:"failure_type"` PriceDistr NumericDistribution `json:"price_distribution"` QuantityDistr NumericDistribution `json:"quantity_distribution"` MsgTypeDistr MsgTypeDistribution `json:"message_type_distribution"` @@ -61,6 +75,15 @@ func (d *NumericDistribution) Sample() sdk.Dec { return d.Min.Add(d.Max.Sub(d.Min).QuoInt64(d.NumDistinct).Mul(steps)) } +// Invalid numeric distribution sample +func (d *NumericDistribution) InvalidSample() sdk.Dec { + steps := sdk.NewDec(rand.Int63n(d.NumDistinct)) + if rand.Float64() < 0.5 { + return d.Min.Add(d.Max.Sub(d.Min).QuoInt64(d.NumDistinct).Mul(steps)) + } + return d.Max.Add(d.Max.Sub(d.Min).QuoInt64(d.NumDistinct).Mul(steps)) +} + type MsgTypeDistribution struct { LimitOrderPct sdk.Dec `json:"limit_order_percentage"` MarketOrderPct sdk.Dec `json:"market_order_percentage"` @@ -72,7 +95,7 @@ func (d *MsgTypeDistribution) Sample() string { } randNum := sdk.MustNewDecFromStr(fmt.Sprintf("%f", rand.Float64())) if randNum.LT(d.LimitOrderPct) { - return "limit" + return Limit } return "market" } @@ -174,7 +197,7 @@ func run(config Config) { for _, account := range activeAccounts { key := GetKey(uint64(account)) - msg := generateMessage(config, key, batchSize) + msg, failureExpected := generateMessage(config, key, batchSize) txBuilder := TestConfig.TxConfig.NewTxBuilder() _ = txBuilder.SetMsgs(msg) seqDelta := uint64(i / 2) @@ -184,7 +207,7 @@ func run(config Config) { // in which a later seqno is delievered before an earlier seqno // In practice, we haven't run into this issue so we'll leave this // as is. - sender := SendTx(key, &txBuilder, mode, seqDelta, &mu) + sender := SendTx(key, &txBuilder, mode, seqDelta, &mu, failureExpected) wg.Add(1) senders = append(senders, func() string { defer wg.Done() @@ -234,9 +257,9 @@ func run(config Config) { fmt.Printf("%s - Finished\n", time.Now().Format("2006-01-02T15:04:05")) } -func generateMessage(config Config, key cryptotypes.PrivKey, batchSize uint64) sdk.Msg { +func generateMessage(config Config, key cryptotypes.PrivKey, batchSize uint64) (sdk.Msg, bool) { var msg sdk.Msg - messageTypes := []string{"basic", "dex"} + messageTypes := []string{"basic", "dex", "failure_basic_malformed", "failure_basic_invalid", "failure_dex_malformed", "failure_dex_invalid"} messageType := config.MessageType // Use a random message type if it's running constant load test @@ -246,7 +269,7 @@ func generateMessage(config Config, key cryptotypes.PrivKey, batchSize uint64) s messageType = messageTypes[rand.Intn(len(messageTypes))] } switch messageType { - case "basic": + case Basic: msg = &banktypes.MsgSend{ FromAddress: sdk.AccAddress(key.PubKey().Address()).String(), ToAddress: sdk.AccAddress(key.PubKey().Address()).String(), @@ -255,11 +278,125 @@ func generateMessage(config Config, key cryptotypes.PrivKey, batchSize uint64) s Amount: sdk.NewInt(1), }), } - case "dex": + case FailureBasicMalformed: + var denom string + if rand.Float64() < 0.5 { + denom = "unknown" + } else { + denom = "other" + } + msg = &banktypes.MsgSend{ + FromAddress: sdk.AccAddress(key.PubKey().Address()).String(), + ToAddress: sdk.AccAddress(key.PubKey().Address()).String(), + Amount: sdk.NewCoins(sdk.Coin{ + Denom: denom, + Amount: sdk.NewInt(1), + }), + } + case FailureBasicInvalid: + var amountUsei int64 + amountUsei = 1000000000000000000 + msg = &banktypes.MsgSend{ + FromAddress: sdk.AccAddress(key.PubKey().Address()).String(), + ToAddress: sdk.AccAddress(key.PubKey().Address()).String(), + Amount: sdk.NewCoins(sdk.Coin{ + Denom: "usei", + Amount: sdk.NewInt(amountUsei), + }), + } + case FailureDexMalformed: + msgType := config.MsgTypeDistr.Sample() + orderPlacements := []*dextypes.Order{} + var orderType dextypes.OrderType + if msgType == "fake_limit" { + orderType = 8 + } else { + orderType = 9 + } + var direction dextypes.PositionDirection + if rand.Float64() < 0.5 { + direction = dextypes.PositionDirection_LONG + } else { + direction = dextypes.PositionDirection_SHORT + } + price := config.PriceDistr.InvalidSample() + quantity := config.QuantityDistr.InvalidSample() + contract := config.ContractDistr.Sample() + for j := 0; j < int(batchSize); j++ { + orderPlacements = append(orderPlacements, &dextypes.Order{ + Account: sdk.AccAddress(key.PubKey().Address()).String(), + ContractAddr: contract, + PositionDirection: direction, + Price: price.Quo(FromMili), + Quantity: quantity.Quo(FromMili), + PriceDenom: "SEI", + AssetDenom: "ATOM", + OrderType: orderType, + Data: VortexData, + }) + } + amount, err := sdk.ParseCoinsNormalized(fmt.Sprintf("%d%s", price.Mul(quantity).Ceil().RoundInt64(), "usei")) + if err != nil { + panic(err) + } + msg = &dextypes.MsgPlaceOrders{ + Creator: sdk.AccAddress(key.PubKey().Address()).String(), + Orders: orderPlacements, + ContractAddr: contract, + Funds: amount, + } + case FailureDexInvalid: msgType := config.MsgTypeDistr.Sample() orderPlacements := []*dextypes.Order{} var orderType dextypes.OrderType - if msgType == "limit" { + if msgType == Limit { + orderType = dextypes.OrderType_LIMIT + } else { + orderType = dextypes.OrderType_MARKET + } + var direction dextypes.PositionDirection + if rand.Float64() < 0.5 { + direction = dextypes.PositionDirection_LONG + } else { + direction = dextypes.PositionDirection_SHORT + } + price := config.PriceDistr.Sample() + quantity := config.QuantityDistr.Sample() + contract := config.ContractDistr.Sample() + for j := 0; j < int(batchSize); j++ { + orderPlacements = append(orderPlacements, &dextypes.Order{ + Account: sdk.AccAddress(key.PubKey().Address()).String(), + ContractAddr: contract, + PositionDirection: direction, + Price: price.Quo(FromMili), + Quantity: quantity.Quo(FromMili), + PriceDenom: "SEI", + AssetDenom: "ATOM", + OrderType: orderType, + Data: VortexData, + }) + } + var amountUsei int64 + if rand.Float64() < 0.5 { + amountUsei = 10000 * price.Mul(quantity).Ceil().RoundInt64() + } else { + amountUsei = 0 + } + amount, err := sdk.ParseCoinsNormalized(fmt.Sprintf("%d%s", amountUsei, "usei")) + if err != nil { + panic(err) + } + msg = &dextypes.MsgPlaceOrders{ + Creator: sdk.AccAddress(key.PubKey().Address()).String(), + Orders: orderPlacements, + ContractAddr: contract, + Funds: amount, + } + case Dex: + msgType := config.MsgTypeDistr.Sample() + orderPlacements := []*dextypes.Order{} + var orderType dextypes.OrderType + if msgType == Limit { orderType = dextypes.OrderType_LIMIT } else { orderType = dextypes.OrderType_MARKET @@ -299,7 +436,11 @@ func generateMessage(config Config, key cryptotypes.PrivKey, batchSize uint64) s default: fmt.Printf("Unrecognized message type %s", config.MessageType) } - return msg + + if strings.Contains(config.MessageType, "failure") { + return msg, true + } + return msg, false } func getLastHeight() int { @@ -319,6 +460,9 @@ func getLastHeight() int { } func main() { + clientType := flag.String("clientType", "", "a string") + flag.Parse() + fmt.Printf("in main -> clientType: %s \n", *clientType) config := Config{} pwd, _ := os.Getwd() @@ -327,6 +471,22 @@ func main() { if err := json.Unmarshal(file, &config); err != nil { panic(err) } + if *clientType == FailureBasicMalformed { + config.FailureMode = true + config.MessageType = FailureBasicMalformed + } + if *clientType == FailureBasicInvalid { + config.FailureMode = true + config.MessageType = FailureBasicInvalid + } + if *clientType == FailureDexMalformed { + config.FailureMode = true + config.MessageType = FailureDexMalformed + } + if *clientType == FailureDexInvalid { + config.FailureMode = true + config.MessageType = FailureDexInvalid + } if config.Constant { // If it's constant load, run forever with sleep intervals diff --git a/loadtest/tx.go b/loadtest/tx.go index 115f29c99e..434a740fc6 100644 --- a/loadtest/tx.go +++ b/loadtest/tx.go @@ -19,6 +19,7 @@ func SendTx( mode typestx.BroadcastMode, seqDelta uint64, mu *sync.Mutex, + failureExpected bool, ) func() string { (*txBuilder).SetGasLimit(200000000) (*txBuilder).SetFeeAmount([]sdk.Coin{ @@ -35,7 +36,11 @@ func SendTx( }, ) if err != nil { - panic(err) + if failureExpected { + fmt.Printf("Error: %s\n", err) + } else { + panic(err) + } } for grpcRes.TxResponse.Code == sdkerrors.ErrMempoolIsFull.ABCICode() { // retry after a second until either succeed or fail for some other reason @@ -49,7 +54,11 @@ func SendTx( }, ) if err != nil { - panic(err) + if failureExpected { + fmt.Printf("Error: %s\n", err) + } else { + panic(err) + } } } if grpcRes.TxResponse.Code != 0 { From f7471de8a697b97537503e9d38fd7e6a2afc1697 Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Mon, 24 Oct 2022 11:31:20 -0700 Subject: [PATCH 27/30] Fix tokens --- x/dex/module_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/dex/module_test.go b/x/dex/module_test.go index 0f53e4080c..2299384c8c 100644 --- a/x/dex/module_test.go +++ b/x/dex/module_test.go @@ -54,7 +54,7 @@ func TestEndBlockMarketOrder(t *testing.T) { pair := types.Pair{PriceDenom: "SEI", AssetDenom: "ATOM"} testAccount, _ := sdk.AccAddressFromBech32("sei1yezq49upxhunjjhudql2fnj5dgvcwjj87pn2wx") - amounts := sdk.NewCoins(sdk.NewCoin("usei", sdk.NewInt(10000000))) + amounts := sdk.NewCoins(sdk.NewCoin("usei", sdk.NewInt(10000000)), sdk.NewCoin("uusdc", sdk.NewInt(10000000))) bankkeeper := testApp.BankKeeper bankkeeper.MintCoins(ctx, minttypes.ModuleName, amounts) bankkeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, testAccount, amounts) From 246358bedab845e0c87e2403b2435c41bb54979c Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Mon, 24 Oct 2022 14:01:31 -0700 Subject: [PATCH 28/30] Fix keeper memstate --- x/dex/contract/execution.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/x/dex/contract/execution.go b/x/dex/contract/execution.go index 1820281ba8..37b66a44ec 100644 --- a/x/dex/contract/execution.go +++ b/x/dex/contract/execution.go @@ -60,7 +60,7 @@ func ExecutePair( // First cancel orders cancelForPair(ctx, typedContractAddr, typedPairStr, orderbook) // Add all limit orders to the orderbook - orders := dexkeeper.MemState.GetBlockOrders(ctx, typedContractAddr, typedPairStr) + orders := dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, typedContractAddr, typedPairStr) limitBuys := orders.GetLimitOrders(types.PositionDirection_LONG) limitSells := orders.GetLimitOrders(types.PositionDirection_SHORT) exchange.AddOutstandingLimitOrdersToOrderbook(orderbook, limitBuys, limitSells) From 580857ff254874145192e16c72283a5ee1a7399f Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Mon, 24 Oct 2022 14:10:51 -0700 Subject: [PATCH 29/30] more fixes for memstate --- x/dex/contract/execution.go | 6 +++--- x/dex/contract/execution_test.go | 5 +++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/x/dex/contract/execution.go b/x/dex/contract/execution.go index 37b66a44ec..ddf642f64a 100644 --- a/x/dex/contract/execution.go +++ b/x/dex/contract/execution.go @@ -126,7 +126,7 @@ func MoveTriggeredOrderForPair( } else if order.OrderType == types.OrderType_STOPLIMIT { triggeredOrders[i].OrderType = types.OrderType_LIMIT } - dexkeeper.MemState.GetBlockOrders(ctx, typedContractAddr, typedPairStr).Add(&triggeredOrders[i]) + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, typedContractAddr, typedPairStr).Add(&triggeredOrders[i]) dexkeeper.RemoveTriggeredOrder(ctx, string(typedContractAddr), order.Id, priceDenom, assetDenom) } } @@ -153,7 +153,7 @@ func UpdateTriggeredOrderForPair( } // update triggered orders in cache - orders := dexkeeper.MemState.GetBlockOrders(ctx, typedContractAddr, typedPairStr) + orders := dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, typedContractAddr, typedPairStr) cacheTriggeredOrders := orders.GetTriggeredOrders() for i, order := range cacheTriggeredOrders { if order.PositionDirection == types.PositionDirection_LONG && order.TriggerPrice.LTE(totalOutcome.MaxPrice) { @@ -274,7 +274,7 @@ func HandleExecutionForContract( defer EmitSettlementMetrics(settlements) // populate order placement results for FinalizeBlock hook - dexkeeper.MemState.GetAllBlockOrders(sdkCtx, typedContractAddr).DeepApply(func(orders *dexcache.BlockOrders) { + dexutils.GetMemState(sdkCtx.Context()).GetAllBlockOrders(sdkCtx, typedContractAddr).DeepApply(func(orders *dexcache.BlockOrders) { dextypeswasm.PopulateOrderPlacementResults(contractAddr, orders.Get(), cancellations, orderResults) }) dextypeswasm.PopulateOrderExecutionResults(contractAddr, settlements, orderResults) diff --git a/x/dex/contract/execution_test.go b/x/dex/contract/execution_test.go index 2e5d93c4d9..3f0b2f4cb9 100644 --- a/x/dex/contract/execution_test.go +++ b/x/dex/contract/execution_test.go @@ -1,6 +1,7 @@ package contract_test import ( + dexutils "github.com/sei-protocol/sei-chain/x/dex/utils" "testing" "time" @@ -50,7 +51,7 @@ func TestMoveTriggeredOrderIntoMemState(t *testing.T) { utils.GetPairString(&pair), dexkeeper, ) - orders := dexkeeper.MemState.GetBlockOrders(ctx, TEST_CONTRACT, utils.GetPairString(&pair)) + orders := dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, TEST_CONTRACT, utils.GetPairString(&pair)) cacheMarketOrders := orders.GetSortedMarketOrders(types.PositionDirection_LONG, false) cacheTriggeredOrders := orders.GetTriggeredOrders() @@ -127,7 +128,7 @@ func TestUpdateTriggeredOrders(t *testing.T) { dexkeeper.SetTriggeredOrder(ctx, TEST_CONTRACT, shortTriggeredOrder, TEST_PAIR().PriceDenom, TEST_PAIR().AssetDenom) dexkeeper.SetTriggeredOrder(ctx, TEST_CONTRACT, longNotTriggeredOrder, TEST_PAIR().PriceDenom, TEST_PAIR().AssetDenom) - orders := dexkeeper.MemState.GetBlockOrders(ctx, TEST_CONTRACT, utils.GetPairString(&pair)) + orders := dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, TEST_CONTRACT, utils.GetPairString(&pair)) orders.Add(&shortNotTriggeredOrder) orders.Add(&longTriggeredOrder) From f9c59ca10b1826761ec60bb52596026d2288acae Mon Sep 17 00:00:00 2001 From: philipsu522 Date: Mon, 24 Oct 2022 14:28:49 -0700 Subject: [PATCH 30/30] Fix limit order test --- x/dex/module_test.go | 167 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 167 insertions(+) diff --git a/x/dex/module_test.go b/x/dex/module_test.go index 2299384c8c..cee238d964 100644 --- a/x/dex/module_test.go +++ b/x/dex/module_test.go @@ -174,6 +174,173 @@ func TestEndBlockMarketOrder(t *testing.T) { require.Equal(t, 0, len(matchResults.Settlements)) } +func TestEndBlockLimitOrder(t *testing.T) { + testApp := keepertest.TestApp() + ctx := testApp.BaseApp.NewContext(false, tmproto.Header{Time: time.Now()}) + ctx = ctx.WithContext(context.WithValue(ctx.Context(), dexutils.DexMemStateContextKey, dexcache.NewMemState())) + dexkeeper := testApp.DexKeeper + pair := types.Pair{PriceDenom: "SEI", AssetDenom: "ATOM"} + + testAccount, _ := sdk.AccAddressFromBech32("sei1yezq49upxhunjjhudql2fnj5dgvcwjj87pn2wx") + amounts := sdk.NewCoins(sdk.NewCoin("usei", sdk.NewInt(10000000)), sdk.NewCoin("uusdc", sdk.NewInt(10000000))) + bankkeeper := testApp.BankKeeper + bankkeeper.MintCoins(ctx, minttypes.ModuleName, amounts) + bankkeeper.SendCoinsFromModuleToAccount(ctx, minttypes.ModuleName, testAccount, amounts) + wasm, err := ioutil.ReadFile("./testdata/clearing_house.wasm") + if err != nil { + panic(err) + } + wasmKeeper := testApp.WasmKeeper + contractKeeper := wasmkeeper.NewDefaultPermissionKeeper(&wasmKeeper) + var perm *wasmtypes.AccessConfig + codeId, err := contractKeeper.Create(ctx, testAccount, wasm, perm) + if err != nil { + panic(err) + } + contractAddr, _, err := contractKeeper.Instantiate(ctx, codeId, testAccount, testAccount, []byte(GOOD_CONTRACT_INSTANTIATE), "test", + sdk.NewCoins(sdk.NewCoin("usei", sdk.NewInt(100000)))) + if err != nil { + panic(err) + } + dexkeeper.SetContract(ctx, &types.ContractInfo{CodeId: 123, ContractAddr: contractAddr.String(), NeedHook: true, NeedOrderMatching: true}) + dexkeeper.AddRegisteredPair(ctx, contractAddr.String(), pair) + // place one order to a nonexistent contract + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + &types.Order{ + Id: 1, + Account: testAccount.String(), + ContractAddr: contractAddr.String(), + Price: sdk.MustNewDecFromStr("1"), + Quantity: sdk.MustNewDecFromStr("1"), + PriceDenom: pair.PriceDenom, + AssetDenom: pair.AssetDenom, + OrderType: types.OrderType_LIMIT, + PositionDirection: types.PositionDirection_LONG, + Data: "{\"position_effect\":\"Open\",\"leverage\":\"1\"}", + }, + ) + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + &types.Order{ + Id: 2, + Account: testAccount.String(), + ContractAddr: contractAddr.String(), + Price: sdk.MustNewDecFromStr("2"), + Quantity: sdk.MustNewDecFromStr("1"), + PriceDenom: pair.PriceDenom, + AssetDenom: pair.AssetDenom, + OrderType: types.OrderType_LIMIT, + PositionDirection: types.PositionDirection_LONG, + Data: "{\"position_effect\":\"Open\",\"leverage\":\"1\"}", + }, + ) + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + &types.Order{ + Id: 3, + Account: testAccount.String(), + ContractAddr: contractAddr.String(), + Price: sdk.MustNewDecFromStr("3"), + Quantity: sdk.MustNewDecFromStr("1"), + PriceDenom: pair.PriceDenom, + AssetDenom: pair.AssetDenom, + OrderType: types.OrderType_LIMIT, + PositionDirection: types.PositionDirection_SHORT, + Data: "{\"position_effect\":\"Open\",\"leverage\":\"1\"}", + }, + ) + dexutils.GetMemState(ctx.Context()).GetDepositInfo(ctx, utils.ContractAddress(contractAddr.String())).Add( + &dexcache.DepositInfoEntry{ + Creator: testAccount.String(), + Denom: "uusdc", + Amount: sdk.MustNewDecFromStr("2000000"), + }, + ) + + ctx = ctx.WithBlockHeight(1) + testApp.EndBlocker(ctx, abci.RequestEndBlock{}) + _, found := dexkeeper.GetLongBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("1"), pair.PriceDenom, pair.AssetDenom) + require.True(t, found) + _, found = dexkeeper.GetLongBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("2"), pair.PriceDenom, pair.AssetDenom) + require.True(t, found) + _, found = dexkeeper.GetShortBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("3"), pair.PriceDenom, pair.AssetDenom) + require.True(t, found) + + dexutils.GetMemState(ctx.Context()).Clear() + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + &types.Order{ + Id: 4, + Account: testAccount.String(), + ContractAddr: contractAddr.String(), + Price: sdk.MustNewDecFromStr("2"), + Quantity: sdk.MustNewDecFromStr("2"), + PriceDenom: pair.PriceDenom, + AssetDenom: pair.AssetDenom, + OrderType: types.OrderType_LIMIT, + PositionDirection: types.PositionDirection_SHORT, + Data: "{\"position_effect\":\"Open\",\"leverage\":\"1\"}", + }, + ) + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + &types.Order{ + Id: 5, + Account: testAccount.String(), + ContractAddr: contractAddr.String(), + Price: sdk.MustNewDecFromStr("3"), + Quantity: sdk.MustNewDecFromStr("1"), + PriceDenom: pair.PriceDenom, + AssetDenom: pair.AssetDenom, + OrderType: types.OrderType_LIMIT, + PositionDirection: types.PositionDirection_LONG, + Data: "{\"position_effect\":\"Open\",\"leverage\":\"1\"}", + }, + ) + + ctx = ctx.WithBlockHeight(2) + testApp.EndBlocker(ctx, abci.RequestEndBlock{}) + + _, found = dexkeeper.GetLongBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("2"), pair.PriceDenom, pair.AssetDenom) + require.False(t, found) + _, found = dexkeeper.GetLongBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("1"), pair.PriceDenom, pair.AssetDenom) + require.True(t, found) + _, found = dexkeeper.GetShortBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("3"), pair.PriceDenom, pair.AssetDenom) + require.True(t, found) + _, found = dexkeeper.GetLongBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("3"), pair.PriceDenom, pair.AssetDenom) + require.False(t, found) + + matchResults, _ := dexkeeper.GetMatchResultState(ctx, contractAddr.String(), 2) + require.Equal(t, 2, len(matchResults.Orders)) + require.Equal(t, 4, len(matchResults.Settlements)) + + dexutils.GetMemState(ctx.Context()).Clear() + dexutils.GetMemState(ctx.Context()).GetBlockOrders(ctx, utils.ContractAddress(contractAddr.String()), utils.GetPairString(&pair)).Add( + &types.Order{ + Id: 6, + Account: testAccount.String(), + ContractAddr: contractAddr.String(), + Price: sdk.MustNewDecFromStr("1000000"), + Quantity: sdk.MustNewDecFromStr("1"), + PriceDenom: pair.PriceDenom, + AssetDenom: pair.AssetDenom, + OrderType: types.OrderType_LIMIT, + PositionDirection: types.PositionDirection_LONG, + Data: "{\"position_effect\":\"Open\",\"leverage\":\"1\"}", + }, + ) + + ctx = ctx.WithBlockHeight(3) + testApp.EndBlocker(ctx, abci.RequestEndBlock{}) + + _, found = dexkeeper.GetLongBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("1"), pair.PriceDenom, pair.AssetDenom) + require.True(t, found) + _, found = dexkeeper.GetLongBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("1000000"), pair.PriceDenom, pair.AssetDenom) + require.False(t, found) + _, found = dexkeeper.GetShortBookByPrice(ctx, contractAddr.String(), sdk.MustNewDecFromStr("3"), pair.PriceDenom, pair.AssetDenom) + require.False(t, found) + + matchResults, _ = dexkeeper.GetMatchResultState(ctx, contractAddr.String(), 3) + require.Equal(t, 1, len(matchResults.Orders)) + require.Equal(t, 2, len(matchResults.Settlements)) +} + func TestEndBlockRollback(t *testing.T) { testApp := keepertest.TestApp() ctx := testApp.BaseApp.NewContext(false, tmproto.Header{})