From 94ddbabce464219cc9ad446bb0d67ae1f4b168eb Mon Sep 17 00:00:00 2001 From: Justin Tieri <37750742+jtieri@users.noreply.github.com> Date: Wed, 24 Jan 2024 10:58:10 -0600 Subject: [PATCH 1/4] feat: introduce cometbft client wrapper to eliminate forked repo --- client/client_wrapper.go | 518 ++++++++++++++++++ go.mod | 86 +-- go.sum | 196 +++---- interchaintest/feegrant_test.go | 9 +- interchaintest/go.mod | 78 +-- interchaintest/go.sum | 178 +++--- interchaintest/ibc_test.go | 28 +- relayer/chains/comet_rpc.go | 65 --- relayer/chains/cosmos/account.go | 2 +- .../chains/cosmos/cosmos_chain_processor.go | 41 +- relayer/chains/cosmos/event_parser.go | 24 +- relayer/chains/cosmos/grpc_query.go | 26 +- relayer/chains/cosmos/provider.go | 121 +--- relayer/chains/cosmos/query.go | 126 +++-- relayer/chains/cosmos/tx.go | 96 +++- relayer/chains/parsing.go | 19 +- relayer/chains/penumbra/grpc_query.go | 39 +- .../penumbra/penumbra_chain_processor.go | 26 +- relayer/chains/penumbra/provider.go | 122 +---- relayer/chains/penumbra/query.go | 62 ++- relayer/chains/penumbra/tx.go | 77 ++- relayer/client.go | 10 + 22 files changed, 1243 insertions(+), 706 deletions(-) create mode 100644 client/client_wrapper.go delete mode 100644 relayer/chains/comet_rpc.go diff --git a/client/client_wrapper.go b/client/client_wrapper.go new file mode 100644 index 000000000..ca2d35b6d --- /dev/null +++ b/client/client_wrapper.go @@ -0,0 +1,518 @@ +package client + +import ( + "context" + + "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/crypto/merkle" + "github.com/cometbft/cometbft/libs/bytes" + "github.com/cometbft/cometbft/p2p" + "github.com/cometbft/cometbft/proto/tendermint/crypto" + cometprotoversion "github.com/cometbft/cometbft/proto/tendermint/version" + rpcclient "github.com/cometbft/cometbft/rpc/client" + coretypes "github.com/cometbft/cometbft/rpc/core/types" + tmtypes "github.com/cometbft/cometbft/types" + sltypes "github.com/strangelove-ventures/cometbft-client/abci/types" + "github.com/strangelove-ventures/cometbft-client/client" + slbytes "github.com/strangelove-ventures/cometbft-client/libs/bytes" + slclient "github.com/strangelove-ventures/cometbft-client/rpc/client" + types2 "github.com/strangelove-ventures/cometbft-client/types" +) + +// RPCClient wraps our slimmed down CometBFT client and converts the returned types to the upstream CometBFT types. +// This is useful so that it can be used in any function calls that expect the upstream types. +type RPCClient struct { + Client *client.Client +} + +func (r RPCClient) ABCIInfo(ctx context.Context) (*coretypes.ResultABCIInfo, error) { + res, err := r.Client.ABCIInfo(ctx) + if err != nil { + return nil, err + } + + return &coretypes.ResultABCIInfo{ + Response: types.ResponseInfo{ + Data: res.Response.Data, + Version: res.Response.Version, + AppVersion: res.Response.AppVersion, + LastBlockHeight: res.Response.LastBlockHeight, + LastBlockAppHash: res.Response.LastBlockAppHash, + }, + }, nil +} + +func (r RPCClient) ABCIQuery( + ctx context.Context, + path string, + data bytes.HexBytes, +) (*coretypes.ResultABCIQuery, error) { + res, err := r.Client.ABCIQuery(ctx, path, slbytes.HexBytes(data)) + if err != nil { + return nil, err + } + + return &coretypes.ResultABCIQuery{ + Response: types.ResponseQuery{ + Code: res.Response.Code, + Log: res.Response.Log, + Info: res.Response.Info, + Index: res.Response.Index, + Key: res.Response.Key, + Value: res.Response.Value, + ProofOps: convertProofOps(res.Response.ProofOps), + Height: res.Response.Height, + Codespace: res.Response.Codespace, + }, + }, nil +} + +func (r RPCClient) ABCIQueryWithOptions( + ctx context.Context, + path string, + data bytes.HexBytes, + opts rpcclient.ABCIQueryOptions, +) (*coretypes.ResultABCIQuery, error) { + o := slclient.ABCIQueryOptions{ + Height: opts.Height, + Prove: opts.Prove, + } + + res, err := r.Client.ABCIQueryWithOptions(ctx, path, slbytes.HexBytes(data), o) + if err != nil { + return nil, err + } + + return &coretypes.ResultABCIQuery{ + Response: types.ResponseQuery{ + Code: res.Response.Code, + Log: res.Response.Log, + Info: res.Response.Info, + Index: res.Response.Index, + Key: res.Response.Key, + Value: res.Response.Value, + ProofOps: convertProofOps(res.Response.ProofOps), + Height: res.Response.Height, + Codespace: res.Response.Codespace, + }, + }, nil +} + +func (r RPCClient) BroadcastTxCommit(ctx context.Context, tx tmtypes.Tx) (*coretypes.ResultBroadcastTxCommit, error) { + res, err := r.Client.BroadcastTxCommit(ctx, types2.Tx(tx)) + if err != nil { + return nil, err + } + + return &coretypes.ResultBroadcastTxCommit{ + CheckTx: types.ResponseCheckTx{ + Code: res.CheckTx.Code, + Data: res.CheckTx.Data, + Log: res.CheckTx.Log, + Info: res.CheckTx.Info, + GasWanted: res.CheckTx.GasWanted, + GasUsed: res.CheckTx.GasUsed, + Events: convertEvents(res.CheckTx.Events), + Codespace: res.CheckTx.Codespace, + }, + TxResult: types.ExecTxResult{ + Code: res.TxResult.Code, + Data: res.TxResult.Data, + Log: res.TxResult.Log, + Info: res.TxResult.Info, + GasWanted: res.TxResult.GasWanted, + GasUsed: res.TxResult.GasUsed, + Events: convertEvents(res.TxResult.Events), + Codespace: res.TxResult.Codespace, + }, + Hash: bytes.HexBytes(res.Hash), + Height: res.Height, + }, nil +} + +func (r RPCClient) BroadcastTxAsync(ctx context.Context, tx tmtypes.Tx) (*coretypes.ResultBroadcastTx, error) { + res, err := r.Client.BroadcastTxAsync(ctx, types2.Tx(tx)) + if err != nil { + return nil, err + } + + return &coretypes.ResultBroadcastTx{ + Code: res.Code, + Data: bytes.HexBytes(res.Data), + Log: res.Log, + Codespace: res.Codespace, + Hash: bytes.HexBytes(res.Hash), + }, nil +} + +func (r RPCClient) BroadcastTxSync(ctx context.Context, tx tmtypes.Tx) (*coretypes.ResultBroadcastTx, error) { + res, err := r.Client.BroadcastTxSync(ctx, types2.Tx(tx)) + if err != nil { + return nil, err + } + + return &coretypes.ResultBroadcastTx{ + Code: res.Code, + Data: bytes.HexBytes(res.Data), + Log: res.Log, + Codespace: res.Codespace, + Hash: bytes.HexBytes(res.Hash), + }, nil +} + +func (r RPCClient) Validators( + ctx context.Context, + height *int64, + page, perPage *int, +) (*coretypes.ResultValidators, error) { + res, err := r.Client.Validators(ctx, height, page, perPage) + if err != nil { + return nil, err + } + + vals := make([]*tmtypes.Validator, len(res.Validators)) + for i, val := range res.Validators { + vals[i] = &tmtypes.Validator{ + Address: tmtypes.Address(val.Address), + PubKey: nil, // TODO: PubKey in our response type is an interface, need to figure out how to handle + VotingPower: val.VotingPower, + ProposerPriority: val.ProposerPriority, + } + } + + return &coretypes.ResultValidators{ + BlockHeight: res.BlockHeight, + Validators: vals, + Count: res.Count, + Total: res.Total, + }, nil +} + +func (r RPCClient) Status(ctx context.Context) (*coretypes.ResultStatus, error) { + res, err := r.Client.Status(ctx) + if err != nil { + return nil, err + } + + return &coretypes.ResultStatus{ + NodeInfo: p2p.DefaultNodeInfo{ + ProtocolVersion: p2p.ProtocolVersion{ + P2P: res.NodeInfo.ProtocolVersion.P2P, + Block: res.NodeInfo.ProtocolVersion.Block, + App: res.NodeInfo.ProtocolVersion.App, + }, + DefaultNodeID: p2p.ID(res.NodeInfo.DefaultNodeID), + ListenAddr: res.NodeInfo.ListenAddr, + Network: res.NodeInfo.Network, + Version: res.NodeInfo.Version, + Channels: bytes.HexBytes(res.NodeInfo.Channels), + Moniker: res.NodeInfo.Moniker, + Other: p2p.DefaultNodeInfoOther{ + TxIndex: res.NodeInfo.Other.TxIndex, + RPCAddress: res.NodeInfo.Other.RPCAddress, + }, + }, + SyncInfo: coretypes.SyncInfo{ + LatestBlockHash: bytes.HexBytes(res.SyncInfo.LatestBlockHash), + LatestAppHash: bytes.HexBytes(res.SyncInfo.LatestAppHash), + LatestBlockHeight: res.SyncInfo.LatestBlockHeight, + LatestBlockTime: res.SyncInfo.LatestBlockTime, + EarliestBlockHash: bytes.HexBytes(res.SyncInfo.EarliestBlockHash), + EarliestAppHash: bytes.HexBytes(res.SyncInfo.EarliestAppHash), + EarliestBlockHeight: res.SyncInfo.EarliestBlockHeight, + EarliestBlockTime: res.SyncInfo.EarliestBlockTime, + CatchingUp: res.SyncInfo.CatchingUp, + }, + ValidatorInfo: coretypes.ValidatorInfo{ + Address: bytes.HexBytes(res.ValidatorInfo.Address), + PubKey: nil, // TODO: PubKey in our response type is an interface, need to figure out how to handle + VotingPower: res.ValidatorInfo.VotingPower, + }, + }, nil +} + +func (r RPCClient) Block(ctx context.Context, height *int64) (*coretypes.ResultBlock, error) { + res, err := r.Client.Block(ctx, height) + if err != nil { + return nil, err + } + + return &coretypes.ResultBlock{ + BlockID: convertBlockID(res.BlockID), + Block: convertBlock(res.Block), + }, nil +} + +func (r RPCClient) BlockByHash(ctx context.Context, hash []byte) (*coretypes.ResultBlock, error) { + res, err := r.Client.BlockByHash(ctx, hash) + if err != nil { + return nil, err + } + + return &coretypes.ResultBlock{ + BlockID: convertBlockID(res.BlockID), + Block: convertBlock(res.Block), + }, nil +} + +func (r RPCClient) BlockResults(ctx context.Context, height *int64) (*coretypes.ResultBlockResults, error) { + res, err := r.Client.BlockResults(ctx, height) + if err != nil { + return nil, err + } + + txs := make([]*types.ExecTxResult, len(res.TxResponses)) + for i, tx := range res.TxResponses { + txs[i] = &types.ExecTxResult{ + Code: tx.Code, + Data: tx.Data, + Log: tx.Log, + Info: tx.Info, + GasWanted: tx.GasWanted, + GasUsed: tx.GasUsed, + Events: nil, + Codespace: tx.Codespace, + } + } + + return &coretypes.ResultBlockResults{ + Height: res.Height, + TxsResults: nil, + FinalizeBlockEvents: nil, + ValidatorUpdates: nil, + ConsensusParamUpdates: nil, + AppHash: res.AppHash, + }, nil +} + +func (r RPCClient) BlockchainInfo( + ctx context.Context, + minHeight, maxHeight int64, +) (*coretypes.ResultBlockchainInfo, error) { + res, err := r.Client.BlockchainInfo(ctx, minHeight, maxHeight) + if err != nil { + return nil, err + } + + meta := make([]*tmtypes.BlockMeta, len(res.BlockMetas)) + for i, m := range res.BlockMetas { + meta[i] = &tmtypes.BlockMeta{ + BlockID: tmtypes.BlockID{ + Hash: bytes.HexBytes(m.BlockID.Hash), + PartSetHeader: tmtypes.PartSetHeader{ + Total: m.BlockID.PartSetHeader.Total, + Hash: bytes.HexBytes(m.BlockID.PartSetHeader.Hash), + }, + }, + BlockSize: m.BlockSize, + Header: convertHeader(m.Header), + NumTxs: m.NumTxs, + } + } + + return &coretypes.ResultBlockchainInfo{ + LastHeight: res.LastHeight, + BlockMetas: meta, + }, nil +} + +func (r RPCClient) Commit(ctx context.Context, height *int64) (*coretypes.ResultCommit, error) { + res, err := r.Client.Commit(ctx, height) + if err != nil { + return nil, err + } + + signatures := make([]tmtypes.CommitSig, len(res.Commit.Signatures)) + for i, sig := range res.Commit.Signatures { + signatures[i] = tmtypes.CommitSig{ + BlockIDFlag: tmtypes.BlockIDFlag(sig.BlockIDFlag), + ValidatorAddress: tmtypes.Address(sig.ValidatorAddress), + Timestamp: sig.Timestamp, + Signature: sig.Signature, + } + } + + header := convertHeader(*res.SignedHeader.Header) + return &coretypes.ResultCommit{ + SignedHeader: tmtypes.SignedHeader{ + Header: &header, + Commit: &tmtypes.Commit{ + Height: res.Commit.Height, + Round: res.Commit.Round, + BlockID: convertBlockID(res.Commit.BlockID), + Signatures: signatures, + }, + }, + CanonicalCommit: res.CanonicalCommit, + }, nil +} + +func (r RPCClient) Tx(ctx context.Context, hash []byte, prove bool) (*coretypes.ResultTx, error) { + res, err := r.Client.Tx(ctx, hash, prove) + if err != nil { + return nil, err + } + + return &coretypes.ResultTx{ + Hash: bytes.HexBytes(res.Hash), + Height: res.Height, + Index: res.Index, + TxResult: types.ExecTxResult{}, // TODO: + Tx: tmtypes.Tx(res.Tx), + Proof: tmtypes.TxProof{ + RootHash: bytes.HexBytes(res.Proof.RootHash), + Data: tmtypes.Tx(res.Proof.Data), + Proof: merkle.Proof{ + Total: res.Proof.Proof.Total, + Index: res.Proof.Proof.Index, + LeafHash: res.Proof.Proof.LeafHash, + Aunts: res.Proof.Proof.Aunts, + }, + }, + }, nil +} + +func (r RPCClient) TxSearch( + ctx context.Context, + query string, + prove bool, + page, perPage *int, + orderBy string, +) (*coretypes.ResultTxSearch, error) { + res, err := r.Client.TxSearch(ctx, query, prove, page, perPage, orderBy) + if err != nil { + return nil, err + } + + _ = res + + return &coretypes.ResultTxSearch{ + Txs: nil, + TotalCount: 0, + }, nil +} + +func (r RPCClient) BlockSearch( + ctx context.Context, + query string, + page, perPage *int, + orderBy string, +) (*coretypes.ResultBlockSearch, error) { + res, err := r.Client.BlockSearch(ctx, query, page, perPage, orderBy) + if err != nil { + return nil, err + } + + _ = res + + return &coretypes.ResultBlockSearch{ + Blocks: nil, + TotalCount: 0, + }, nil +} + +func convertProofOps(proofOps *sltypes.ProofOps) *crypto.ProofOps { + ops := make([]crypto.ProofOp, len(proofOps.Ops)) + for i, op := range proofOps.Ops { + ops[i] = crypto.ProofOp{ + Type: op.Type, + Key: op.Key, + Data: op.Data, + } + } + + return &crypto.ProofOps{Ops: ops} +} + +func convertEvents(events []sltypes.Event) []types.Event { + evts := make([]types.Event, len(events)) + + for i, evt := range events { + attributes := make([]types.EventAttribute, len(evt.Attributes)) + + for j, attr := range evt.Attributes { + attributes[j] = types.EventAttribute{ + Key: attr.Key, + Value: attr.Value, + Index: attr.Index, + } + } + + evts[i] = types.Event{ + Type: evt.Type, + Attributes: attributes, + } + } + + return evts +} + +func convertHeader(header types2.Header) tmtypes.Header { + return tmtypes.Header{ + // TODO: Version does not appear to be present in our response type + Version: cometprotoversion.Consensus{ + Block: 0, + App: 0, + }, + ChainID: header.ChainID, + Height: header.Height, + Time: header.Time, + LastBlockID: tmtypes.BlockID{ + Hash: bytes.HexBytes(header.LastBlockID.Hash), + PartSetHeader: tmtypes.PartSetHeader{ + Total: header.LastBlockID.PartSetHeader.Total, + Hash: bytes.HexBytes(header.LastBlockID.PartSetHeader.Hash), + }, + }, + LastCommitHash: bytes.HexBytes(header.LastCommitHash), + DataHash: bytes.HexBytes(header.DataHash), + ValidatorsHash: bytes.HexBytes(header.ValidatorsHash), + NextValidatorsHash: bytes.HexBytes(header.NextValidatorsHash), + ConsensusHash: bytes.HexBytes(header.ConsensusHash), + AppHash: bytes.HexBytes(header.AppHash), + LastResultsHash: bytes.HexBytes(header.LastResultsHash), + EvidenceHash: bytes.HexBytes(header.EvidenceHash), + ProposerAddress: tmtypes.Address(header.ProposerAddress), + } +} + +func convertBlockID(id types2.BlockID) tmtypes.BlockID { + return tmtypes.BlockID{ + Hash: bytes.HexBytes(id.Hash), + PartSetHeader: tmtypes.PartSetHeader{ + Total: id.PartSetHeader.Total, + Hash: bytes.HexBytes(id.PartSetHeader.Hash), + }, + } +} + +func convertBlock(block *types2.Block) *tmtypes.Block { + signatures := make([]tmtypes.CommitSig, len(block.LastCommit.Signatures)) + for i, sig := range block.LastCommit.Signatures { + signatures[i] = tmtypes.CommitSig{ + BlockIDFlag: tmtypes.BlockIDFlag(sig.BlockIDFlag), + ValidatorAddress: tmtypes.Address(sig.ValidatorAddress), + Timestamp: sig.Timestamp, + Signature: sig.Signature, + } + } + + txs := make([]tmtypes.Tx, len(block.Data.Txs)) + for i, tx := range block.Data.Txs { + txs[i] = tmtypes.Tx(tx) + } + + return &tmtypes.Block{ + Header: convertHeader(block.Header), + Data: tmtypes.Data{ + Txs: txs, + }, + Evidence: tmtypes.EvidenceData{}, // TODO: EvidenceData + LastCommit: &tmtypes.Commit{ + Height: block.LastCommit.Height, + Round: block.LastCommit.Round, + BlockID: convertBlockID(block.LastCommit.BlockID), + Signatures: signatures, + }, + } +} diff --git a/go.mod b/go.mod index 2166f1736..36d7c471e 100644 --- a/go.mod +++ b/go.mod @@ -4,17 +4,17 @@ go 1.21 require ( cosmossdk.io/api v0.7.2 - cosmossdk.io/errors v1.0.0 + cosmossdk.io/errors v1.0.1 cosmossdk.io/math v1.2.0 - cosmossdk.io/store v1.0.0 + cosmossdk.io/store v1.0.2 cosmossdk.io/x/feegrant v0.1.0 cosmossdk.io/x/upgrade v0.1.0 github.com/avast/retry-go/v4 v4.5.1 - github.com/btcsuite/btcd v0.23.4 - github.com/btcsuite/btcd/btcutil v1.1.3 - github.com/cometbft/cometbft v0.38.0 + github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd + github.com/btcsuite/btcd/btcutil v1.1.5 + github.com/cometbft/cometbft v0.38.2 github.com/cosmos/cosmos-proto v1.0.0-beta.3 - github.com/cosmos/cosmos-sdk v0.50.1 + github.com/cosmos/cosmos-sdk v0.50.3 github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.4.11 github.com/cosmos/ibc-go/modules/capability v1.0.0 @@ -27,35 +27,35 @@ require ( github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/jsternberg/zap-logfmt v1.3.0 github.com/prometheus/client_golang v1.17.0 - github.com/spf13/cobra v1.7.0 - github.com/spf13/viper v1.17.0 - github.com/strangelove-ventures/cometbft v0.37.3-0.20231004194858-c01e8d5bcac3 + github.com/spf13/cobra v1.8.0 + github.com/spf13/viper v1.18.1 + github.com/strangelove-ventures/cometbft-client v0.0.0-20240122193328-9503d3144af6 github.com/stretchr/testify v1.8.4 github.com/tyler-smith/go-bip39 v1.1.0 go.uber.org/multierr v1.10.0 go.uber.org/zap v1.26.0 - golang.org/x/mod v0.14.0 golang.org/x/sync v0.5.0 golang.org/x/text v0.14.0 - google.golang.org/grpc v1.59.0 + google.golang.org/grpc v1.60.1 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 ) require ( - cloud.google.com/go v0.110.8 // indirect - cloud.google.com/go/compute v1.23.1 // indirect + cloud.google.com/go v0.110.10 // indirect + cloud.google.com/go/compute v1.23.3 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.3 // indirect - cloud.google.com/go/storage v1.31.0 // indirect + cloud.google.com/go/iam v1.1.5 // indirect + cloud.google.com/go/storage v1.35.1 // indirect cosmossdk.io/collections v0.4.0 // indirect cosmossdk.io/core v0.11.0 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect - cosmossdk.io/log v1.2.1 // indirect - cosmossdk.io/x/tx v0.12.0 // indirect + cosmossdk.io/log v1.3.0 // indirect + cosmossdk.io/x/tx v0.13.0 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.1 // indirect + github.com/DataDog/datadog-go v3.2.0+incompatible // indirect github.com/DataDog/zstd v1.5.5 // indirect github.com/aws/aws-sdk-go v1.44.312 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -63,7 +63,7 @@ require ( github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/bits-and-blooms/bitset v1.8.0 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect @@ -73,7 +73,7 @@ require ( github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft-db v0.8.0 // indirect + github.com/cometbft/cometbft-db v0.9.1 // indirect github.com/consensys/bavard v0.1.13 // indirect github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/cosmos/btcutil v1.0.5 // indirect @@ -95,7 +95,7 @@ require ( github.com/ethereum/c-kzg-4844 v0.4.0 // indirect github.com/fatih/color v1.15.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/getsentry/sentry-go v0.25.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect @@ -104,7 +104,7 @@ require ( github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/glog v1.1.2 // indirect + github.com/golang/glog v1.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.3 // indirect @@ -113,15 +113,14 @@ require ( github.com/google/go-querystring v1.1.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.7 // indirect - github.com/google/uuid v1.3.1 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect + github.com/google/uuid v1.4.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/gorilla/websocket v1.5.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect - github.com/gtank/merlin v0.1.1 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect github.com/hashicorp/go-getter v1.7.2 // indirect github.com/hashicorp/go-hclog v1.5.0 // indirect @@ -141,18 +140,17 @@ require ( github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect - github.com/klauspost/compress v1.17.2 // indirect + github.com/klauspost/compress v1.17.4 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/linxGnu/grocksdb v1.8.4 // indirect + github.com/linxGnu/grocksdb v1.8.6 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 // indirect - github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-testing-interface v1.14.1 // indirect @@ -172,12 +170,12 @@ require ( github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.31.0 // indirect - github.com/sagikazarmark/locafero v0.3.0 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.10.0 // indirect - github.com/spf13/cast v1.5.1 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/supranational/blst v0.3.11 // indirect @@ -187,21 +185,23 @@ require ( github.com/ulikunitz/xz v0.5.11 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect - go.etcd.io/bbolt v1.3.7 // indirect + go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect - golang.org/x/crypto v0.17.0 // indirect + golang.org/x/crypto v0.18.0 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect - golang.org/x/net v0.18.0 // indirect - golang.org/x/oauth2 v0.12.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.15.0 // indirect + golang.org/x/mod v0.14.0 // indirect + golang.org/x/net v0.20.0 // indirect + golang.org/x/oauth2 v0.15.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/term v0.16.0 // indirect + golang.org/x/time v0.5.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.143.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect - google.golang.org/protobuf v1.31.0 // indirect + google.golang.org/api v0.153.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect + google.golang.org/protobuf v1.32.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gotest.tools/v3 v3.5.1 // indirect nhooyr.io/websocket v1.8.6 // indirect diff --git a/go.sum b/go.sum index a0dc566f5..f448e31c0 100644 --- a/go.sum +++ b/go.sum @@ -3,7 +3,6 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -16,7 +15,6 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= @@ -32,8 +30,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= -cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -70,8 +68,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0= -cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,8 +109,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.3 h1:18tKG7DzydKWUnLjonWcJO6wjSCAtzh4GcRKlH/Hrzc= -cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -170,12 +168,11 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= -cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= +cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= +cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -197,22 +194,22 @@ cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= -cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= -cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= -cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= +cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= +cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= +cosmossdk.io/log v1.3.0 h1:L0Z0XstClo2kOU4h3V1iDoE5Ji64sg5HLOogzGg67Oo= +cosmossdk.io/log v1.3.0/go.mod h1:HIDyvWLqZe2ovlWabsDN4aPMpY/nUEquAhgfTf2ZzB8= cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= -cosmossdk.io/store v1.0.0 h1:6tnPgTpTSIskaTmw/4s5C9FARdgFflycIc9OX8i1tOI= -cosmossdk.io/store v1.0.0/go.mod h1:ABMprwjvx6IpMp8l06TwuMrj6694/QP5NIW+X6jaTYc= +cosmossdk.io/store v1.0.2 h1:lSg5BTvJBHUDwswNNyeh4K/CbqiHER73VU4nDNb8uk0= +cosmossdk.io/store v1.0.2/go.mod h1:EFtENTqVTuWwitGW1VwaBct+yDagk7oG/axBMPH+FXs= cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= -cosmossdk.io/x/tx v0.12.0 h1:Ry2btjQdrfrje9qZ3iZeZSmDArjgxUJMMcLMrX4wj5U= -cosmossdk.io/x/tx v0.12.0/go.mod h1:qTth2coAGkwCwOCjqQ8EAQg+9udXNRzcnSbMgGKGEI0= +cosmossdk.io/x/tx v0.13.0 h1:8lzyOh3zONPpZv2uTcUmsv0WTXy6T1/aCVDCqShmpzU= +cosmossdk.io/x/tx v0.13.0/go.mod h1:CpNQtmoqbXa33/DVxWQNx5Dcnbkv2xGUhL7tYQ5wUsY= cosmossdk.io/x/upgrade v0.1.0 h1:z1ZZG4UL9ICTNbJDYZ6jOnF9GdEK9wyoEFi4BUScHXE= cosmossdk.io/x/upgrade v0.1.0/go.mod h1:/6jjNGbiPCNtmA1N+rBtP601sr0g4ZXuj3yC6ClPCGY= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -226,8 +223,7 @@ github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25 github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= -github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRrLeDnvGIM= -github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= @@ -285,20 +281,20 @@ github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5M github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= -github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= -github.com/btcsuite/btcd v0.23.4 h1:IzV6qqkfwbItOS/sg/aDfPDsjPP8twrCOE2R93hxMlQ= -github.com/btcsuite/btcd v0.23.4/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= +github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd h1:js1gPwhcFflTZ7Nzl7WHaOTlTr5hIrR4n1NM4v9n4Kw= +github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= -github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= -github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8= +github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -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/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/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-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= @@ -361,10 +357,10 @@ github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZ github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.0 h1:ogKnpiPX7gxCvqTEF4ly25/wAxUqf181t30P3vqdpdc= -github.com/cometbft/cometbft v0.38.0/go.mod h1:5Jz0Z8YsHSf0ZaAqGvi/ifioSdVFPtEGrm8Y9T/993k= -github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= -github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= +github.com/cometbft/cometbft v0.38.2 h1:io0JCh5EPxINKN5ZMI5hCdpW3QVZRy+o8qWe3mlJa/8= +github.com/cometbft/cometbft v0.38.2/go.mod h1:PIi48BpzwlHqtV3mzwPyQgOyOnU94BNBimLS2ebBHOg= +github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= +github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= @@ -383,8 +379,8 @@ github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0 github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U= github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.50.1 h1:2SYwAYqd7ZwtrWxu/J8PwbQV/cDcu90bCr/a78g3lVw= -github.com/cosmos/cosmos-sdk v0.50.1/go.mod h1:fsLSPGstCwn6MMsFDMAQWGJj8E4sYsN9Gnu1bGE5imA= +github.com/cosmos/cosmos-sdk v0.50.3 h1:zP0AXm54ws2t2qVWvcQhEYVafhOAREU2QL0gnbwjvXw= +github.com/cosmos/cosmos-sdk v0.50.3/go.mod h1:tlrkY1sntOt1q0OX/rqF0zRJtmXNoffAS6VFTcky+w8= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= @@ -404,11 +400,9 @@ github.com/cosmos/ledger-cosmos-go v0.13.3 h1:7ehuBGuyIytsXbd4MP43mLeoN2LTOEnk5n github.com/cosmos/ledger-cosmos-go v0.13.3/go.mod h1:HENcEP+VtahZFw38HZ3+LS3Iv5XV6svsnkk9vdJtLr8= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= -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/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= @@ -477,13 +471,13 @@ github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8 github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI= github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -551,8 +545,8 @@ github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXP github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -641,7 +635,6 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf 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= @@ -655,13 +648,13 @@ github.com/google/subcommands v1.2.0/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3 github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.3.1 h1:KjJaJ9iWZ3jOFZIf1Lqf4laDRCasjl0BCmnEGxkdLb4= -github.com/google/uuid v1.3.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= +github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -674,7 +667,6 @@ github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMd github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= @@ -685,8 +677,9 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/grpc-ecosystem/go-grpc-middleware v1.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.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= @@ -697,10 +690,6 @@ github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4 github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c h1:6rhixN/i8ZofjG1Y75iExal34USq5p+wiN1tpie8IrU= github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c/go.mod h1:NMPJylDgVpX0MLRlPy15sqSwOFv/U1GZ2m21JhFfek0= -github.com/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.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= @@ -806,11 +795,10 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= -github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/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.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -832,8 +820,8 @@ github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6 github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= 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/linxGnu/grocksdb v1.8.4 h1:ZMsBpPpJNtRLHiKKp0mI7gW+NT4s7UgfD5xHxx1jVRo= -github.com/linxGnu/grocksdb v1.8.4/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= +github.com/linxGnu/grocksdb v1.8.6 h1:O7I6SIGPrypf3f/gmrrLUBQDKfO8uOoYdWf4gLS06tc= +github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -861,9 +849,6 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5 github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0 h1:jWpvCLoY8Z/e3VKvlsiIGKtc+UG6U5vzxaoagmhXfyg= github.com/matttproud/golang_protobuf_extensions/v2 v2.0.0/go.mod h1:QUyp042oQthUoa9bqDv0ER0wrtXnBruoNd7aNjkbP+k= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= -github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 h1:QRUSJEgZn2Snx0EmT/QLXibWjSUDjKWvXIT19NBVp94= -github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= 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= @@ -970,7 +955,6 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE 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/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -1028,8 +1012,8 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR 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/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= -github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= @@ -1055,25 +1039,25 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO 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.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= -github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.7.0 h1:hyqWnYt1ZQShIddO5kBpj3vu05/++x6tJ6dg8EC572I= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= +github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= +github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/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.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= -github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= -github.com/strangelove-ventures/cometbft v0.37.3-0.20231004194858-c01e8d5bcac3 h1:sOdCYxFMTVbEGvJ6LfjQsm+tQbB5YdUpvMcXJnHBFm4= -github.com/strangelove-ventures/cometbft v0.37.3-0.20231004194858-c01e8d5bcac3/go.mod h1:Jgux5ULdCs9N7ARy9NHe+hPfJQhUFpYF6+/+gmcqsGw= +github.com/spf13/viper v1.18.1 h1:rmuU42rScKWlhhJDyXZRKJQHXFX02chSVW1IvkPGiVM= +github.com/spf13/viper v1.18.1/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/strangelove-ventures/cometbft-client v0.0.0-20240122193328-9503d3144af6 h1:+GBtxz0ZdS/UiGl9mK+g9P6k9MDpLxhw7reBIDyIm+Q= +github.com/strangelove-ventures/cometbft-client v0.0.0-20240122193328-9503d3144af6/go.mod h1:QzThgjzvsGgUNVNpGPitmxOWMIhp6a0oqf80nCRNt/0= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= @@ -1137,8 +1121,8 @@ github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWp github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1181,11 +1165,9 @@ golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1269,7 +1251,6 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= @@ -1277,7 +1258,6 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1290,8 +1270,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1317,8 +1297,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= 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= @@ -1392,13 +1372,11 @@ golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1431,18 +1409,17 @@ golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= 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= @@ -1452,6 +1429,7 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= @@ -1459,6 +1437,8 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1515,7 +1495,6 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/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/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -1583,8 +1562,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA= -google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk= +google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= +google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1592,8 +1571,9 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/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 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-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-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1632,10 +1612,8 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1702,12 +1680,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA= -google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= -google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a h1:myvhA4is3vrit1a6NZCWBIwN0kNEnX21DJOJX/NvIfI= -google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= +google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg= +google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1749,8 +1727,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= +google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1767,8 +1745,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/interchaintest/feegrant_test.go b/interchaintest/feegrant_test.go index 2a56b03af..451ac0578 100644 --- a/interchaintest/feegrant_test.go +++ b/interchaintest/feegrant_test.go @@ -11,8 +11,6 @@ import ( sdkmath "cosmossdk.io/math" "github.com/avast/retry-go/v4" - rpcclient "github.com/cometbft/cometbft/rpc/client" - ctypes "github.com/cometbft/cometbft/rpc/core/types" "github.com/cosmos/cosmos-sdk/types" txtypes "github.com/cosmos/cosmos-sdk/types/tx" "github.com/cosmos/go-bip39" @@ -21,6 +19,7 @@ import ( "github.com/cosmos/relayer/v2/relayer" "github.com/cosmos/relayer/v2/relayer/chains/cosmos" "github.com/cosmos/relayer/v2/relayer/processor" + clienttypes "github.com/strangelove-ventures/cometbft-client/client" "github.com/strangelove-ventures/interchaintest/v8" "github.com/strangelove-ventures/interchaintest/v8/ibc" "github.com/strangelove-ventures/interchaintest/v8/testreporter" @@ -394,7 +393,7 @@ func TestRelayerFeeGrant(t *testing.T) { hash, err := hex.DecodeString(curr.Response.TxHash) require.Nil(t, err) - txResp, err := TxWithRetry(ctx, cProv.RPCClient, hash) + txResp, err := TxWithRetry(ctx, cProv.RPCClient.Client, hash) require.Nil(t, err) require.Nil(t, err) @@ -536,9 +535,9 @@ func TestRelayerFeeGrant(t *testing.T) { } } -func TxWithRetry(ctx context.Context, client rpcclient.Client, hash []byte) (*ctypes.ResultTx, error) { +func TxWithRetry(ctx context.Context, client *clienttypes.Client, hash []byte) (*clienttypes.TxResponse, error) { var err error - var res *ctypes.ResultTx + var res *clienttypes.TxResponse if err = retry.Do(func() error { res, err = client.Tx(ctx, hash, true) return err diff --git a/interchaintest/go.mod b/interchaintest/go.mod index d927e4b4d..cefa3ab71 100644 --- a/interchaintest/go.mod +++ b/interchaintest/go.mod @@ -7,8 +7,8 @@ require ( cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 cosmossdk.io/x/upgrade v0.1.0 github.com/avast/retry-go/v4 v4.5.1 - github.com/cometbft/cometbft v0.38.0 - github.com/cosmos/cosmos-sdk v0.50.1 + github.com/cometbft/cometbft v0.38.2 + github.com/cosmos/cosmos-sdk v0.50.3 github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.4.11 github.com/cosmos/ibc-go/modules/capability v1.0.0 @@ -18,6 +18,7 @@ require ( github.com/google/uuid v1.4.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/moby/moby v24.0.7+incompatible + github.com/strangelove-ventures/cometbft-client v0.0.0-20240122193328-9503d3144af6 github.com/strangelove-ventures/interchaintest/v8 v8.0.1-0.20231114192524-e3719592933b github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.26.0 @@ -25,23 +26,23 @@ require ( ) require ( - cloud.google.com/go v0.110.8 // indirect - cloud.google.com/go/compute v1.23.1 // indirect + cloud.google.com/go v0.110.10 // indirect + cloud.google.com/go/compute v1.23.3 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v1.1.3 // indirect - cloud.google.com/go/storage v1.31.0 // indirect + cloud.google.com/go/iam v1.1.5 // indirect + cloud.google.com/go/storage v1.35.1 // indirect cosmossdk.io/api v0.7.2 // indirect cosmossdk.io/client/v2 v2.0.0-beta.1 // indirect cosmossdk.io/collections v0.4.0 // indirect cosmossdk.io/core v0.11.0 // indirect cosmossdk.io/depinject v1.0.0-alpha.4 // indirect - cosmossdk.io/errors v1.0.0 // indirect - cosmossdk.io/log v1.2.1 // indirect - cosmossdk.io/store v1.0.0 // indirect + cosmossdk.io/errors v1.0.1 // indirect + cosmossdk.io/log v1.3.0 // indirect + cosmossdk.io/store v1.0.2 // indirect cosmossdk.io/x/circuit v0.1.0 // indirect cosmossdk.io/x/evidence v0.1.0 // indirect cosmossdk.io/x/feegrant v0.1.0 // indirect - cosmossdk.io/x/tx v0.12.0 // indirect + cosmossdk.io/x/tx v0.13.0 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect github.com/99designs/keyring v1.2.2 // indirect @@ -49,6 +50,7 @@ require ( github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 // indirect github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect + github.com/DataDog/datadog-go v3.2.0+incompatible // indirect github.com/DataDog/zstd v1.5.5 // indirect github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect @@ -60,10 +62,10 @@ require ( github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect github.com/bits-and-blooms/bitset v1.8.0 // indirect - github.com/btcsuite/btcd v0.23.4 // indirect + github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect - github.com/btcsuite/btcd/btcutil v1.1.3 // indirect - github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 // indirect + github.com/btcsuite/btcd/btcutil v1.1.5 // indirect + github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0 // indirect github.com/cenkalti/backoff/v4 v4.2.1 // indirect github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect @@ -74,7 +76,7 @@ require ( github.com/cockroachdb/pebble v0.0.0-20231102162011-844f0582c2eb // indirect github.com/cockroachdb/redact v1.1.5 // indirect github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 // indirect - github.com/cometbft/cometbft-db v0.8.0 // indirect + github.com/cometbft/cometbft-db v0.9.1 // indirect github.com/consensys/bavard v0.1.13 // indirect github.com/consensys/gnark-crypto v0.12.1 // indirect github.com/containerd/containerd v1.7.11 // indirect @@ -107,7 +109,7 @@ require ( github.com/ethereum/go-ethereum v1.13.5 // indirect github.com/fatih/color v1.15.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/getsentry/sentry-go v0.25.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect @@ -117,7 +119,7 @@ require ( github.com/gofrs/flock v0.8.1 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect - github.com/golang/glog v1.1.2 // indirect + github.com/golang/glog v1.2.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect github.com/golang/protobuf v1.5.3 // indirect @@ -128,11 +130,11 @@ require ( github.com/google/go-querystring v1.1.0 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/s2a-go v0.1.7 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/googleapis/gax-go/v2 v2.12.0 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect - github.com/gorilla/websocket v1.5.0 // indirect + github.com/gorilla/websocket v1.5.1 // indirect github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 // indirect github.com/grpc-ecosystem/grpc-gateway v1.16.0 // indirect github.com/gsterjov/go-libsecret v0.0.0-20161001094733-a6f4afe4910c // indirect @@ -160,14 +162,14 @@ require ( github.com/jmhodges/levigo v1.0.0 // indirect github.com/jsternberg/zap-logfmt v1.3.0 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/klauspost/compress v1.17.2 // indirect + github.com/klauspost/compress v1.17.4 // indirect github.com/klauspost/cpuid/v2 v2.2.5 // indirect github.com/kr/pretty v0.3.1 // indirect github.com/kr/text v0.2.0 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect github.com/libp2p/go-libp2p v0.31.0 // indirect - github.com/linxGnu/grocksdb v1.8.4 // indirect + github.com/linxGnu/grocksdb v1.8.6 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/manifoldco/promptui v0.9.0 // indirect github.com/mattn/go-colorable v0.1.13 // indirect @@ -212,18 +214,17 @@ require ( github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/rs/cors v1.8.3 // indirect github.com/rs/zerolog v1.31.0 // indirect - github.com/sagikazarmark/locafero v0.3.0 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/sourcegraph/conc v0.3.0 // indirect github.com/spaolacci/murmur3 v1.1.0 // indirect - github.com/spf13/afero v1.10.0 // indirect - github.com/spf13/cast v1.5.1 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect github.com/spf13/cobra v1.8.0 // indirect github.com/spf13/pflag v1.0.5 // indirect - github.com/spf13/viper v1.17.0 // indirect - github.com/strangelove-ventures/cometbft v0.37.3-0.20231004194858-c01e8d5bcac3 // indirect + github.com/spf13/viper v1.18.1 // indirect github.com/subosito/gotenv v1.6.0 // indirect github.com/supranational/blst v0.3.11 // indirect github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect @@ -234,26 +235,27 @@ require ( github.com/ulikunitz/xz v0.5.11 // indirect github.com/zondax/hid v0.9.2 // indirect github.com/zondax/ledger-go v0.14.3 // indirect - go.etcd.io/bbolt v1.3.7 // indirect + go.etcd.io/bbolt v1.3.8 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.17.0 // indirect + golang.org/x/crypto v0.18.0 // indirect golang.org/x/exp v0.0.0-20231006140011-7918f672742d // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.18.0 // indirect - golang.org/x/oauth2 v0.12.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.15.0 // indirect + golang.org/x/net v0.20.0 // indirect + golang.org/x/oauth2 v0.15.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/term v0.16.0 // indirect golang.org/x/text v0.14.0 // indirect + golang.org/x/time v0.5.0 // indirect golang.org/x/tools v0.14.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.143.0 // indirect - google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 // indirect - google.golang.org/grpc v1.59.0 // indirect - google.golang.org/protobuf v1.31.0 // indirect + google.golang.org/api v0.153.0 // indirect + google.golang.org/appengine v1.6.8 // indirect + google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect + google.golang.org/grpc v1.60.1 // indirect + google.golang.org/protobuf v1.32.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/natefinch/npipe.v2 v2.0.0-20160621034901-c1b8fa8bdcce // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/interchaintest/go.sum b/interchaintest/go.sum index 17c3fc043..54ea4b568 100644 --- a/interchaintest/go.sum +++ b/interchaintest/go.sum @@ -3,7 +3,6 @@ cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= @@ -16,7 +15,6 @@ cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOY cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= @@ -32,8 +30,8 @@ cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w9 cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.110.8 h1:tyNdfIxjzaWctIiLYOTalaLKZ17SI44SKFW26QbOhME= -cloud.google.com/go v0.110.8/go.mod h1:Iz8AkXJf1qmxC3Oxoep8R1T36w8B92yU29PcBhHO5fk= +cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= +cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= @@ -70,8 +68,8 @@ cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.23.1 h1:V97tBoDaZHb6leicZ1G6DLK2BAaZLJ/7+9BB/En3hR0= -cloud.google.com/go/compute v1.23.1/go.mod h1:CqB3xpmPKKt3OJpW2ndFIXnA9A4xAy/F3Xp1ixncW78= +cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= +cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= @@ -111,8 +109,8 @@ cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y97 cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v1.1.3 h1:18tKG7DzydKWUnLjonWcJO6wjSCAtzh4GcRKlH/Hrzc= -cloud.google.com/go/iam v1.1.3/go.mod h1:3khUlaBXfPKKe7huYgEpDn6FtgRyMEqbkvBxrQyY5SE= +cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= +cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= @@ -170,12 +168,11 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.31.0 h1:+S3LjjEN2zZ+L5hOwj4+1OkGCsLVe0NzpXKQ1pSdTCI= -cloud.google.com/go/storage v1.31.0/go.mod h1:81ams1PrhW16L4kF7qg+4mTq7SRs5HsbDTM0bWvrwJ0= +cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= +cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= @@ -197,24 +194,24 @@ cosmossdk.io/core v0.11.0 h1:vtIafqUi+1ZNAE/oxLOQQ7Oek2n4S48SWLG8h/+wdbo= cosmossdk.io/core v0.11.0/go.mod h1:LaTtayWBSoacF5xNzoF8tmLhehqlA9z1SWiPuNC6X1w= cosmossdk.io/depinject v1.0.0-alpha.4 h1:PLNp8ZYAMPTUKyG9IK2hsbciDWqna2z1Wsl98okJopc= cosmossdk.io/depinject v1.0.0-alpha.4/go.mod h1:HeDk7IkR5ckZ3lMGs/o91AVUc7E596vMaOmslGFM3yU= -cosmossdk.io/errors v1.0.0 h1:nxF07lmlBbB8NKQhtJ+sJm6ef5uV1XkvPXG2bUntb04= -cosmossdk.io/errors v1.0.0/go.mod h1:+hJZLuhdDE0pYN8HkOrVNwrIOYvUGnn6+4fjnJs/oV0= -cosmossdk.io/log v1.2.1 h1:Xc1GgTCicniwmMiKwDxUjO4eLhPxoVdI9vtMW8Ti/uk= -cosmossdk.io/log v1.2.1/go.mod h1:GNSCc/6+DhFIj1aLn/j7Id7PaO8DzNylUZoOYBL9+I4= +cosmossdk.io/errors v1.0.1 h1:bzu+Kcr0kS/1DuPBtUFdWjzLqyUuCiyHjyJB6srBV/0= +cosmossdk.io/errors v1.0.1/go.mod h1:MeelVSZThMi4bEakzhhhE/CKqVv3nOJDA25bIqRDu/U= +cosmossdk.io/log v1.3.0 h1:L0Z0XstClo2kOU4h3V1iDoE5Ji64sg5HLOogzGg67Oo= +cosmossdk.io/log v1.3.0/go.mod h1:HIDyvWLqZe2ovlWabsDN4aPMpY/nUEquAhgfTf2ZzB8= cosmossdk.io/math v1.2.0 h1:8gudhTkkD3NxOP2YyyJIYYmt6dQ55ZfJkDOaxXpy7Ig= cosmossdk.io/math v1.2.0/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 h1:g8muUHnXL8vhld2Sjilyhb1UQObc+x9GVuDK43TYZns= cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462/go.mod h1:4Dd3NLoLYoN90kZ0uyHoTHzVVk9+J0v4HhZRBNTAq2c= -cosmossdk.io/store v1.0.0 h1:6tnPgTpTSIskaTmw/4s5C9FARdgFflycIc9OX8i1tOI= -cosmossdk.io/store v1.0.0/go.mod h1:ABMprwjvx6IpMp8l06TwuMrj6694/QP5NIW+X6jaTYc= +cosmossdk.io/store v1.0.2 h1:lSg5BTvJBHUDwswNNyeh4K/CbqiHER73VU4nDNb8uk0= +cosmossdk.io/store v1.0.2/go.mod h1:EFtENTqVTuWwitGW1VwaBct+yDagk7oG/axBMPH+FXs= cosmossdk.io/x/circuit v0.1.0 h1:IAej8aRYeuOMritczqTlljbUVHq1E85CpBqaCTwYgXs= cosmossdk.io/x/circuit v0.1.0/go.mod h1:YDzblVE8+E+urPYQq5kq5foRY/IzhXovSYXb4nwd39w= cosmossdk.io/x/evidence v0.1.0 h1:J6OEyDl1rbykksdGynzPKG5R/zm6TacwW2fbLTW4nCk= cosmossdk.io/x/evidence v0.1.0/go.mod h1:hTaiiXsoiJ3InMz1uptgF0BnGqROllAN8mwisOMMsfw= cosmossdk.io/x/feegrant v0.1.0 h1:c7s3oAq/8/UO0EiN1H5BIjwVntujVTkYs35YPvvrdQk= cosmossdk.io/x/feegrant v0.1.0/go.mod h1:4r+FsViJRpcZif/yhTn+E0E6OFfg4n0Lx+6cCtnZElU= -cosmossdk.io/x/tx v0.12.0 h1:Ry2btjQdrfrje9qZ3iZeZSmDArjgxUJMMcLMrX4wj5U= -cosmossdk.io/x/tx v0.12.0/go.mod h1:qTth2coAGkwCwOCjqQ8EAQg+9udXNRzcnSbMgGKGEI0= +cosmossdk.io/x/tx v0.13.0 h1:8lzyOh3zONPpZv2uTcUmsv0WTXy6T1/aCVDCqShmpzU= +cosmossdk.io/x/tx v0.13.0/go.mod h1:CpNQtmoqbXa33/DVxWQNx5Dcnbkv2xGUhL7tYQ5wUsY= cosmossdk.io/x/upgrade v0.1.0 h1:z1ZZG4UL9ICTNbJDYZ6jOnF9GdEK9wyoEFi4BUScHXE= cosmossdk.io/x/upgrade v0.1.0/go.mod h1:/6jjNGbiPCNtmA1N+rBtP601sr0g4ZXuj3yC6ClPCGY= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -238,6 +235,7 @@ github.com/ChainSafe/go-schnorrkel v1.0.0 h1:3aDA67lAykLaG1y3AOjs88dMxC88PgUuHRr github.com/ChainSafe/go-schnorrkel v1.0.0/go.mod h1:dpzHYVxLZcp8pjlV+O+UR8K0Hp/z7vcchBSbMBEhCw4= github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 h1:oknQF/iIhf5lVjbwjsVDzDByupRhga8nhA3NAmwyHDA= github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420/go.mod h1:KYkiMX5AbOlXXYfxkrYPrRPV6EbVUALTQh5ptUOJzu8= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/DataDog/zstd v1.5.5 h1:oWf5W7GtOLgp6bciQYDmhHHjdhYkALu6S/5Ni9ZgSvQ= github.com/DataDog/zstd v1.5.5/go.mod h1:g4AWEaM3yOg3HYfnJ3YIawPnVdXJh9QME85blwSAmyw= @@ -304,20 +302,20 @@ github.com/bits-and-blooms/bitset v1.8.0 h1:FD+XqgOZDUxxZ8hzoBFuV9+cGWY9CslN6d5M github.com/bits-and-blooms/bitset v1.8.0/go.mod h1:7hO7Gc7Pp1vODcmWvKMRA9BNmbv6a/7QIWpPxHddWR8= github.com/btcsuite/btcd v0.20.1-beta/go.mod h1:wVuoA8VJLEcwgqHBwHmzLRazpKxTv13Px/pDuV7OomQ= github.com/btcsuite/btcd v0.22.0-beta.0.20220111032746-97732e52810c/go.mod h1:tjmYdS6MLJ5/s0Fj4DbLgSbDHbEqLJrtnHecBFkdz5M= -github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= -github.com/btcsuite/btcd v0.23.4 h1:IzV6qqkfwbItOS/sg/aDfPDsjPP8twrCOE2R93hxMlQ= -github.com/btcsuite/btcd v0.23.4/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= +github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd h1:js1gPwhcFflTZ7Nzl7WHaOTlTr5hIrR4n1NM4v9n4Kw= +github.com/btcsuite/btcd v0.23.5-0.20231215221805-96c9fd8078fd/go.mod h1:nm3Bko6zh6bWP60UxwoT5LzdGJsQJaPo6HjduXq9p6A= github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.0.0/go.mod h1:Uoxwv0pqYWhD//tfTiipkxNfdhG9UrLwaeswfjfdF0A= github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= -github.com/btcsuite/btcd/btcutil v1.1.3 h1:xfbtw8lwpp0G6NwSHb+UE67ryTFHJAiNuipusjXSohQ= -github.com/btcsuite/btcd/btcutil v1.1.3/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btcd/btcutil v1.1.5 h1:+wER79R5670vs/ZusMTF1yTcRYE5GUsFbdjdisflzM8= +github.com/btcsuite/btcd/btcutil v1.1.5/go.mod h1:PSZZ4UitpLBWzxGd5VGOrLnmOjtPP/a6HaFo12zMs00= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= -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/btcd/chaincfg/chainhash v1.1.0 h1:59Kx4K6lzOW5w6nFlA0v5+lk/6sjybR934QNHSJZPTQ= +github.com/btcsuite/btcd/chaincfg/chainhash v1.1.0/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-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce h1:YtWJF7RHm2pYCvA5t0RPmAaLUhREsKuKd+SLhxFbFeQ= @@ -386,10 +384,10 @@ github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZ github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06 h1:zuQyyAKVxetITBuuhv3BI9cMrmStnpT18zmgmTxunpo= github.com/cockroachdb/tokenbucket v0.0.0-20230807174530-cc333fc44b06/go.mod h1:7nc4anLGjupUW/PeY5qiNYsdNXj7zopG+eqsS7To5IQ= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/cometbft/cometbft v0.38.0 h1:ogKnpiPX7gxCvqTEF4ly25/wAxUqf181t30P3vqdpdc= -github.com/cometbft/cometbft v0.38.0/go.mod h1:5Jz0Z8YsHSf0ZaAqGvi/ifioSdVFPtEGrm8Y9T/993k= -github.com/cometbft/cometbft-db v0.8.0 h1:vUMDaH3ApkX8m0KZvOFFy9b5DZHBAjsnEuo9AKVZpjo= -github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3HfVHrY4PG8x5c0= +github.com/cometbft/cometbft v0.38.2 h1:io0JCh5EPxINKN5ZMI5hCdpW3QVZRy+o8qWe3mlJa/8= +github.com/cometbft/cometbft v0.38.2/go.mod h1:PIi48BpzwlHqtV3mzwPyQgOyOnU94BNBimLS2ebBHOg= +github.com/cometbft/cometbft-db v0.9.1 h1:MIhVX5ja5bXNHF8EYrThkG9F7r9kSfv8BX4LWaxWJ4M= +github.com/cometbft/cometbft-db v0.9.1/go.mod h1:iliyWaoV0mRwBJoizElCwwRA9Tf7jZJOURcRZF9m60U= github.com/consensys/bavard v0.1.13 h1:oLhMLOFGTLdlda/kma4VOJazblc7IM5y5QPd2A/YjhQ= github.com/consensys/bavard v0.1.13/go.mod h1:9ItSMtA/dXMAiL7BG6bqW2m3NdSEObYWoH223nGHukI= github.com/consensys/gnark-crypto v0.12.1 h1:lHH39WuuFgVHONRl3J0LRBtuYdQTumFSDtJF7HpyG8M= @@ -412,8 +410,8 @@ github.com/cosmos/cosmos-db v1.0.0 h1:EVcQZ+qYag7W6uorBKFPvX6gRjw6Uq2hIh4hCWjuQ0 github.com/cosmos/cosmos-db v1.0.0/go.mod h1:iBvi1TtqaedwLdcrZVYRSSCb6eSy61NLj4UNmdIgs0U= github.com/cosmos/cosmos-proto v1.0.0-beta.3 h1:VitvZ1lPORTVxkmF2fAp3IiA61xVwArQYKXTdEcpW6o= github.com/cosmos/cosmos-proto v1.0.0-beta.3/go.mod h1:t8IASdLaAq+bbHbjq4p960BvcTqtwuAxid3b/2rOD6I= -github.com/cosmos/cosmos-sdk v0.50.1 h1:2SYwAYqd7ZwtrWxu/J8PwbQV/cDcu90bCr/a78g3lVw= -github.com/cosmos/cosmos-sdk v0.50.1/go.mod h1:fsLSPGstCwn6MMsFDMAQWGJj8E4sYsN9Gnu1bGE5imA= +github.com/cosmos/cosmos-sdk v0.50.3 h1:zP0AXm54ws2t2qVWvcQhEYVafhOAREU2QL0gnbwjvXw= +github.com/cosmos/cosmos-sdk v0.50.3/go.mod h1:tlrkY1sntOt1q0OX/rqF0zRJtmXNoffAS6VFTcky+w8= 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= @@ -437,8 +435,6 @@ github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:ma github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/crate-crypto/go-kzg-4844 v0.7.0 h1:C0vgZRk4q4EZ/JgPfzuSoxdCq3C3mOZMBShovmncxvA= github.com/crate-crypto/go-kzg-4844 v0.7.0/go.mod h1:1kMhvPgI0Ky3yIa+9lFySEBUBXkYxeOi8ZF1sYioxhc= -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/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.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= @@ -524,13 +520,13 @@ github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHqu github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= 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.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/getsentry/sentry-go v0.25.0 h1:q6Eo+hS+yoJlTO3uu/azhQadsD8V+jQn2D8VvX1eOyI= github.com/getsentry/sentry-go v0.25.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= @@ -594,8 +590,8 @@ github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2 github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.1.2 h1:DVjP2PbBOzHyzA+dn3WhHIq4NdVu3Q+pvivFICf/7fo= -github.com/golang/glog v1.1.2/go.mod h1:zR+okUeTbrL6EL3xHUDxZuEtGv04p5shwip1+mL/rLQ= +github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68= +github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -684,7 +680,6 @@ github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hf 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= @@ -705,8 +700,8 @@ github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+ github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.3.1 h1:SBWmZhjUDRorQxrN0nwzf+AHBxnbFjViHQS4P0yVpmQ= -github.com/googleapis/enterprise-certificate-proxy v0.3.1/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= +github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= +github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= @@ -719,7 +714,6 @@ github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMd github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= @@ -730,8 +724,9 @@ github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= -github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY= +github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY= github.com/grpc-ecosystem/go-grpc-middleware v1.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.4.0 h1:UH//fgunKIs4JdUbpDl1VZCDaL56wXCB/5+wF6uHfaI= @@ -856,13 +851,12 @@ github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYs github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= -github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4= -github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= +github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= github.com/klauspost/cpuid/v2 v2.2.5 h1:0E5MSMDEoAulmXNFquVs//DdoomxaoTY1kUhbc/qbZg= github.com/klauspost/cpuid/v2 v2.2.5/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/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.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= @@ -887,8 +881,8 @@ github.com/libp2p/go-libp2p v0.31.0 h1:LFShhP8F6xthWiBBq3euxbKjZsoRajVEyBS9snfHx github.com/libp2p/go-libp2p v0.31.0/go.mod h1:W/FEK1c/t04PbRH3fA9i5oucu5YcgrG0JVoBWT1B7Eg= 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/linxGnu/grocksdb v1.8.4 h1:ZMsBpPpJNtRLHiKKp0mI7gW+NT4s7UgfD5xHxx1jVRo= -github.com/linxGnu/grocksdb v1.8.4/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= +github.com/linxGnu/grocksdb v1.8.6 h1:O7I6SIGPrypf3f/gmrrLUBQDKfO8uOoYdWf4gLS06tc= +github.com/linxGnu/grocksdb v1.8.6/go.mod h1:xZCIb5Muw+nhbDK4Y5UJuOrin5MceOuiXkVUR7vp4WY= github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= @@ -1065,7 +1059,6 @@ github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINE 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/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -1127,8 +1120,8 @@ github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR 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/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= -github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= @@ -1156,11 +1149,11 @@ github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasO 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.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= -github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= @@ -1171,10 +1164,10 @@ github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnIn 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.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= -github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= -github.com/strangelove-ventures/cometbft v0.37.3-0.20231004194858-c01e8d5bcac3 h1:sOdCYxFMTVbEGvJ6LfjQsm+tQbB5YdUpvMcXJnHBFm4= -github.com/strangelove-ventures/cometbft v0.37.3-0.20231004194858-c01e8d5bcac3/go.mod h1:Jgux5ULdCs9N7ARy9NHe+hPfJQhUFpYF6+/+gmcqsGw= +github.com/spf13/viper v1.18.1 h1:rmuU42rScKWlhhJDyXZRKJQHXFX02chSVW1IvkPGiVM= +github.com/spf13/viper v1.18.1/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/strangelove-ventures/cometbft-client v0.0.0-20240122193328-9503d3144af6 h1:+GBtxz0ZdS/UiGl9mK+g9P6k9MDpLxhw7reBIDyIm+Q= +github.com/strangelove-ventures/cometbft-client v0.0.0-20240122193328-9503d3144af6/go.mod h1:QzThgjzvsGgUNVNpGPitmxOWMIhp6a0oqf80nCRNt/0= github.com/strangelove-ventures/interchaintest/v8 v8.0.1-0.20231114192524-e3719592933b h1:VDe2ofJ2xiiLwkJ6qhcF2gvg75gB4WVpXO8lFzhYQOU= github.com/strangelove-ventures/interchaintest/v8 v8.0.1-0.20231114192524-e3719592933b/go.mod h1:TbVaBTSa9Y7/Jj/JeqoH79fAcyQiHloz1zxXxKjtCFA= github.com/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= @@ -1246,8 +1239,8 @@ github.com/zondax/hid v0.9.2/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWp github.com/zondax/ledger-go v0.14.3 h1:wEpJt2CEcBJ428md/5MgSLsXLBos98sBOyxNmCjfUCw= github.com/zondax/ledger-go v0.14.3/go.mod h1:IKKaoxupuB43g4NxeQmbLXv7T9AlQyie1UpHb342ycI= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -1292,11 +1285,9 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= @@ -1388,7 +1379,6 @@ golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96b golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= @@ -1401,8 +1391,8 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= -golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -1428,8 +1418,8 @@ golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= golang.org/x/oauth2 v0.1.0/go.mod h1:G9FE4dLTsbXUu90h/Pf85g4w1D+SSAgR+q46nJZ8M4A= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= 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= @@ -1506,13 +1496,11 @@ golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -1548,19 +1536,18 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= 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= @@ -1570,6 +1557,7 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= @@ -1577,8 +1565,8 @@ golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxb golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -1633,7 +1621,6 @@ golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/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/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= @@ -1701,8 +1688,8 @@ google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.143.0 h1:o8cekTkqhywkbZT6p1UHJPZ9+9uuCAJs/KYomxZB8fA= -google.golang.org/api v0.143.0/go.mod h1:FoX9DO9hT7DLNn97OuoZAGSDuNAXdJRuGK98rSUgurk= +google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= +google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= @@ -1710,8 +1697,9 @@ google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7 google.golang.org/appengine v1.6.1/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 h1:FZR1q0exgwxzPzp/aF+VccGrSfxfPpkBqjIIEq3ru6c= google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= +google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= +google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= google.golang.org/genproto v0.0.0-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-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= @@ -1751,10 +1739,8 @@ google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= @@ -1821,12 +1807,12 @@ google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqw google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= google.golang.org/genproto v0.0.0-20221025140454-527a21cfbd71/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b h1:+YaDE2r2OG8t/z5qmsh7Y+XXwCbvadxxZ0YY6mTdrVA= -google.golang.org/genproto v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:CgAqfJo+Xmu0GwA0411Ht3OU3OntXwsGmrmjI8ioGXI= -google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a h1:myvhA4is3vrit1a6NZCWBIwN0kNEnX21DJOJX/NvIfI= -google.golang.org/genproto/googleapis/api v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:SUBoKXbI1Efip18FClrQVGjWcyd0QZd8KkvdP34t7ww= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405 h1:AB/lmRny7e2pLhFEYIbl5qkDAUt2h0ZRO4wGPhZf+ik= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231030173426-d783a09b4405/go.mod h1:67X1fPuzjcrkymZzZV1vvkFeTn2Rvc6lYF9MYFGCcwE= +google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg= +google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= @@ -1868,8 +1854,8 @@ google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACu google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= -google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= +google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= +google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= @@ -1886,8 +1872,8 @@ google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQ google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/interchaintest/ibc_test.go b/interchaintest/ibc_test.go index 5721d3e79..9203b6bfe 100644 --- a/interchaintest/ibc_test.go +++ b/interchaintest/ibc_test.go @@ -22,10 +22,34 @@ import ( // // The canonical set of test chains are defined in the interchaintest repository. func interchaintestConformance(t *testing.T, rf interchaintest.RelayerFactory) { + nf := 1 + nv := 1 + cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ - {Name: "gaia", Version: "v7.0.1", ChainConfig: ibc.ChainConfig{ChainID: "cosmoshub-1004"}}, - {Name: "osmosis", Version: "v7.2.0", ChainConfig: ibc.ChainConfig{ChainID: "osmosis-1001"}}, + { + Name: "gaia", + Version: "v14.1.0", + NumValidators: &nv, + NumFullNodes: &nf, + ChainConfig: ibc.ChainConfig{ChainID: "cosmoshub-1004"}, + }, + { + Name: "osmosis", + Version: "v22.0.0", + NumValidators: &nv, + NumFullNodes: &nf, + ChainConfig: ibc.ChainConfig{ChainID: "osmosis-1001"}, + }, }) + // + //rff := interchaintest.NewBuiltinRelayerFactory( + // ibc.CosmosRly, + // zaptest.NewLogger(t), + // interchaintestrelayer.CustomDockerImage("relayer", "local", "100:1000"), + // interchaintestrelayer.ImagePull(false), + // interchaintestrelayer.StartupFlags("--processor", "events", "--block-history", "100"), + //) + conformance.Test( t, context.Background(), diff --git a/relayer/chains/comet_rpc.go b/relayer/chains/comet_rpc.go deleted file mode 100644 index fce8d4bfb..000000000 --- a/relayer/chains/comet_rpc.go +++ /dev/null @@ -1,65 +0,0 @@ -package chains - -import ( - abci "github.com/cometbft/cometbft/abci/types" - legacyabci "github.com/strangelove-ventures/cometbft/abci/types" -) - -// Results is a generalized type used in the relayer to handle the breaking changes in the CometBFT type, -// ResultBlockResults, that were introduced in v0.38.0. -type Results struct { - TxsResults []*TxResult - Events []abci.Event -} - -// TxResult is a generalized type used in the relayer to handle the breaking changes in the CometBFT type, -// ResultBlockResults, that were introduced in v0.38.0. -type TxResult struct { - Code uint32 - Events []abci.Event -} - -// ConvertEvents converts a slice of the abci Event type imported from our forked CometBFT repo into -// a slice of the abci Event type imported from the upstream CometBFT repo. -func ConvertEvents(events []legacyabci.Event) []abci.Event { - var cometEvents []abci.Event - - for _, event := range events { - newEvent := abci.Event{ - Type: event.Type, - } - - var attributes []abci.EventAttribute - for _, attr := range event.Attributes { - attributes = append(attributes, abci.EventAttribute{ - Key: attr.Key, - Value: attr.Value, - Index: attr.Index, - }) - } - - newEvent.Attributes = attributes - - cometEvents = append(cometEvents, newEvent) - } - - return cometEvents -} - -// ConvertTxResults converts a slice of the ResponseDeliverTx type imported from our forked CometBFT repo -// into a slice of our generalized TxResult type, so that we can properly handle the breaking changes introduced -// in CometBFT v0.38.0. -func ConvertTxResults(results []*legacyabci.ResponseDeliverTx) []*TxResult { - var res []*TxResult - - for _, r := range results { - newResult := &TxResult{ - Code: r.Code, - Events: ConvertEvents(r.Events), - } - - res = append(res, newResult) - } - - return res -} diff --git a/relayer/chains/cosmos/account.go b/relayer/chains/cosmos/account.go index a3b656352..311939589 100644 --- a/relayer/chains/cosmos/account.go +++ b/relayer/chains/cosmos/account.go @@ -25,7 +25,7 @@ func (cc *CosmosProvider) GetAccount(clientCtx client.Context, addr sdk.AccAddre // GetAccountWithHeight queries for an account given an address. Returns the // height of the query with the account. An error is returned if the query // or decoding fails. -func (cc *CosmosProvider) GetAccountWithHeight(clientCtx client.Context, addr sdk.AccAddress) (client.Account, int64, error) { +func (cc *CosmosProvider) GetAccountWithHeight(_ client.Context, addr sdk.AccAddress) (client.Account, int64, error) { var header metadata.MD address, err := cc.EncodeBech32AccAddr(addr) if err != nil { diff --git a/relayer/chains/cosmos/cosmos_chain_processor.go b/relayer/chains/cosmos/cosmos_chain_processor.go index f59bd6492..6bbdb136a 100644 --- a/relayer/chains/cosmos/cosmos_chain_processor.go +++ b/relayer/chains/cosmos/cosmos_chain_processor.go @@ -13,11 +13,11 @@ import ( conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" + "github.com/cosmos/relayer/v2/relayer/chains" "github.com/cosmos/relayer/v2/relayer/processor" "github.com/cosmos/relayer/v2/relayer/provider" - - ctypes "github.com/cometbft/cometbft/rpc/core/types" - "github.com/cosmos/relayer/v2/relayer/chains" + "github.com/strangelove-ventures/cometbft-client/client" + coretypes "github.com/strangelove-ventures/cometbft-client/rpc/core/types" "go.uber.org/zap" "golang.org/x/sync/errgroup" ) @@ -150,7 +150,7 @@ func (ccp *CosmosChainProcessor) latestHeightWithRetry(ctx context.Context) (lat // nodeStatusWithRetry will query for the latest node status, retrying in case of failure. // It will delay by latestHeightQueryRetryDelay between attempts, up to latestHeightQueryRetries. -func (ccp *CosmosChainProcessor) nodeStatusWithRetry(ctx context.Context) (status *ctypes.ResultStatus, err error) { +func (ccp *CosmosChainProcessor) nodeStatusWithRetry(ctx context.Context) (status *coretypes.ResultStatus, err error) { return status, retry.Do(func() error { latestHeightQueryCtx, cancelLatestHeightQueryCtx := context.WithTimeout(ctx, queryTimeout) defer cancelLatestHeightQueryCtx() @@ -241,7 +241,6 @@ func (ccp *CosmosChainProcessor) Run(ctx context.Context, initialBlockHistory ui continue } persistence.latestHeight = status.SyncInfo.LatestBlockHeight - ccp.chainProvider.setCometVersion(ccp.log, status.NodeInfo.Version) break } @@ -349,7 +348,6 @@ func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *qu } persistence.latestHeight = status.SyncInfo.LatestBlockHeight - ccp.chainProvider.setCometVersion(ccp.log, status.NodeInfo.Version) // This debug log is very noisy, but is helpful when debugging new chains. // ccp.log.Debug("Queried latest height", @@ -389,26 +387,35 @@ func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *qu chainID := ccp.chainProvider.ChainId() for i := persistence.latestQueriedBlock + 1; i <= persistence.latestHeight; i++ { - var eg errgroup.Group - var blockRes *chains.Results - var ibcHeader provider.IBCHeader + var ( + eg errgroup.Group + blockRes *client.BlockResponse + ibcHeader provider.IBCHeader + ) + sI := i + eg.Go(func() (err error) { queryCtx, cancelQueryCtx := context.WithTimeout(ctx, blockResultsQueryTimeout) defer cancelQueryCtx() - blockRes, err = ccp.chainProvider.BlockResults(queryCtx, &sI) + + blockRes, err = ccp.chainProvider.RPCClient.Client.BlockResults(queryCtx, &sI) if err != nil && ccp.metrics != nil { ccp.metrics.IncBlockQueryFailure(chainID, "RPC Client") } + return err }) + eg.Go(func() (err error) { queryCtx, cancelQueryCtx := context.WithTimeout(ctx, queryTimeout) defer cancelQueryCtx() + ibcHeader, err = ccp.chainProvider.QueryIBCHeader(queryCtx, sI) if err != nil && ccp.metrics != nil { ccp.metrics.IncBlockQueryFailure(chainID, "IBC Header") } + return err }) @@ -451,23 +458,19 @@ func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *qu ibcHeaderCache[heightUint64] = latestHeader ppChanged = true - base64Encoded := ccp.chainProvider.cometLegacyEncoding + messages := chains.ParseIBCMessagesFromEvents(ccp.log, chainID, heightUint64, blockRes.Events) - blockMsgs := ccp.ibcMessagesFromBlockEvents( - blockRes.Events, - heightUint64, - base64Encoded, - ) - for _, m := range blockMsgs { + for _, m := range messages { ccp.handleMessage(ctx, m, ibcMessagesCache) } - for _, tx := range blockRes.TxsResults { + for _, tx := range blockRes.TxResponses { if tx.Code != 0 { // tx was not successful continue } - messages := chains.IbcMessagesFromEvents(ccp.log, tx.Events, chainID, heightUint64, base64Encoded) + + messages := chains.ParseIBCMessagesFromEvents(ccp.log, chainID, heightUint64, tx.Events) for _, m := range messages { ccp.handleMessage(ctx, m, ibcMessagesCache) diff --git a/relayer/chains/cosmos/event_parser.go b/relayer/chains/cosmos/event_parser.go index 5b5d60a95..2a7d2167f 100644 --- a/relayer/chains/cosmos/event_parser.go +++ b/relayer/chains/cosmos/event_parser.go @@ -1,15 +1,15 @@ package cosmos -import ( - abci "github.com/cometbft/cometbft/abci/types" - "github.com/cosmos/relayer/v2/relayer/chains" -) +//import ( +// abci "github.com/cometbft/cometbft/abci/types" +// "github.com/cosmos/relayer/v2/relayer/chains" +//) -func (ccp *CosmosChainProcessor) ibcMessagesFromBlockEvents( - events []abci.Event, - height uint64, base64Encoded bool, -) (res []chains.IbcMessage) { - chainID := ccp.chainProvider.ChainId() - res = append(res, chains.IbcMessagesFromEvents(ccp.log, events, chainID, height, base64Encoded)...) - return res -} +//func (ccp *CosmosChainProcessor) ibcMessagesFromBlockEvents( +// events []abci.Event, +// height uint64, base64Encoded bool, +//) (res []chains.IbcMessage) { +// chainID := ccp.chainProvider.ChainId() +// res = append(res, chains.IbcMessagesFromEvents(ccp.log, events, chainID, height, base64Encoded)...) +// return res +//} diff --git a/relayer/chains/cosmos/grpc_query.go b/relayer/chains/cosmos/grpc_query.go index 0f083adb5..ded348dc8 100644 --- a/relayer/chains/cosmos/grpc_query.go +++ b/relayer/chains/cosmos/grpc_query.go @@ -10,6 +10,7 @@ import ( sdkerrors "cosmossdk.io/errors" abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/proto/tendermint/crypto" "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" legacyerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -136,13 +137,36 @@ func (cc *CosmosProvider) RunGRPCQuery(ctx context.Context, method string, req i return abci.ResponseQuery{}, nil, err } + proofOps := &crypto.ProofOps{} + + if abciRes.ProofOps != nil { + for _, op := range abciRes.ProofOps.Ops { + proofOps.Ops = append(proofOps.Ops, crypto.ProofOp{ + Type: op.Type, + Key: op.Key, + Data: op.Data, + }) + } + } + // Create header metadata. For now the headers contain: // - block height // We then parse all the call options, if the call option is a // HeaderCallOption, then we manually set the value of that header to the // metadata. md = metadata.Pairs(grpctypes.GRPCBlockHeightHeader, strconv.FormatInt(abciRes.Height, 10)) - return abciRes, md, nil + + return abci.ResponseQuery{ + Code: abciRes.Code, + Log: abciRes.Log, + Info: abciRes.Info, + Index: abciRes.Index, + Key: abciRes.Key, + Value: abciRes.Value, + ProofOps: proofOps, + Height: abciRes.Height, + Codespace: abciRes.Codespace, + }, md, nil } // TxServiceBroadcast is a helper function to broadcast a Tx with the correct gRPC types diff --git a/relayer/chains/cosmos/provider.go b/relayer/chains/cosmos/provider.go index 82ea7b98a..a967aa785 100644 --- a/relayer/chains/cosmos/provider.go +++ b/relayer/chains/cosmos/provider.go @@ -9,10 +9,8 @@ import ( "sync" "time" - abci "github.com/cometbft/cometbft/abci/types" provtypes "github.com/cometbft/cometbft/light/provider" prov "github.com/cometbft/cometbft/light/provider/http" - rpcclient "github.com/cometbft/cometbft/rpc/client" rpchttp "github.com/cometbft/cometbft/rpc/client/http" libclient "github.com/cometbft/cometbft/rpc/jsonrpc/client" "github.com/cosmos/cosmos-sdk/crypto/keyring" @@ -20,15 +18,12 @@ import ( "github.com/cosmos/cosmos-sdk/types/module" "github.com/cosmos/gogoproto/proto" commitmenttypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" - "github.com/cosmos/relayer/v2/relayer/chains" + cwrapper "github.com/cosmos/relayer/v2/client" "github.com/cosmos/relayer/v2/relayer/codecs/ethermint" "github.com/cosmos/relayer/v2/relayer/processor" "github.com/cosmos/relayer/v2/relayer/provider" - legacyclient "github.com/strangelove-ventures/cometbft/rpc/client" - legacyhttp "github.com/strangelove-ventures/cometbft/rpc/client/http" - legacyjson "github.com/strangelove-ventures/cometbft/rpc/jsonrpc/client" + "github.com/strangelove-ventures/cometbft-client/client" "go.uber.org/zap" - "golang.org/x/mod/semver" ) var ( @@ -129,15 +124,14 @@ func (pc CosmosProviderConfig) NewProvider(log *zap.Logger, homepath string, deb type CosmosProvider struct { log *zap.Logger - PCfg CosmosProviderConfig - Keybase keyring.Keyring - KeyringOptions []keyring.Option - RPCClient rpcclient.Client - LegacyRPCClient legacyclient.Client - LightProvider provtypes.Provider - Input io.Reader - Output io.Writer - Cdc Codec + PCfg CosmosProviderConfig + Keybase keyring.Keyring + KeyringOptions []keyring.Option + RPCClient cwrapper.RPCClient + LightProvider provtypes.Provider + Input io.Reader + Output io.Writer + Cdc Codec // TODO: GRPC Client type? //nextAccountSeq uint64 @@ -285,7 +279,14 @@ func (cc *CosmosProvider) SetRpcAddr(rpcAddr string) error { // Once initialization is complete an attempt to query the underlying node's tendermint version is performed. // NOTE: Init must be called after creating a new instance of CosmosProvider. func (cc *CosmosProvider) Init(ctx context.Context) error { - keybase, err := keyring.New(cc.PCfg.ChainID, cc.PCfg.KeyringBackend, cc.PCfg.KeyDirectory, cc.Input, cc.Cdc.Marshaler, cc.KeyringOptions...) + keybase, err := keyring.New( + cc.PCfg.ChainID, + cc.PCfg.KeyringBackend, + cc.PCfg.KeyDirectory, + cc.Input, + cc.Cdc.Marshaler, + cc.KeyringOptions..., + ) if err != nil { return err } @@ -296,7 +297,7 @@ func (cc *CosmosProvider) Init(ctx context.Context) error { return err } - rpcClient, err := NewRPCClient(cc.PCfg.RPCAddr, timeout) + c, err := client.NewClient(cc.PCfg.RPCAddr, timeout) if err != nil { return err } @@ -306,24 +307,12 @@ func (cc *CosmosProvider) Init(ctx context.Context) error { return err } - legacyRPCClient, err := NewLegacyRPCClient(cc.PCfg.RPCAddr, timeout) - if err != nil { - return err - } + rpcClient := cwrapper.RPCClient{Client: c} cc.RPCClient = rpcClient - cc.LegacyRPCClient = legacyRPCClient cc.LightProvider = lightprovider cc.Keybase = keybase - status, err := cc.QueryStatus(ctx) - if err != nil { - // Operations can occur before the node URL is added to the config, so noop here. - return nil - } - - cc.setCometVersion(cc.log, status.NodeInfo.Version) - return nil } @@ -373,19 +362,6 @@ func (cc *CosmosProvider) updateNextAccountSequence(sequenceGuard *WalletState, } } -func (cc *CosmosProvider) setCometVersion(log *zap.Logger, version string) { - cc.cometLegacyEncoding = cc.legacyEncodedEvents(log, version) - cc.cometLegacyBlockResults = cc.legacyBlockResults(version) -} - -func (cc *CosmosProvider) legacyEncodedEvents(log *zap.Logger, version string) bool { - return semver.Compare("v"+version, cometEncodingThreshold) < 0 -} - -func (cc *CosmosProvider) legacyBlockResults(version string) bool { - return semver.Compare("v"+version, cometBlockResultsThreshold) < 0 -} - // keysDir returns a string representing the path on the local filesystem where the keystore will be initialized. func keysDir(home, chainID string) string { return path.Join(home, "keys", chainID) @@ -404,60 +380,3 @@ func NewRPCClient(addr string, timeout time.Duration) (*rpchttp.HTTP, error) { } return rpcClient, nil } - -// NewLegacyRPCClient initializes a new CometBFT RPC client, from our forked repo, connected to the specified address. -func NewLegacyRPCClient(addr string, timeout time.Duration) (*legacyhttp.HTTP, error) { - httpClient, err := legacyjson.DefaultHTTPClient(addr) - if err != nil { - return nil, err - } - httpClient.Timeout = timeout - rpcClient, err := legacyhttp.NewWithClient(addr, "/websocket", httpClient) - if err != nil { - return nil, err - } - return rpcClient, nil -} - -// BlockResults uses the appropriate CometBFT RPC client to fetch the block results at a specific height, -// it then parses the tx results and block events into our generalized types. -func (cc *CosmosProvider) BlockResults(ctx context.Context, height *int64) (*chains.Results, error) { - var results *chains.Results - - switch { - case cc.cometLegacyBlockResults: - legacyRes, err := cc.LegacyRPCClient.BlockResults(ctx, height) - if err != nil { - return nil, err - } - - var events []abci.Event - events = append(events, chains.ConvertEvents(legacyRes.BeginBlockEvents)...) - events = append(events, chains.ConvertEvents(legacyRes.EndBlockEvents)...) - - results = &chains.Results{ - TxsResults: chains.ConvertTxResults(legacyRes.TxsResults), - Events: events, - } - default: - res, err := cc.RPCClient.BlockResults(ctx, height) - if err != nil { - return nil, err - } - - var txRes []*chains.TxResult - for _, tx := range res.TxsResults { - txRes = append(txRes, &chains.TxResult{ - Code: tx.Code, - Events: tx.Events, - }) - } - - results = &chains.Results{ - TxsResults: txRes, - Events: res.FinalizeBlockEvents, - } - } - - return results, nil -} diff --git a/relayer/chains/cosmos/query.go b/relayer/chains/cosmos/query.go index ce14cad0d..0613e8f2e 100644 --- a/relayer/chains/cosmos/query.go +++ b/relayer/chains/cosmos/query.go @@ -4,6 +4,7 @@ import ( "context" "encoding/binary" "encoding/hex" + "encoding/json" "errors" "fmt" "strconv" @@ -15,7 +16,6 @@ import ( "cosmossdk.io/x/feegrant" upgradetypes "cosmossdk.io/x/upgrade/types" abci "github.com/cometbft/cometbft/abci/types" - coretypes "github.com/cometbft/cometbft/rpc/core/types" tmtypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" @@ -32,8 +32,11 @@ import ( host "github.com/cosmos/ibc-go/v8/modules/core/24-host" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" tmclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + ics23 "github.com/cosmos/ics23/go" "github.com/cosmos/relayer/v2/relayer/chains" "github.com/cosmos/relayer/v2/relayer/provider" + abcitypes "github.com/strangelove-ventures/cometbft-client/abci/types" + coretypes "github.com/strangelove-ventures/cometbft-client/rpc/core/types" "go.uber.org/zap" "golang.org/x/sync/errgroup" "google.golang.org/grpc/metadata" @@ -44,7 +47,7 @@ const PaginationDelay = 10 * time.Millisecond var _ provider.QueryProvider = &CosmosProvider{} // queryIBCMessages returns an array of IBC messages given a tag -func (cc *CosmosProvider) queryIBCMessages(ctx context.Context, log *zap.Logger, page, limit int, query string, base64Encoded bool) ([]chains.IbcMessage, error) { +func (cc *CosmosProvider) queryIBCMessages(ctx context.Context, log *zap.Logger, page, limit int, query string) ([]chains.IbcMessage, error) { if query == "" { return nil, errors.New("query string must be provided") } @@ -57,13 +60,16 @@ func (cc *CosmosProvider) queryIBCMessages(ctx context.Context, log *zap.Logger, return nil, errors.New("limit must greater than 0") } - var eg errgroup.Group chainID := cc.ChainId() - var ibcMsgs []chains.IbcMessage - var mu sync.Mutex + + var ( + eg errgroup.Group + ibcMsgs []chains.IbcMessage + mu sync.Mutex + ) eg.Go(func() error { - res, err := cc.RPCClient.BlockSearch(ctx, query, &page, &limit, "") + res, err := cc.RPCClient.Client.BlockSearch(ctx, query, &page, &limit, "") if err != nil { return err } @@ -73,14 +79,14 @@ func (cc *CosmosProvider) queryIBCMessages(ctx context.Context, log *zap.Logger, for _, b := range res.Blocks { b := b nestedEg.Go(func() error { - block, err := cc.BlockResults(ctx, &b.Block.Height) + block, err := cc.RPCClient.Client.BlockResults(ctx, &b.Block.Height) if err != nil { return err } mu.Lock() defer mu.Unlock() - ibcMsgs = append(ibcMsgs, chains.IbcMessagesFromEvents(log, block.Events, chainID, 0, base64Encoded)...) + ibcMsgs = append(ibcMsgs, chains.ParseIBCMessagesFromEvents(log, chainID, 0, block.Events)...) return nil }) @@ -89,15 +95,15 @@ func (cc *CosmosProvider) queryIBCMessages(ctx context.Context, log *zap.Logger, }) eg.Go(func() error { - res, err := cc.RPCClient.TxSearch(ctx, query, true, &page, &limit, "") + res, err := cc.RPCClient.Client.TxSearch(ctx, query, true, &page, &limit, "") if err != nil { return err } mu.Lock() defer mu.Unlock() - for _, tx := range res.Txs { - ibcMsgs = append(ibcMsgs, chains.IbcMessagesFromEvents(log, tx.TxResult.Events, chainID, 0, base64Encoded)...) + for _, tx := range res { + ibcMsgs = append(ibcMsgs, chains.ParseIBCMessagesFromEvents(log, chainID, 0, tx.ExecTx.Events)...) } return nil @@ -117,18 +123,18 @@ func (cc *CosmosProvider) QueryTx(ctx context.Context, hashHex string) (*provide return nil, err } - resp, err := cc.RPCClient.Tx(ctx, hash, true) + resp, err := cc.RPCClient.Client.Tx(ctx, hash, true) if err != nil { return nil, err } - events := parseEventsFromResponseDeliverTx(resp.TxResult) + events := parseEventsFromResponseDeliverTx(resp.ExecTx.Events) return &provider.RelayerTxResponse{ Height: resp.Height, TxHash: string(hash), - Code: resp.TxResult.Code, - Data: string(resp.TxResult.Data), + Code: resp.ExecTx.Code, + Data: string(resp.ExecTx.Data), Events: events, }, nil } @@ -147,7 +153,7 @@ func (cc *CosmosProvider) QueryTxs(ctx context.Context, page, limit int, events return nil, errors.New("limit must greater than 0") } - res, err := cc.RPCClient.TxSearch(ctx, strings.Join(events, " AND "), true, &page, &limit, "") + res, err := cc.RPCClient.Client.TxSearch(ctx, strings.Join(events, " AND "), true, &page, &limit, "") if err != nil { return nil, err } @@ -155,13 +161,13 @@ func (cc *CosmosProvider) QueryTxs(ctx context.Context, page, limit int, events // Currently, we only call QueryTxs() in two spots and in both of them we are expecting there to only be, // at most, one tx in the response. Because of this we don't want to initialize the slice with an initial size. var txResps []*provider.RelayerTxResponse - for _, tx := range res.Txs { - relayerEvents := parseEventsFromResponseDeliverTx(tx.TxResult) + for _, tx := range res { + relayerEvents := parseEventsFromResponseDeliverTx(tx.ExecTx.Events) txResps = append(txResps, &provider.RelayerTxResponse{ Height: tx.Height, TxHash: string(tx.Hash), - Code: tx.TxResult.Code, - Data: string(tx.TxResult.Data), + Code: tx.ExecTx.Code, + Data: string(tx.ExecTx.Data), Events: relayerEvents, }) } @@ -170,20 +176,22 @@ func (cc *CosmosProvider) QueryTxs(ctx context.Context, page, limit int, events // parseEventsFromResponseDeliverTx parses the events from a ResponseDeliverTx and builds a slice // of provider.RelayerEvent's. -func parseEventsFromResponseDeliverTx(resp abci.ExecTxResult) []provider.RelayerEvent { - var events []provider.RelayerEvent +func parseEventsFromResponseDeliverTx(events sdk.StringEvents) []provider.RelayerEvent { + var rlyEvents []provider.RelayerEvent - for _, event := range resp.Events { + for _, event := range events { attributes := make(map[string]string) for _, attribute := range event.Attributes { - attributes[string(attribute.Key)] = string(attribute.Value) + attributes[attribute.Key] = attribute.Value } - events = append(events, provider.RelayerEvent{ + + rlyEvents = append(rlyEvents, provider.RelayerEvent{ EventType: event.Type, Attributes: attributes, }) } - return events + + return rlyEvents } // QueryFeegrantsByGrantee returns all requested grants for the given grantee. @@ -397,7 +405,7 @@ func (cc *CosmosProvider) QueryTendermintProof(ctx context.Context, height int64 return nil, nil, clienttypes.Height{}, err } - merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + merkleProof, err := ConvertProofs(res.ProofOps) if err != nil { return nil, nil, clienttypes.Height{}, err } @@ -508,7 +516,7 @@ func (cc *CosmosProvider) QueryUpgradeProof(ctx context.Context, key []byte, hei return nil, clienttypes.Height{}, err } - merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + merkleProof, err := ConvertProofs(res.ProofOps) if err != nil { return nil, clienttypes.Height{}, err } @@ -529,6 +537,30 @@ func (cc *CosmosProvider) QueryUpgradeProof(ctx context.Context, key []byte, hei }, nil } +// ConvertProofs converts crypto.ProofOps into MerkleProof. +// This function is copied from ibc-go, so we can modify it to work with our CometBFT client wrapper types. +// see: https://github.com/cosmos/ibc-go/blob/04531d83bf51d949f4bf2d61e88e419d1620ea32/modules/core/23-commitment/types/utils.go#L12-L29 +func ConvertProofs(tmProof *abcitypes.ProofOps) (commitmenttypes.MerkleProof, error) { + if tmProof == nil { + return commitmenttypes.MerkleProof{}, sdkerrors.Wrapf(commitmenttypes.ErrInvalidMerkleProof, "tendermint proof is nil") + } + + // Unmarshal all proof ops to CommitmentProof + proofs := make([]*ics23.CommitmentProof, len(tmProof.Ops)) + for i, op := range tmProof.Ops { + var p ics23.CommitmentProof + err := p.Unmarshal(op.Data) + if err != nil || p.Proof == nil { + return commitmenttypes.MerkleProof{}, sdkerrors.Wrapf(commitmenttypes.ErrInvalidMerkleProof, "could not unmarshal proof op into CommitmentProof at index %d: %v", i, err) + } + proofs[i] = &p + } + + return commitmenttypes.MerkleProof{ + Proofs: proofs, + }, nil +} + // QueryUpgradedClient returns upgraded client info func (cc *CosmosProvider) QueryUpgradedClient(ctx context.Context, height int64) (*clienttypes.QueryClientStateResponse, error) { req := clienttypes.QueryUpgradedClientStateRequest{} @@ -600,10 +632,22 @@ func (cc *CosmosProvider) QueryConsensusState(ctx context.Context, height int64) return &tmclient.ConsensusState{}, 0, err } + // TODO: this may not work + valbz, err := json.Marshal(nextVals.Validators) + if err != nil { + return &tmclient.ConsensusState{}, 0, err + } + + var vals []*tmtypes.Validator + err = json.Unmarshal(valbz, &vals) + if err != nil { + return &tmclient.ConsensusState{}, 0, err + } + state := &tmclient.ConsensusState{ Timestamp: commit.Time, Root: commitmenttypes.NewMerkleRoot(commit.AppHash), - NextValidatorsHash: tmtypes.NewValidatorSet(nextVals.Validators).Hash(), + NextValidatorsHash: tmtypes.NewValidatorSet(vals).Hash(), } return state, height, nil @@ -1014,26 +1058,25 @@ func (cc *CosmosProvider) QuerySendPacket( srcPortID string, sequence uint64, ) (provider.PacketInfo, error) { - status, err := cc.QueryStatus(ctx) - if err != nil { - return provider.PacketInfo{}, err - } - q := sendPacketQuery(srcChanID, srcPortID, sequence) - ibcMsgs, err := cc.queryIBCMessages(ctx, cc.log, 1, 1000, q, cc.legacyEncodedEvents(zap.NewNop(), status.NodeInfo.Version)) + + ibcMsgs, err := cc.queryIBCMessages(ctx, cc.log, 1, 1000, q) if err != nil { return provider.PacketInfo{}, err } + for _, msg := range ibcMsgs { if msg.EventType != chantypes.EventTypeSendPacket { continue } + if pi, ok := msg.Info.(*chains.PacketInfo); ok { if pi.SourceChannel == srcChanID && pi.SourcePort == srcPortID && pi.Sequence == sequence { return provider.PacketInfo(*pi), nil } } } + return provider.PacketInfo{}, fmt.Errorf("no ibc messages found for send_packet query: %s", q) } @@ -1043,26 +1086,25 @@ func (cc *CosmosProvider) QueryRecvPacket( dstPortID string, sequence uint64, ) (provider.PacketInfo, error) { - status, err := cc.QueryStatus(ctx) - if err != nil { - return provider.PacketInfo{}, err - } - q := writeAcknowledgementQuery(dstChanID, dstPortID, sequence) - ibcMsgs, err := cc.queryIBCMessages(ctx, cc.log, 1, 1000, q, cc.legacyEncodedEvents(zap.NewNop(), status.NodeInfo.Version)) + + ibcMsgs, err := cc.queryIBCMessages(ctx, cc.log, 1, 1000, q) if err != nil { return provider.PacketInfo{}, err } + for _, msg := range ibcMsgs { if msg.EventType != chantypes.EventTypeWriteAck { continue } + if pi, ok := msg.Info.(*chains.PacketInfo); ok { if pi.DestChannel == dstChanID && pi.DestPort == dstPortID && pi.Sequence == sequence { return provider.PacketInfo(*pi), nil } } } + return provider.PacketInfo{}, fmt.Errorf("no ibc messages found for write_acknowledgement query: %s", q) } @@ -1195,7 +1237,7 @@ func (cc *CosmosProvider) QueryLatestHeight(ctx context.Context) (int64, error) // Query current node status func (cc *CosmosProvider) QueryStatus(ctx context.Context) (*coretypes.ResultStatus, error) { - status, err := cc.RPCClient.Status(ctx) + status, err := cc.RPCClient.Client.Status(ctx) if err != nil { return nil, fmt.Errorf("failed to query node status: %w", err) } diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index 115b24be9..ef8e7de64 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -18,9 +18,10 @@ import ( "cosmossdk.io/store/rootmulti" "github.com/avast/retry-go/v4" abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/crypto/merkle" "github.com/cometbft/cometbft/libs/bytes" "github.com/cometbft/cometbft/light" - rpcclient "github.com/cometbft/cometbft/rpc/client" + "github.com/cometbft/cometbft/proto/tendermint/crypto" coretypes "github.com/cometbft/cometbft/rpc/core/types" tmtypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/client" @@ -46,6 +47,10 @@ import ( strideicqtypes "github.com/cosmos/relayer/v2/relayer/chains/cosmos/stride" "github.com/cosmos/relayer/v2/relayer/ethermint" "github.com/cosmos/relayer/v2/relayer/provider" + abcitypes "github.com/strangelove-ventures/cometbft-client/abci/types" + client2 "github.com/strangelove-ventures/cometbft-client/client" + rpcclient "github.com/strangelove-ventures/cometbft-client/rpc/client" + ctypes "github.com/strangelove-ventures/cometbft-client/rpc/core/types" "go.uber.org/zap" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -200,8 +205,9 @@ func (cc *CosmosProvider) SubmitTxAwaitResponse(ctx context.Context, msgs []sdk. if err != nil { return nil, err } + fmt.Printf("TX result code: %d. Waiting for TX with hash %s\n", resp.Code, resp.Hash) - tx1resp, err := cc.AwaitTx(resp.Hash, 15*time.Second) + tx1resp, err := cc.AwaitTx(bytes.HexBytes(resp.Hash), 15*time.Second) if err != nil { return nil, err } @@ -242,7 +248,7 @@ func (cc *CosmosProvider) AwaitTx(txHash bytes.HexBytes, timeout time.Duration) // sent and executed successfully is returned. // // feegranterKey - key name of the address set as the feegranter, empty string will not feegrant -func (cc *CosmosProvider) SendMsgsWith(ctx context.Context, msgs []sdk.Msg, memo string, gas uint64, signingKey string, feegranterKey string) (*coretypes.ResultBroadcastTx, error) { +func (cc *CosmosProvider) SendMsgsWith(ctx context.Context, msgs []sdk.Msg, memo string, gas uint64, signingKey string, feegranterKey string) (*ctypes.ResultBroadcastTx, error) { sdkConfigMutex.Lock() sdkConf := sdk.GetConfig() sdkConf.SetBech32PrefixForAccount(cc.PCfg.AccountPrefix, cc.PCfg.AccountPrefix+"pub") @@ -318,7 +324,7 @@ func (cc *CosmosProvider) SendMsgsWith(ctx context.Context, msgs []sdk.Msg, memo return nil, err } - res, err := cc.RPCClient.BroadcastTxAsync(ctx, txBytes) + res, err := cc.RPCClient.Client.BroadcastTxAsync(ctx, txBytes) if res != nil { fmt.Printf("TX hash: %s\n", res.Hash) } @@ -471,7 +477,7 @@ func (cc *CosmosProvider) waitForBlockInclusion( return nil, fmt.Errorf("timed out after: %d; %w", waitTimeout, ErrTimeoutAfterWaitingForTxBroadcast) // This fixed poll is fine because it's only for logging and updating prometheus metrics currently. case <-time.After(time.Millisecond * 100): - res, err := cc.RPCClient.Tx(ctx, txHash, false) + res, err := cc.RPCClient.Client.Tx(ctx, txHash, false) if err == nil { return cc.mkTxResult(res) } @@ -485,17 +491,64 @@ func (cc *CosmosProvider) waitForBlockInclusion( } // mkTxResult decodes a comet transaction into an SDK TxResponse. -func (cc *CosmosProvider) mkTxResult(resTx *coretypes.ResultTx) (*sdk.TxResponse, error) { +func (cc *CosmosProvider) mkTxResult(resTx *client2.TxResponse) (*sdk.TxResponse, error) { txbz, err := cc.Cdc.TxConfig.TxDecoder()(resTx.Tx) if err != nil { return nil, err } + p, ok := txbz.(intoAny) if !ok { return nil, fmt.Errorf("expecting a type implementing intoAny, got: %T", txbz) } + + events := make([]abci.Event, len(resTx.ExecTx.Events)) + for i, event := range resTx.ExecTx.Events { + attributes := make([]abci.EventAttribute, len(event.Attributes)) + + for j, attr := range event.Attributes { + attributes[j] = abci.EventAttribute{ + Key: attr.Key, + Value: attr.Value, + Index: false, + } + } + + events[i] = abci.Event{ + Type: event.Type, + Attributes: attributes, + } + } + + res := &coretypes.ResultTx{ + Hash: bytes.HexBytes(resTx.Hash), + Height: resTx.Height, + Index: resTx.Index, + TxResult: abci.ExecTxResult{ + Code: resTx.ExecTx.Code, + Data: resTx.ExecTx.Data, + Log: resTx.ExecTx.Log, + Info: resTx.ExecTx.Info, + GasWanted: resTx.ExecTx.GasWanted, + GasUsed: resTx.ExecTx.GasUsed, + Events: events, + Codespace: resTx.ExecTx.Codespace, + }, + Tx: tmtypes.Tx(resTx.Tx), + Proof: tmtypes.TxProof{ + RootHash: bytes.HexBytes(resTx.Proof.RootHash), + Data: tmtypes.Tx(resTx.Proof.Data), + Proof: merkle.Proof{ + Total: resTx.Proof.Proof.Total, + Index: resTx.Proof.Proof.Total, + LeafHash: resTx.Proof.Proof.LeafHash, + Aunts: resTx.Proof.Proof.Aunts, + }, + }, + } + any := p.AsAny() - return sdk.NewResponseResultTx(resTx, any, ""), nil + return sdk.NewResponseResultTx(res, any, ""), nil } func parseEventsFromTxResponse(resp *sdk.TxResponse) []provider.RelayerEvent { @@ -1305,9 +1358,22 @@ func (cc *CosmosProvider) QueryICQWithProof(ctx context.Context, path string, re if err != nil { return provider.ICQProof{}, fmt.Errorf("failed to execute interchain query: %w", err) } + + proofOps := &crypto.ProofOps{} + + proofOps.Ops = make([]crypto.ProofOp, 0, len(res.ProofOps.Ops)) + + for i, op := range res.ProofOps.Ops { + proofOps.Ops[i] = crypto.ProofOp{ + Type: op.Type, + Key: op.Key, + Data: op.Data, + } + } + return provider.ICQProof{ Result: res.Value, - ProofOps: res.ProofOps, + ProofOps: proofOps, Height: res.Height, }, nil } @@ -1747,7 +1813,7 @@ func (cc *CosmosProvider) CalculateGas(ctx context.Context, txf tx.Factory, sign Data: txBytes, } - var res abci.ResponseQuery + var res abcitypes.ResponseQuery if err := retry.Do(func() error { var err error res, err = cc.QueryABCI(ctx, simQuery) @@ -1763,6 +1829,7 @@ func (cc *CosmosProvider) CalculateGas(ctx context.Context, txf tx.Factory, sign if err := simRes.Unmarshal(res.Value); err != nil { return txtypes.SimulateResponse{}, 0, err } + gas, err := cc.AdjustEstimatedGas(simRes.GasInfo.GasUsed) return simRes, gas, err } @@ -1792,18 +1859,19 @@ func (pc *CosmosProviderConfig) SignMode() signing.SignMode { } // QueryABCI performs an ABCI query and returns the appropriate response and error sdk error code. -func (cc *CosmosProvider) QueryABCI(ctx context.Context, req abci.RequestQuery) (abci.ResponseQuery, error) { +func (cc *CosmosProvider) QueryABCI(ctx context.Context, req abci.RequestQuery) (abcitypes.ResponseQuery, error) { opts := rpcclient.ABCIQueryOptions{ Height: req.Height, Prove: req.Prove, } - result, err := cc.RPCClient.ABCIQueryWithOptions(ctx, req.Path, req.Data, opts) + + result, err := cc.RPCClient.Client.ABCIQueryWithOptions(ctx, req.Path, req.Data, opts) if err != nil { - return abci.ResponseQuery{}, err + return abcitypes.ResponseQuery{}, err } if !result.Response.IsOK() { - return abci.ResponseQuery{}, sdkErrorToGRPCError(result.Response) + return abcitypes.ResponseQuery{}, sdkErrorToGRPCError(result.Response) } // data from trusted node or subspace query doesn't need verification @@ -1814,7 +1882,7 @@ func (cc *CosmosProvider) QueryABCI(ctx context.Context, req abci.RequestQuery) return result.Response, nil } -func sdkErrorToGRPCError(resp abci.ResponseQuery) error { +func sdkErrorToGRPCError(resp abcitypes.ResponseQuery) error { switch resp.Code { case legacyerrors.ErrInvalidRequest.ABCICode(): return status.Error(codes.InvalidArgument, resp.Log) diff --git a/relayer/chains/parsing.go b/relayer/chains/parsing.go index 45633be8f..d03419d16 100644 --- a/relayer/chains/parsing.go +++ b/relayer/chains/parsing.go @@ -66,7 +66,7 @@ func IbcMessagesFromEvents( } else { evt = sdk.StringifyEvent(event) } - m := parseIBCMessageFromEvent(log, evt, chainID, height) + m := ParseIBCMessageFromEvent(log, evt, chainID, height) if m == nil || m.Info == nil { // Not an IBC message, don't need to log here continue @@ -81,7 +81,22 @@ type messageInfo interface { ParseAttrs(log *zap.Logger, attrs []sdk.Attribute) } -func parseIBCMessageFromEvent( +func ParseIBCMessagesFromEvents(log *zap.Logger, chainID string, height uint64, events sdk.StringEvents) []IbcMessage { + var messages []IbcMessage + + for _, event := range events { + msg := ParseIBCMessageFromEvent(log, event, chainID, height) + if msg == nil { + continue + } + + messages = append(messages, *msg) + } + + return messages +} + +func ParseIBCMessageFromEvent( log *zap.Logger, event sdk.StringEvent, chainID string, diff --git a/relayer/chains/penumbra/grpc_query.go b/relayer/chains/penumbra/grpc_query.go index e18a397e0..d288650ad 100644 --- a/relayer/chains/penumbra/grpc_query.go +++ b/relayer/chains/penumbra/grpc_query.go @@ -8,7 +8,14 @@ import ( "sync" "time" + sdkerrors "cosmossdk.io/errors" abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/proto/tendermint/crypto" + "github.com/cosmos/cosmos-sdk/codec/types" + sdk "github.com/cosmos/cosmos-sdk/types" + legacyerrors "github.com/cosmos/cosmos-sdk/types/errors" + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + "github.com/cosmos/cosmos-sdk/types/tx" gogogrpc "github.com/cosmos/gogoproto/grpc" "github.com/cosmos/relayer/v2/relayer/provider" "google.golang.org/grpc" @@ -17,13 +24,6 @@ import ( "google.golang.org/grpc/encoding/proto" "google.golang.org/grpc/metadata" "google.golang.org/grpc/status" - - sdkerrors "cosmossdk.io/errors" - "github.com/cosmos/cosmos-sdk/codec/types" - sdk "github.com/cosmos/cosmos-sdk/types" - legacyerrors "github.com/cosmos/cosmos-sdk/types/errors" - grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" - "github.com/cosmos/cosmos-sdk/types/tx" ) var _ gogogrpc.ClientConn = &PenumbraProvider{} @@ -137,13 +137,36 @@ func (cc *PenumbraProvider) RunGRPCQuery(ctx context.Context, method string, req return abci.ResponseQuery{}, nil, err } + proofOps := &crypto.ProofOps{} + + if abciRes.ProofOps != nil { + for _, op := range abciRes.ProofOps.Ops { + proofOps.Ops = append(proofOps.Ops, crypto.ProofOp{ + Type: op.Type, + Key: op.Key, + Data: op.Data, + }) + } + } + // Create header metadata. For now the headers contain: // - block height // We then parse all the call options, if the call option is a // HeaderCallOption, then we manually set the value of that header to the // metadata. md = metadata.Pairs(grpctypes.GRPCBlockHeightHeader, strconv.FormatInt(abciRes.Height, 10)) - return abciRes, md, nil + + return abci.ResponseQuery{ + Code: abciRes.Code, + Log: abciRes.Log, + Info: abciRes.Info, + Index: abciRes.Index, + Key: abciRes.Key, + Value: abciRes.Value, + ProofOps: proofOps, + Height: abciRes.Height, + Codespace: abciRes.Codespace, + }, md, nil } // TxServiceBroadcast is a helper function to broadcast a Tx with the correct gRPC types diff --git a/relayer/chains/penumbra/penumbra_chain_processor.go b/relayer/chains/penumbra/penumbra_chain_processor.go index 56402312d..a12178900 100644 --- a/relayer/chains/penumbra/penumbra_chain_processor.go +++ b/relayer/chains/penumbra/penumbra_chain_processor.go @@ -11,10 +11,10 @@ import ( clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" + "github.com/cosmos/relayer/v2/relayer/chains" "github.com/cosmos/relayer/v2/relayer/processor" "github.com/cosmos/relayer/v2/relayer/provider" - - "github.com/cosmos/relayer/v2/relayer/chains" + "github.com/strangelove-ventures/cometbft-client/client" "go.uber.org/zap" "golang.org/x/sync/errgroup" ) @@ -325,19 +325,26 @@ func (pcp *PenumbraChainProcessor) queryCycle(ctx context.Context, persistence * chainID := pcp.chainProvider.ChainId() for i := persistence.latestQueriedBlock + 1; i <= persistence.latestHeight; i++ { - var eg errgroup.Group - var blockRes *chains.Results - var ibcHeader provider.IBCHeader + var ( + eg errgroup.Group + blockRes *client.BlockResponse + ibcHeader provider.IBCHeader + ) + i := i + eg.Go(func() (err error) { queryCtx, cancelQueryCtx := context.WithTimeout(ctx, blockResultsQueryTimeout) defer cancelQueryCtx() - blockRes, err = pcp.chainProvider.BlockResults(queryCtx, &i) + + blockRes, err = pcp.chainProvider.RPCClient.Client.BlockResults(queryCtx, &i) return err }) + eg.Go(func() (err error) { queryCtx, cancelQueryCtx := context.WithTimeout(ctx, queryTimeout) defer cancelQueryCtx() + ibcHeader, err = pcp.chainProvider.QueryIBCHeader(queryCtx, i) return err }) @@ -359,17 +366,18 @@ func (pcp *PenumbraChainProcessor) queryCycle(ctx context.Context, persistence * ibcHeaderCache[heightUint64] = latestHeader ppChanged = true - blockMsgs := pcp.ibcMessagesFromBlockEvents(blockRes.Events, heightUint64, pcp.chainProvider.cometLegacyEncoding) + blockMsgs := chains.ParseIBCMessagesFromEvents(pcp.log, chainID, heightUint64, blockRes.Events) + for _, m := range blockMsgs { pcp.handleMessage(m, ibcMessagesCache) } - for _, tx := range blockRes.TxsResults { + for _, tx := range blockRes.TxResponses { if tx.Code != 0 { // tx was not successful continue } - messages := chains.IbcMessagesFromEvents(pcp.log, tx.Events, chainID, heightUint64, pcp.chainProvider.cometLegacyEncoding) + messages := chains.ParseIBCMessagesFromEvents(pcp.log, chainID, heightUint64, tx.Events) for _, m := range messages { pcp.handleMessage(m, ibcMessagesCache) diff --git a/relayer/chains/penumbra/provider.go b/relayer/chains/penumbra/provider.go index 94de76884..0fffc37e2 100644 --- a/relayer/chains/penumbra/provider.go +++ b/relayer/chains/penumbra/provider.go @@ -8,10 +8,8 @@ import ( "path" "time" - abci "github.com/cometbft/cometbft/abci/types" provtypes "github.com/cometbft/cometbft/light/provider" prov "github.com/cometbft/cometbft/light/provider/http" - rpcclient "github.com/cometbft/cometbft/rpc/client" rpchttp "github.com/cometbft/cometbft/rpc/client/http" jsonrpcclient "github.com/cometbft/cometbft/rpc/jsonrpc/client" libclient "github.com/cometbft/cometbft/rpc/jsonrpc/client" @@ -23,14 +21,11 @@ import ( commitmenttypes "github.com/cosmos/ibc-go/v8/modules/core/23-commitment/types" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" tmclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" - "github.com/cosmos/relayer/v2/relayer/chains" + cwrapper "github.com/cosmos/relayer/v2/client" "github.com/cosmos/relayer/v2/relayer/codecs/ethermint" "github.com/cosmos/relayer/v2/relayer/provider" - legacyclient "github.com/strangelove-ventures/cometbft/rpc/client" - legacyhttp "github.com/strangelove-ventures/cometbft/rpc/client/http" - legacyjson "github.com/strangelove-ventures/cometbft/rpc/jsonrpc/client" + "github.com/strangelove-ventures/cometbft-client/client" "go.uber.org/zap" - "golang.org/x/mod/semver" ) var ( @@ -142,22 +137,15 @@ func (h PenumbraIBCHeader) NextValidatorsHash() []byte { type PenumbraProvider struct { log *zap.Logger - PCfg PenumbraProviderConfig - Keybase keyring.Keyring - KeyringOptions []keyring.Option - RPCClient rpcclient.Client - LegacyRPCClient legacyclient.Client - LightProvider provtypes.Provider - Input io.Reader - Output io.Writer - Codec Codec - RPCCaller jsonrpcclient.Caller - - // for comet < v0.37, decode tm events as base64 - cometLegacyEncoding bool - - // for comet < v0.38, use legacy RPC client for ResultsBlockResults - cometLegacyBlockResults bool + PCfg PenumbraProviderConfig + Keybase keyring.Keyring + KeyringOptions []keyring.Option + RPCClient cwrapper.RPCClient + LightProvider provtypes.Provider + Input io.Reader + Output io.Writer + Codec Codec + RPCCaller jsonrpcclient.Caller } func (cc *PenumbraProvider) ProviderConfig() provider.ProviderConfig { @@ -261,34 +249,20 @@ func (cc *PenumbraProvider) Init(ctx context.Context) error { return err } - rpcClient, err := newRPCClient(cc.PCfg.RPCAddr, timeout) - if err != nil { - return err - } - lightprovider, err := prov.New(cc.PCfg.ChainID, cc.PCfg.RPCAddr) if err != nil { return err } - legacyRPCClient, err := NewLegacyRPCClient(cc.PCfg.RPCAddr, timeout) + c, err := client.NewClient(cc.PCfg.RPCAddr, timeout) if err != nil { return err } - cc.LegacyRPCClient = legacyRPCClient - cc.RPCClient = rpcClient + cc.RPCClient = cwrapper.RPCClient{Client: c} cc.LightProvider = lightprovider cc.Keybase = keybase - status, err := cc.QueryStatus(ctx) - if err != nil { - // Operations can occur before the node URL is added to the config, so noop here. - return nil - } - - cc.setCometVersion(cc.log, status.NodeInfo.Version) - return nil } @@ -341,19 +315,6 @@ func toPenumbraPacket(pi provider.PacketInfo) chantypes.Packet { } } -func (cc *PenumbraProvider) setCometVersion(log *zap.Logger, version string) { - cc.cometLegacyEncoding = cc.legacyEncodedEvents(log, version) - cc.cometLegacyBlockResults = cc.legacyBlockResults(version) -} - -func (cc *PenumbraProvider) legacyEncodedEvents(log *zap.Logger, version string) bool { - return semver.Compare("v"+version, cometEncodingThreshold) < 0 -} - -func (cc *PenumbraProvider) legacyBlockResults(version string) bool { - return semver.Compare("v"+version, cometBlockResultsThreshold) < 0 -} - // keysDir returns a string representing the path on the local filesystem where the keystore will be initialized. func keysDir(home, chainID string) string { return path.Join(home, "keys", chainID) @@ -372,60 +333,3 @@ func newRPCClient(addr string, timeout time.Duration) (*rpchttp.HTTP, error) { } return rpcClient, nil } - -// NewLegacyRPCClient initializes a new CometBFT RPC client, from our forked repo, connected to the specified address. -func NewLegacyRPCClient(addr string, timeout time.Duration) (*legacyhttp.HTTP, error) { - httpClient, err := legacyjson.DefaultHTTPClient(addr) - if err != nil { - return nil, err - } - httpClient.Timeout = timeout - rpcClient, err := legacyhttp.NewWithClient(addr, "/websocket", httpClient) - if err != nil { - return nil, err - } - return rpcClient, nil -} - -// BlockResults uses the appropriate CometBFT RPC client to fetch the block results at a specific height, -// it then parses the tx results and block events into our generalized types. -func (cc *PenumbraProvider) BlockResults(ctx context.Context, height *int64) (*chains.Results, error) { - var results *chains.Results - - switch { - case cc.cometLegacyBlockResults: - legacyRes, err := cc.LegacyRPCClient.BlockResults(ctx, height) - if err != nil { - return nil, err - } - - var events []abci.Event - events = append(events, chains.ConvertEvents(legacyRes.BeginBlockEvents)...) - events = append(events, chains.ConvertEvents(legacyRes.EndBlockEvents)...) - - results = &chains.Results{ - TxsResults: chains.ConvertTxResults(legacyRes.TxsResults), - Events: events, - } - default: - res, err := cc.RPCClient.BlockResults(ctx, height) - if err != nil { - return nil, err - } - - var txRes []*chains.TxResult - for _, tx := range res.TxsResults { - txRes = append(txRes, &chains.TxResult{ - Code: tx.Code, - Events: tx.Events, - }) - } - - results = &chains.Results{ - TxsResults: txRes, - Events: res.FinalizeBlockEvents, - } - } - - return results, nil -} diff --git a/relayer/chains/penumbra/query.go b/relayer/chains/penumbra/query.go index 85098e800..8f3222e14 100644 --- a/relayer/chains/penumbra/query.go +++ b/relayer/chains/penumbra/query.go @@ -27,8 +27,10 @@ import ( host "github.com/cosmos/ibc-go/v8/modules/core/24-host" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" tmclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" + ics23 "github.com/cosmos/ics23/go" "github.com/cosmos/relayer/v2/relayer/chains" "github.com/cosmos/relayer/v2/relayer/provider" + abcitypes "github.com/strangelove-ventures/cometbft-client/abci/types" "go.uber.org/zap" "golang.org/x/sync/errgroup" ) @@ -42,18 +44,18 @@ func (cc *PenumbraProvider) QueryTx(ctx context.Context, hashHex string) (*provi return nil, err } - resp, err := cc.RPCClient.Tx(ctx, hash, true) + resp, err := cc.RPCClient.Client.Tx(ctx, hash, true) if err != nil { return nil, err } - events := parseEventsFromResponseDeliverTx(resp.TxResult) + events := parseEventsFromResponseDeliverTx(resp.ExecTx.Events) return &provider.RelayerTxResponse{ Height: resp.Height, TxHash: string(hash), - Code: resp.TxResult.Code, - Data: string(resp.TxResult.Data), + Code: resp.ExecTx.Code, + Data: string(resp.ExecTx.Data), Events: events, }, nil } @@ -72,7 +74,7 @@ func (cc *PenumbraProvider) QueryTxs(ctx context.Context, page, limit int, event return nil, errors.New("limit must greater than 0") } - res, err := cc.RPCClient.TxSearch(ctx, strings.Join(events, " AND "), true, &page, &limit, "") + res, err := cc.RPCClient.Client.TxSearch(ctx, strings.Join(events, " AND "), true, &page, &limit, "") if err != nil { return nil, err } @@ -80,13 +82,13 @@ func (cc *PenumbraProvider) QueryTxs(ctx context.Context, page, limit int, event // Currently, we only call QueryTxs() in two spots and in both of them we are expecting there to only be, // at most, one tx in the response. Because of this we don't want to initialize the slice with an initial size. var txResps []*provider.RelayerTxResponse - for _, tx := range res.Txs { - relayerEvents := parseEventsFromResponseDeliverTx(tx.TxResult) + for _, tx := range res { + relayerEvents := parseEventsFromResponseDeliverTx(tx.ExecTx.Events) txResps = append(txResps, &provider.RelayerTxResponse{ Height: tx.Height, TxHash: string(tx.Hash), - Code: tx.TxResult.Code, - Data: string(tx.TxResult.Data), + Code: tx.ExecTx.Code, + Data: string(tx.ExecTx.Data), Events: relayerEvents, }) } @@ -95,14 +97,15 @@ func (cc *PenumbraProvider) QueryTxs(ctx context.Context, page, limit int, event // parseEventsFromResponseDeliverTx parses the events from a ResponseDeliverTx and builds a slice // of provider.RelayerEvent's. -func parseEventsFromResponseDeliverTx(resp abci.ExecTxResult) []provider.RelayerEvent { +func parseEventsFromResponseDeliverTx(resp sdk.StringEvents) []provider.RelayerEvent { var events []provider.RelayerEvent - for _, event := range resp.Events { + for _, event := range resp { attributes := make(map[string]string) for _, attribute := range event.Attributes { - attributes[string(attribute.Key)] = string(attribute.Value) + attributes[attribute.Key] = attribute.Value } + events = append(events, provider.RelayerEvent{ EventType: event.Type, Attributes: attributes, @@ -189,7 +192,7 @@ func (cc *PenumbraProvider) QueryTendermintProof(ctx context.Context, height int return nil, nil, clienttypes.Height{}, err } - merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + merkleProof, err := ConvertProofs(res.ProofOps) if err != nil { return nil, nil, clienttypes.Height{}, err } @@ -205,6 +208,30 @@ func (cc *PenumbraProvider) QueryTendermintProof(ctx context.Context, height int return res.Value, proofBz, clienttypes.NewHeight(revision, uint64(res.Height)+1), nil } +// ConvertProofs converts crypto.ProofOps into MerkleProof. +// This function is copied from ibc-go, so we can modify it to work with our CometBFT client wrapper types. +// see: https://github.com/cosmos/ibc-go/blob/04531d83bf51d949f4bf2d61e88e419d1620ea32/modules/core/23-commitment/types/utils.go#L12-L29 +func ConvertProofs(tmProof *abcitypes.ProofOps) (commitmenttypes.MerkleProof, error) { + if tmProof == nil { + return commitmenttypes.MerkleProof{}, sdkerrors.Wrapf(commitmenttypes.ErrInvalidMerkleProof, "tendermint proof is nil") + } + + // Unmarshal all proof ops to CommitmentProof + proofs := make([]*ics23.CommitmentProof, len(tmProof.Ops)) + for i, op := range tmProof.Ops { + var p ics23.CommitmentProof + err := p.Unmarshal(op.Data) + if err != nil || p.Proof == nil { + return commitmenttypes.MerkleProof{}, sdkerrors.Wrapf(commitmenttypes.ErrInvalidMerkleProof, "could not unmarshal proof op into CommitmentProof at index %d: %v", i, err) + } + proofs[i] = &p + } + + return commitmenttypes.MerkleProof{ + Proofs: proofs, + }, nil +} + // QueryClientStateResponse retrieves the latest consensus state for a client in state at a given height func (cc *PenumbraProvider) QueryClientStateResponse(ctx context.Context, height int64, srcClientId string) (*clienttypes.QueryClientStateResponse, error) { key := host.FullClientStateKey(srcClientId) @@ -301,7 +328,7 @@ func (cc *PenumbraProvider) QueryUpgradeProof(ctx context.Context, key []byte, h return nil, clienttypes.Height{}, err } - merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) + merkleProof, err := ConvertProofs(res.ProofOps) if err != nil { return nil, clienttypes.Height{}, err } @@ -917,14 +944,15 @@ func (cc *PenumbraProvider) queryIBCMessages(ctx context.Context, log *zap.Logge return nil, errors.New("limit must greater than 0") } - res, err := cc.RPCClient.TxSearch(ctx, query, true, &page, &limit, "") + res, err := cc.RPCClient.Client.TxSearch(ctx, query, true, &page, &limit, "") if err != nil { return nil, err } + var ibcMsgs []chains.IbcMessage chainID := cc.ChainId() - for _, tx := range res.Txs { - ibcMsgs = append(ibcMsgs, chains.IbcMessagesFromEvents(log, tx.TxResult.Events, chainID, 0, cc.cometLegacyEncoding)...) + for _, tx := range res { + ibcMsgs = append(ibcMsgs, chains.ParseIBCMessagesFromEvents(log, chainID, 0, tx.ExecTx.Events)...) } return ibcMsgs, nil diff --git a/relayer/chains/penumbra/tx.go b/relayer/chains/penumbra/tx.go index a30da8310..91ee699ba 100644 --- a/relayer/chains/penumbra/tx.go +++ b/relayer/chains/penumbra/tx.go @@ -13,10 +13,10 @@ import ( "cosmossdk.io/store/rootmulti" "github.com/avast/retry-go/v4" abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/crypto/merkle" "github.com/cometbft/cometbft/libs/bytes" "github.com/cometbft/cometbft/light" tmcrypto "github.com/cometbft/cometbft/proto/tendermint/crypto" - rpcclient "github.com/cometbft/cometbft/rpc/client" coretypes "github.com/cometbft/cometbft/rpc/core/types" tmtypes "github.com/cometbft/cometbft/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -39,6 +39,9 @@ import ( penumbratypes "github.com/cosmos/relayer/v2/relayer/chains/penumbra/core/transaction/v1alpha1" penumbracrypto "github.com/cosmos/relayer/v2/relayer/chains/penumbra/crypto/tct/v1alpha1" "github.com/cosmos/relayer/v2/relayer/provider" + abcitypes "github.com/strangelove-ventures/cometbft-client/abci/types" + client2 "github.com/strangelove-ventures/cometbft-client/client" + rpcclient "github.com/strangelove-ventures/cometbft-client/rpc/client" "go.uber.org/zap" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -280,7 +283,7 @@ func (cc *PenumbraProvider) getAnchor(ctx context.Context) (*penumbracrypto.Merk return &penumbracrypto.MerkleRoot{Inner: res.Value[2:]}, nil } -func parseEventsFromABCIResponse(resp abci.ExecTxResult) []provider.RelayerEvent { +func parseEventsFromABCIResponse(resp client2.ExecTxResponse) []provider.RelayerEvent { events := make([]provider.RelayerEvent, len(resp.Events)) for _, event := range resp.Events { @@ -365,7 +368,7 @@ func (cc *PenumbraProvider) SendMessages(ctx context.Context, msgs []provider.Re ctx, cancel := context.WithTimeout(ctx, 40*time.Second) defer cancel() - res, err := cc.RPCClient.Tx(ctx, syncRes.Hash, false) + res, err := cc.RPCClient.Client.Tx(ctx, syncRes.Hash, false) if err != nil { return err } @@ -373,9 +376,9 @@ func (cc *PenumbraProvider) SendMessages(ctx context.Context, msgs []provider.Re height = res.Height txhash = syncRes.Hash.String() - code = res.TxResult.Code + code = res.ExecTx.Code - events = append(events, parseEventsFromABCIResponse(res.TxResult)...) + events = append(events, parseEventsFromABCIResponse(res.ExecTx)...) return nil }, retry.Context(ctx), rtyAtt, rtyDel, rtyErr, retry.OnRetry(func(n uint, err error) { cc.log.Info( @@ -2066,18 +2069,19 @@ func (cc *PenumbraProvider) QueryIBCHeader(ctx context.Context, h int64) (provid } // QueryABCI performs an ABCI query and returns the appropriate response and error sdk error code. -func (cc *PenumbraProvider) QueryABCI(ctx context.Context, req abci.RequestQuery) (abci.ResponseQuery, error) { +func (cc *PenumbraProvider) QueryABCI(ctx context.Context, req abci.RequestQuery) (abcitypes.ResponseQuery, error) { opts := rpcclient.ABCIQueryOptions{ Height: req.Height, Prove: req.Prove, } - result, err := cc.RPCClient.ABCIQueryWithOptions(ctx, req.Path, req.Data, opts) + + result, err := cc.RPCClient.Client.ABCIQueryWithOptions(ctx, req.Path, req.Data, opts) if err != nil { - return abci.ResponseQuery{}, err + return abcitypes.ResponseQuery{}, err } if !result.Response.IsOK() { - return abci.ResponseQuery{}, sdkErrorToGRPCError(result.Response) + return abcitypes.ResponseQuery{}, sdkErrorToGRPCError(result.Response) } // data from trusted node or subspace query doesn't need verification @@ -2088,7 +2092,7 @@ func (cc *PenumbraProvider) QueryABCI(ctx context.Context, req abci.RequestQuery return result.Response, nil } -func sdkErrorToGRPCError(resp abci.ResponseQuery) error { +func sdkErrorToGRPCError(resp abcitypes.ResponseQuery) error { switch resp.Code { case legacyerrors.ErrInvalidRequest.ABCICode(): return status.Error(codes.InvalidArgument, resp.Log) @@ -2242,7 +2246,7 @@ func (cc *PenumbraProvider) waitForBlockInclusion( return nil, fmt.Errorf("timed out after: %d; %w", waitTimeout, ErrTimeoutAfterWaitingForTxBroadcast) // This fixed poll is fine because it's only for logging and updating prometheus metrics currently. case <-time.After(time.Millisecond * 100): - res, err := cc.RPCClient.Tx(ctx, txHash, false) + res, err := cc.RPCClient.Client.Tx(ctx, txHash, false) if err == nil { return cc.mkTxResult(res) } @@ -2256,17 +2260,64 @@ func (cc *PenumbraProvider) waitForBlockInclusion( } // mkTxResult decodes a comet transaction into an SDK TxResponse. -func (cc *PenumbraProvider) mkTxResult(resTx *coretypes.ResultTx) (*sdk.TxResponse, error) { +func (cc *PenumbraProvider) mkTxResult(resTx *client2.TxResponse) (*sdk.TxResponse, error) { txbz, err := cc.Codec.TxConfig.TxDecoder()(resTx.Tx) if err != nil { return nil, err } + p, ok := txbz.(intoAny) if !ok { return nil, fmt.Errorf("expecting a type implementing intoAny, got: %T", txbz) } + + events := make([]abci.Event, len(resTx.ExecTx.Events)) + for i, event := range resTx.ExecTx.Events { + attributes := make([]abci.EventAttribute, len(event.Attributes)) + + for j, attr := range event.Attributes { + attributes[j] = abci.EventAttribute{ + Key: attr.Key, + Value: attr.Value, + Index: false, + } + } + + events[i] = abci.Event{ + Type: event.Type, + Attributes: attributes, + } + } + + res := &coretypes.ResultTx{ + Hash: bytes.HexBytes(resTx.Hash), + Height: resTx.Height, + Index: resTx.Index, + TxResult: abci.ExecTxResult{ + Code: resTx.ExecTx.Code, + Data: resTx.ExecTx.Data, + Log: resTx.ExecTx.Log, + Info: resTx.ExecTx.Info, + GasWanted: resTx.ExecTx.GasWanted, + GasUsed: resTx.ExecTx.GasUsed, + Events: events, + Codespace: resTx.ExecTx.Codespace, + }, + Tx: tmtypes.Tx(resTx.Tx), + Proof: tmtypes.TxProof{ + RootHash: bytes.HexBytes(resTx.Proof.RootHash), + Data: tmtypes.Tx(resTx.Proof.Data), + Proof: merkle.Proof{ + Total: resTx.Proof.Proof.Total, + Index: resTx.Proof.Proof.Total, + LeafHash: resTx.Proof.Proof.LeafHash, + Aunts: resTx.Proof.Proof.Aunts, + }, + }, + } + any := p.AsAny() - return sdk.NewResponseResultTx(resTx, any, ""), nil + return sdk.NewResponseResultTx(res, any, ""), nil } func (cc *PenumbraProvider) MsgSubmitQueryResponse(chainID string, queryID provider.ClientICQQueryID, proof provider.ICQProof) (provider.RelayerMessage, error) { diff --git a/relayer/client.go b/relayer/client.go index de8876f91..d2ea746c0 100644 --- a/relayer/client.go +++ b/relayer/client.go @@ -235,6 +235,7 @@ func CreateClient( if err := retry.Do(func() error { var success bool var err error + res, success, err = src.ChainProvider.SendMessages(ctx, msgs, memo) if err != nil { src.LogFailedTx(res, err, msgs) @@ -536,6 +537,14 @@ func findMatchingClient(ctx context.Context, src, dst *Chain, newClientState ibc // parseClientIDFromEvents parses events emitted from a MsgCreateClient and returns the // client identifier. func parseClientIDFromEvents(events []provider.RelayerEvent) (string, error) { + // TODO: Remove debug output before merging PR + for _, event := range events { + fmt.Printf("Event Type: %s \n", event.EventType) + for attrKey, attrVal := range event.Attributes { + fmt.Printf("Event Attr Key: %s Attr Val: %s \n", attrKey, attrVal) + } + } + for _, event := range events { if event.EventType == clienttypes.EventTypeCreateClient { for attributeKey, attributeValue := range event.Attributes { @@ -545,6 +554,7 @@ func parseClientIDFromEvents(events []provider.RelayerEvent) (string, error) { } } } + return "", fmt.Errorf("client identifier event attribute not found") } From 8bc474c64a49fd614d9e45c7884571017fff36af Mon Sep 17 00:00:00 2001 From: Justin Tieri <37750742+jtieri@users.noreply.github.com> Date: Wed, 24 Jan 2024 12:34:38 -0600 Subject: [PATCH 2/4] feat: finish implementing the CometRPC interface --- client/client_wrapper.go | 154 +++++++++++++++++++++++---------------- 1 file changed, 93 insertions(+), 61 deletions(-) diff --git a/client/client_wrapper.go b/client/client_wrapper.go index ca2d35b6d..13fce0f33 100644 --- a/client/client_wrapper.go +++ b/client/client_wrapper.go @@ -8,14 +8,15 @@ import ( "github.com/cometbft/cometbft/libs/bytes" "github.com/cometbft/cometbft/p2p" "github.com/cometbft/cometbft/proto/tendermint/crypto" - cometprotoversion "github.com/cometbft/cometbft/proto/tendermint/version" rpcclient "github.com/cometbft/cometbft/rpc/client" coretypes "github.com/cometbft/cometbft/rpc/core/types" tmtypes "github.com/cometbft/cometbft/types" + sdk "github.com/cosmos/cosmos-sdk/types" sltypes "github.com/strangelove-ventures/cometbft-client/abci/types" "github.com/strangelove-ventures/cometbft-client/client" slbytes "github.com/strangelove-ventures/cometbft-client/libs/bytes" slclient "github.com/strangelove-ventures/cometbft-client/rpc/client" + coretypes2 "github.com/strangelove-ventures/cometbft-client/rpc/core/types" types2 "github.com/strangelove-ventures/cometbft-client/types" ) @@ -52,19 +53,7 @@ func (r RPCClient) ABCIQuery( return nil, err } - return &coretypes.ResultABCIQuery{ - Response: types.ResponseQuery{ - Code: res.Response.Code, - Log: res.Response.Log, - Info: res.Response.Info, - Index: res.Response.Index, - Key: res.Response.Key, - Value: res.Response.Value, - ProofOps: convertProofOps(res.Response.ProofOps), - Height: res.Response.Height, - Codespace: res.Response.Codespace, - }, - }, nil + return convertResultABCIQuery(res), nil } func (r RPCClient) ABCIQueryWithOptions( @@ -83,19 +72,7 @@ func (r RPCClient) ABCIQueryWithOptions( return nil, err } - return &coretypes.ResultABCIQuery{ - Response: types.ResponseQuery{ - Code: res.Response.Code, - Log: res.Response.Log, - Info: res.Response.Info, - Index: res.Response.Index, - Key: res.Response.Key, - Value: res.Response.Value, - ProofOps: convertProofOps(res.Response.ProofOps), - Height: res.Response.Height, - Codespace: res.Response.Codespace, - }, - }, nil + return convertResultABCIQuery(res), nil } func (r RPCClient) BroadcastTxCommit(ctx context.Context, tx tmtypes.Tx) (*coretypes.ResultBroadcastTxCommit, error) { @@ -174,7 +151,7 @@ func (r RPCClient) Validators( for i, val := range res.Validators { vals[i] = &tmtypes.Validator{ Address: tmtypes.Address(val.Address), - PubKey: nil, // TODO: PubKey in our response type is an interface, need to figure out how to handle + PubKey: nil, VotingPower: val.VotingPower, ProposerPriority: val.ProposerPriority, } @@ -225,7 +202,7 @@ func (r RPCClient) Status(ctx context.Context) (*coretypes.ResultStatus, error) }, ValidatorInfo: coretypes.ValidatorInfo{ Address: bytes.HexBytes(res.ValidatorInfo.Address), - PubKey: nil, // TODO: PubKey in our response type is an interface, need to figure out how to handle + PubKey: nil, VotingPower: res.ValidatorInfo.VotingPower, }, }, nil @@ -270,15 +247,15 @@ func (r RPCClient) BlockResults(ctx context.Context, height *int64) (*coretypes. Info: tx.Info, GasWanted: tx.GasWanted, GasUsed: tx.GasUsed, - Events: nil, + Events: converStringEvents(tx.Events), Codespace: tx.Codespace, } } return &coretypes.ResultBlockResults{ Height: res.Height, - TxsResults: nil, - FinalizeBlockEvents: nil, + TxsResults: txs, + FinalizeBlockEvents: converStringEvents(res.Events), ValidatorUpdates: nil, ConsensusParamUpdates: nil, AppHash: res.AppHash, @@ -353,23 +330,7 @@ func (r RPCClient) Tx(ctx context.Context, hash []byte, prove bool) (*coretypes. return nil, err } - return &coretypes.ResultTx{ - Hash: bytes.HexBytes(res.Hash), - Height: res.Height, - Index: res.Index, - TxResult: types.ExecTxResult{}, // TODO: - Tx: tmtypes.Tx(res.Tx), - Proof: tmtypes.TxProof{ - RootHash: bytes.HexBytes(res.Proof.RootHash), - Data: tmtypes.Tx(res.Proof.Data), - Proof: merkle.Proof{ - Total: res.Proof.Proof.Total, - Index: res.Proof.Proof.Index, - LeafHash: res.Proof.Proof.LeafHash, - Aunts: res.Proof.Proof.Aunts, - }, - }, - }, nil + return convertResultTx(res), nil } func (r RPCClient) TxSearch( @@ -384,11 +345,14 @@ func (r RPCClient) TxSearch( return nil, err } - _ = res + txs := make([]*coretypes.ResultTx, len(res)) + for i, tx := range res { + txs[i] = convertResultTx(tx) + } return &coretypes.ResultTxSearch{ - Txs: nil, - TotalCount: 0, + Txs: txs, + TotalCount: len(txs), }, nil } @@ -403,11 +367,17 @@ func (r RPCClient) BlockSearch( return nil, err } - _ = res + blocks := make([]*coretypes.ResultBlock, len(res.Blocks)) + for i, block := range res.Blocks { + blocks[i] = &coretypes.ResultBlock{ + BlockID: convertBlockID(block.BlockID), + Block: convertBlock(block.Block), + } + } return &coretypes.ResultBlockSearch{ - Blocks: nil, - TotalCount: 0, + Blocks: blocks, + TotalCount: res.TotalCount, }, nil } @@ -447,13 +417,30 @@ func convertEvents(events []sltypes.Event) []types.Event { return evts } +func converStringEvents(events sdk.StringEvents) []types.Event { + evts := make([]types.Event, len(events)) + + for i, evt := range events { + attributes := make([]types.EventAttribute, len(evt.Attributes)) + + for j, attr := range evt.Attributes { + attributes[j] = types.EventAttribute{ + Key: attr.Key, + Value: attr.Value, + } + } + + evts[i] = types.Event{ + Type: evt.Type, + Attributes: attributes, + } + } + + return evts +} + func convertHeader(header types2.Header) tmtypes.Header { return tmtypes.Header{ - // TODO: Version does not appear to be present in our response type - Version: cometprotoversion.Consensus{ - Block: 0, - App: 0, - }, ChainID: header.ChainID, Height: header.Height, Time: header.Time, @@ -507,7 +494,7 @@ func convertBlock(block *types2.Block) *tmtypes.Block { Data: tmtypes.Data{ Txs: txs, }, - Evidence: tmtypes.EvidenceData{}, // TODO: EvidenceData + Evidence: tmtypes.EvidenceData{}, LastCommit: &tmtypes.Commit{ Height: block.LastCommit.Height, Round: block.LastCommit.Round, @@ -516,3 +503,48 @@ func convertBlock(block *types2.Block) *tmtypes.Block { }, } } + +func convertResultABCIQuery(res *coretypes2.ResultABCIQuery) *coretypes.ResultABCIQuery { + return &coretypes.ResultABCIQuery{ + Response: types.ResponseQuery{ + Code: res.Response.Code, + Log: res.Response.Log, + Info: res.Response.Info, + Index: res.Response.Index, + Key: res.Response.Key, + Value: res.Response.Value, + ProofOps: convertProofOps(res.Response.ProofOps), + Height: res.Response.Height, + Codespace: res.Response.Codespace, + }, + } +} + +func convertResultTx(res *client.TxResponse) *coretypes.ResultTx { + return &coretypes.ResultTx{ + Hash: bytes.HexBytes(res.Hash), + Height: res.Height, + Index: res.Index, + TxResult: types.ExecTxResult{ + Code: res.ExecTx.Code, + Data: res.ExecTx.Data, + Log: res.ExecTx.Log, + Info: res.ExecTx.Info, + GasWanted: res.ExecTx.GasWanted, + GasUsed: res.ExecTx.GasUsed, + Events: converStringEvents(res.ExecTx.Events), + Codespace: res.ExecTx.Codespace, + }, + Tx: tmtypes.Tx(res.Tx), + Proof: tmtypes.TxProof{ + RootHash: bytes.HexBytes(res.Proof.RootHash), + Data: tmtypes.Tx(res.Proof.Data), + Proof: merkle.Proof{ + Total: res.Proof.Proof.Total, + Index: res.Proof.Proof.Index, + LeafHash: res.Proof.Proof.LeafHash, + Aunts: res.Proof.Proof.Aunts, + }, + }, + } +} From 63ad7362c7a718ffdfede762e6ee8d45da098b5f Mon Sep 17 00:00:00 2001 From: Justin Tieri <37750742+jtieri@users.noreply.github.com> Date: Wed, 24 Jan 2024 12:35:10 -0600 Subject: [PATCH 3/4] chore: clean up --- interchaintest/ibc_test.go | 8 - relayer/chains/cosmos/event_parser.go | 15 - relayer/chains/cosmos/event_parser_test.go | 364 --------------------- relayer/client.go | 8 - 4 files changed, 395 deletions(-) delete mode 100644 relayer/chains/cosmos/event_parser.go delete mode 100644 relayer/chains/cosmos/event_parser_test.go diff --git a/interchaintest/ibc_test.go b/interchaintest/ibc_test.go index 9203b6bfe..3d5a45cdf 100644 --- a/interchaintest/ibc_test.go +++ b/interchaintest/ibc_test.go @@ -41,14 +41,6 @@ func interchaintestConformance(t *testing.T, rf interchaintest.RelayerFactory) { ChainConfig: ibc.ChainConfig{ChainID: "osmosis-1001"}, }, }) - // - //rff := interchaintest.NewBuiltinRelayerFactory( - // ibc.CosmosRly, - // zaptest.NewLogger(t), - // interchaintestrelayer.CustomDockerImage("relayer", "local", "100:1000"), - // interchaintestrelayer.ImagePull(false), - // interchaintestrelayer.StartupFlags("--processor", "events", "--block-history", "100"), - //) conformance.Test( t, diff --git a/relayer/chains/cosmos/event_parser.go b/relayer/chains/cosmos/event_parser.go deleted file mode 100644 index 2a7d2167f..000000000 --- a/relayer/chains/cosmos/event_parser.go +++ /dev/null @@ -1,15 +0,0 @@ -package cosmos - -//import ( -// abci "github.com/cometbft/cometbft/abci/types" -// "github.com/cosmos/relayer/v2/relayer/chains" -//) - -//func (ccp *CosmosChainProcessor) ibcMessagesFromBlockEvents( -// events []abci.Event, -// height uint64, base64Encoded bool, -//) (res []chains.IbcMessage) { -// chainID := ccp.chainProvider.ChainId() -// res = append(res, chains.IbcMessagesFromEvents(ccp.log, events, chainID, height, base64Encoded)...) -// return res -//} diff --git a/relayer/chains/cosmos/event_parser_test.go b/relayer/chains/cosmos/event_parser_test.go deleted file mode 100644 index bd6a6d5f6..000000000 --- a/relayer/chains/cosmos/event_parser_test.go +++ /dev/null @@ -1,364 +0,0 @@ -package cosmos - -import ( - "encoding/hex" - "testing" - - abci "github.com/cometbft/cometbft/abci/types" - sdk "github.com/cosmos/cosmos-sdk/types" - clienttypes "github.com/cosmos/ibc-go/v8/modules/core/02-client/types" - conntypes "github.com/cosmos/ibc-go/v8/modules/core/03-connection/types" - chantypes "github.com/cosmos/ibc-go/v8/modules/core/04-channel/types" - "github.com/cosmos/relayer/v2/relayer/provider" - "github.com/google/go-cmp/cmp" - "github.com/stretchr/testify/require" - "go.uber.org/zap" - - "github.com/cosmos/relayer/v2/relayer/chains" -) - -func TestParsePacket(t *testing.T) { - const ( - testPacketTimeoutHeight = "1-1245" - testPacketTimeoutTimestamp = "1654033235600000000" - testPacketSequence = "1" - testPacketDataHex = "0123456789ABCDEF" - testPacketSrcChannel = "channel-0" - testPacketSrcPort = "port-0" - testPacketDstChannel = "channel-1" - testPacketDstPort = "port-1" - ) - - packetEventAttributes := []sdk.Attribute{ - { - Key: chantypes.AttributeKeySequence, - Value: testPacketSequence, - }, - { - Key: chantypes.AttributeKeyDataHex, - Value: testPacketDataHex, - }, - { - Key: chantypes.AttributeKeyTimeoutHeight, - Value: testPacketTimeoutHeight, - }, - { - Key: chantypes.AttributeKeyTimeoutTimestamp, - Value: testPacketTimeoutTimestamp, - }, - { - Key: chantypes.AttributeKeySrcChannel, - Value: testPacketSrcChannel, - }, - { - Key: chantypes.AttributeKeySrcPort, - Value: testPacketSrcPort, - }, - { - Key: chantypes.AttributeKeyDstChannel, - Value: testPacketDstChannel, - }, - { - Key: chantypes.AttributeKeyDstPort, - Value: testPacketDstPort, - }, - } - - parsed := new(chains.PacketInfo) - parsed.ParseAttrs(zap.NewNop(), packetEventAttributes) - - packetData, err := hex.DecodeString(testPacketDataHex) - require.NoError(t, err, "error decoding test packet data") - - require.Empty(t, cmp.Diff(provider.PacketInfo(*parsed), provider.PacketInfo{ - Sequence: uint64(1), - Data: packetData, - TimeoutHeight: clienttypes.Height{ - RevisionNumber: uint64(1), - RevisionHeight: uint64(1245), - }, - TimeoutTimestamp: uint64(1654033235600000000), - SourceChannel: testPacketSrcChannel, - SourcePort: testPacketSrcPort, - DestChannel: testPacketDstChannel, - DestPort: testPacketDstPort, - }), "parsed does not match expected") -} - -func TestParseClient(t *testing.T) { - const ( - testClientID1 = "test-client-id-1" - testClientConsensusHeight = "1-1023" - testClientHeader = "0123456789ABCDEF" - ) - - clientEventAttributes := []sdk.Attribute{ - { - Key: clienttypes.AttributeKeyClientID, - Value: testClientID1, - }, - { - Key: clienttypes.AttributeKeyConsensusHeight, - Value: testClientConsensusHeight, - }, - { - Key: clienttypes.AttributeKeyHeader, - Value: testClientHeader, - }, - } - - parsed := new(chains.ClientInfo) - parsed.ParseAttrs(zap.NewNop(), clientEventAttributes) - - clientHeader, err := hex.DecodeString(testClientHeader) - require.NoError(t, err, "error parsing test client header") - - require.Empty(t, cmp.Diff(*parsed, *chains.NewClientInfo( - testClientID1, - clienttypes.Height{ - RevisionNumber: uint64(1), - RevisionHeight: uint64(1023), - }, - clientHeader, - ), cmp.AllowUnexported(chains.ClientInfo{}, clienttypes.Height{})), "parsed client info does not match expected") -} - -func TestParseChannel(t *testing.T) { - const ( - testConnectionID1 = "test-connection-id-1" - testChannelID1 = "test-channel-id-1" - testPortID1 = "test-port-id-1" - testChannelID2 = "test-channel-id-2" - testPortID2 = "test-port-id-2" - ) - - channelEventAttributes := []sdk.Attribute{ - { - Key: chantypes.AttributeKeyConnectionID, - Value: testConnectionID1, - }, - { - Key: chantypes.AttributeKeyChannelID, - Value: testChannelID1, - }, - { - Key: chantypes.AttributeKeyPortID, - Value: testPortID1, - }, - { - Key: chantypes.AttributeCounterpartyChannelID, - Value: testChannelID2, - }, - { - Key: chantypes.AttributeCounterpartyPortID, - Value: testPortID2, - }, - } - - parsed := new(chains.ChannelInfo) - parsed.ParseAttrs(zap.NewNop(), channelEventAttributes) - - require.Empty(t, cmp.Diff(provider.ChannelInfo(*parsed), provider.ChannelInfo{ - ConnID: testConnectionID1, - ChannelID: testChannelID1, - PortID: testPortID1, - CounterpartyChannelID: testChannelID2, - CounterpartyPortID: testPortID2, - }), "parsed channel info does not match expected") -} - -func TestParseConnection(t *testing.T) { - const ( - testConnectionID1 = "test-connection-id-1" - testClientID1 = "test-client-id-1" - testConnectionID2 = "test-connection-id-2" - testClientID2 = "test-client-id-2" - ) - - connectionEventAttributes := []sdk.Attribute{ - { - Key: conntypes.AttributeKeyConnectionID, - Value: testConnectionID1, - }, - { - Key: conntypes.AttributeKeyClientID, - Value: testClientID1, - }, - { - Key: conntypes.AttributeKeyCounterpartyConnectionID, - Value: testConnectionID2, - }, - { - Key: conntypes.AttributeKeyCounterpartyClientID, - Value: testClientID2, - }, - } - - parsed := new(chains.ConnectionInfo) - parsed.ParseAttrs(zap.NewNop(), connectionEventAttributes) - - require.Empty(t, cmp.Diff(provider.ConnectionInfo(*parsed), provider.ConnectionInfo{ - ClientID: testClientID1, - ConnID: testConnectionID1, - CounterpartyClientID: testClientID2, - CounterpartyConnID: testConnectionID2, - }), "parsed connection info does not match expected") -} - -func TestParseEventLogs(t *testing.T) { - const ( - testClientID1 = "test-client-id-1" - testClientConsensusHeight = "1-1023" - testPacketTimeoutHeight = "1-1245" - testPacketTimeoutTimestamp = "1654033235600000000" - testPacketSequence = "1" - testPacketDataHex = "0123456789ABCDEF" - testPacketAckHex = "FBDA532947" - testPacketSrcChannel = "channel-0" - testPacketSrcPort = "port-0" - testPacketDstChannel = "channel-1" - testPacketDstPort = "port-1" - ) - events := []abci.Event{ - - { - Type: clienttypes.EventTypeUpdateClient, - Attributes: []abci.EventAttribute{ - { - Key: clienttypes.AttributeKeyClientID, - Value: testClientID1, - }, - { - Key: clienttypes.AttributeKeyConsensusHeight, - Value: testClientConsensusHeight, - }, - }, - }, - { - Type: chantypes.EventTypeRecvPacket, - Attributes: []abci.EventAttribute{ - { - Key: chantypes.AttributeKeySequence, - Value: testPacketSequence, - }, - { - Key: chantypes.AttributeKeyDataHex, - Value: testPacketDataHex, - }, - { - Key: chantypes.AttributeKeyTimeoutHeight, - Value: testPacketTimeoutHeight, - }, - { - Key: chantypes.AttributeKeyTimeoutTimestamp, - Value: testPacketTimeoutTimestamp, - }, - { - Key: chantypes.AttributeKeySrcChannel, - Value: testPacketSrcChannel, - }, - { - Key: chantypes.AttributeKeySrcPort, - Value: testPacketSrcPort, - }, - { - Key: chantypes.AttributeKeyDstChannel, - Value: testPacketDstChannel, - }, - { - Key: chantypes.AttributeKeyDstPort, - Value: testPacketDstPort, - }, - }, - }, - { - Type: chantypes.EventTypeWriteAck, - Attributes: []abci.EventAttribute{ - { - Key: chantypes.AttributeKeySequence, - Value: testPacketSequence, - }, - { - Key: chantypes.AttributeKeyAckHex, - Value: testPacketAckHex, - }, - { - Key: chantypes.AttributeKeySrcChannel, - Value: testPacketSrcChannel, - }, - { - Key: chantypes.AttributeKeySrcPort, - Value: testPacketSrcPort, - }, - { - Key: chantypes.AttributeKeyDstChannel, - Value: testPacketDstChannel, - }, - { - Key: chantypes.AttributeKeyDstPort, - Value: testPacketDstPort, - }, - }, - }, - } - - ibcMessages := chains.IbcMessagesFromEvents(zap.NewNop(), events, "", 0, false) - - require.Len(t, ibcMessages, 3) - - msgUpdateClient := ibcMessages[0] - require.Equal(t, clienttypes.EventTypeUpdateClient, msgUpdateClient.EventType) - - clientInfoParsed, isClientInfo := msgUpdateClient.Info.(*chains.ClientInfo) - require.True(t, isClientInfo, "messageInfo is not clientInfo") - - require.Empty(t, cmp.Diff(*clientInfoParsed, *chains.NewClientInfo( - testClientID1, - clienttypes.Height{ - RevisionNumber: uint64(1), - RevisionHeight: uint64(1023), - }, - nil, - ), cmp.AllowUnexported(chains.ClientInfo{}, clienttypes.Height{})), "parsed client info does not match expected") - - msgRecvPacket := ibcMessages[1] - require.Equal(t, chantypes.EventTypeRecvPacket, msgRecvPacket.EventType, "message event is not recv_packet") - - packetInfoParsed, isPacketInfo := msgRecvPacket.Info.(*chains.PacketInfo) - require.True(t, isPacketInfo, "recv_packet messageInfo is not packetInfo") - - msgWriteAcknowledgement := ibcMessages[2] - require.Equal(t, chantypes.EventTypeWriteAck, msgWriteAcknowledgement.EventType, "message event is not write_acknowledgement") - - ackPacketInfoParsed, isPacketInfo := msgWriteAcknowledgement.Info.(*chains.PacketInfo) - require.True(t, isPacketInfo, "ack messageInfo is not packetInfo") - - packetAck, err := hex.DecodeString(testPacketAckHex) - require.NoError(t, err, "error decoding test packet ack") - - packetData, err := hex.DecodeString(testPacketDataHex) - require.NoError(t, err, "error decoding test packet data") - - require.Empty(t, cmp.Diff(provider.PacketInfo(*packetInfoParsed), provider.PacketInfo{ - Sequence: uint64(1), - Data: packetData, - TimeoutHeight: clienttypes.Height{ - RevisionNumber: uint64(1), - RevisionHeight: uint64(1245), - }, - TimeoutTimestamp: uint64(1654033235600000000), - SourceChannel: testPacketSrcChannel, - SourcePort: testPacketSrcPort, - DestChannel: testPacketDstChannel, - DestPort: testPacketDstPort, - }), "parsed packet info does not match expected") - - require.Empty(t, cmp.Diff(provider.PacketInfo(*ackPacketInfoParsed), provider.PacketInfo{ - Sequence: uint64(1), - SourceChannel: testPacketSrcChannel, - SourcePort: testPacketSrcPort, - DestChannel: testPacketDstChannel, - DestPort: testPacketDstPort, - Ack: packetAck, - }), "parsed packet info does not match expected") -} diff --git a/relayer/client.go b/relayer/client.go index d2ea746c0..0ede07737 100644 --- a/relayer/client.go +++ b/relayer/client.go @@ -537,14 +537,6 @@ func findMatchingClient(ctx context.Context, src, dst *Chain, newClientState ibc // parseClientIDFromEvents parses events emitted from a MsgCreateClient and returns the // client identifier. func parseClientIDFromEvents(events []provider.RelayerEvent) (string, error) { - // TODO: Remove debug output before merging PR - for _, event := range events { - fmt.Printf("Event Type: %s \n", event.EventType) - for attrKey, attrVal := range event.Attributes { - fmt.Printf("Event Attr Key: %s Attr Val: %s \n", attrKey, attrVal) - } - } - for _, event := range events { if event.EventType == clienttypes.EventTypeCreateClient { for attributeKey, attributeValue := range event.Attributes { From 51cf6d0e65d6ebd344fd2430bf89c3ced24a39ac Mon Sep 17 00:00:00 2001 From: Justin Tieri <37750742+jtieri@users.noreply.github.com> Date: Fri, 26 Jan 2024 15:12:06 -0600 Subject: [PATCH 4/4] chore: use relayer client wrapper to get upstream comet types --- client/client_wrapper.go | 7 ++- relayer/chains/cosmos/grpc_query.go | 25 +------- relayer/chains/cosmos/query.go | 30 +--------- relayer/chains/cosmos/tx.go | 85 ++++----------------------- relayer/chains/penumbra/grpc_query.go | 25 +------- relayer/chains/penumbra/query.go | 30 +--------- relayer/chains/penumbra/tx.go | 67 ++++----------------- 7 files changed, 34 insertions(+), 235 deletions(-) diff --git a/client/client_wrapper.go b/client/client_wrapper.go index 13fce0f33..731a74efe 100644 --- a/client/client_wrapper.go +++ b/client/client_wrapper.go @@ -505,6 +505,11 @@ func convertBlock(block *types2.Block) *tmtypes.Block { } func convertResultABCIQuery(res *coretypes2.ResultABCIQuery) *coretypes.ResultABCIQuery { + var ops *crypto.ProofOps + if res.Response.ProofOps != nil { + ops = convertProofOps(res.Response.ProofOps) + } + return &coretypes.ResultABCIQuery{ Response: types.ResponseQuery{ Code: res.Response.Code, @@ -513,7 +518,7 @@ func convertResultABCIQuery(res *coretypes2.ResultABCIQuery) *coretypes.ResultAB Index: res.Response.Index, Key: res.Response.Key, Value: res.Response.Value, - ProofOps: convertProofOps(res.Response.ProofOps), + ProofOps: ops, Height: res.Response.Height, Codespace: res.Response.Codespace, }, diff --git a/relayer/chains/cosmos/grpc_query.go b/relayer/chains/cosmos/grpc_query.go index ded348dc8..cf70a17f4 100644 --- a/relayer/chains/cosmos/grpc_query.go +++ b/relayer/chains/cosmos/grpc_query.go @@ -10,7 +10,6 @@ import ( sdkerrors "cosmossdk.io/errors" abci "github.com/cometbft/cometbft/abci/types" - "github.com/cometbft/cometbft/proto/tendermint/crypto" "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" legacyerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -137,18 +136,6 @@ func (cc *CosmosProvider) RunGRPCQuery(ctx context.Context, method string, req i return abci.ResponseQuery{}, nil, err } - proofOps := &crypto.ProofOps{} - - if abciRes.ProofOps != nil { - for _, op := range abciRes.ProofOps.Ops { - proofOps.Ops = append(proofOps.Ops, crypto.ProofOp{ - Type: op.Type, - Key: op.Key, - Data: op.Data, - }) - } - } - // Create header metadata. For now the headers contain: // - block height // We then parse all the call options, if the call option is a @@ -156,17 +143,7 @@ func (cc *CosmosProvider) RunGRPCQuery(ctx context.Context, method string, req i // metadata. md = metadata.Pairs(grpctypes.GRPCBlockHeightHeader, strconv.FormatInt(abciRes.Height, 10)) - return abci.ResponseQuery{ - Code: abciRes.Code, - Log: abciRes.Log, - Info: abciRes.Info, - Index: abciRes.Index, - Key: abciRes.Key, - Value: abciRes.Value, - ProofOps: proofOps, - Height: abciRes.Height, - Codespace: abciRes.Codespace, - }, md, nil + return abciRes, md, nil } // TxServiceBroadcast is a helper function to broadcast a Tx with the correct gRPC types diff --git a/relayer/chains/cosmos/query.go b/relayer/chains/cosmos/query.go index 0613e8f2e..ce3dab707 100644 --- a/relayer/chains/cosmos/query.go +++ b/relayer/chains/cosmos/query.go @@ -32,10 +32,8 @@ import ( host "github.com/cosmos/ibc-go/v8/modules/core/24-host" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" tmclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" - ics23 "github.com/cosmos/ics23/go" "github.com/cosmos/relayer/v2/relayer/chains" "github.com/cosmos/relayer/v2/relayer/provider" - abcitypes "github.com/strangelove-ventures/cometbft-client/abci/types" coretypes "github.com/strangelove-ventures/cometbft-client/rpc/core/types" "go.uber.org/zap" "golang.org/x/sync/errgroup" @@ -405,7 +403,7 @@ func (cc *CosmosProvider) QueryTendermintProof(ctx context.Context, height int64 return nil, nil, clienttypes.Height{}, err } - merkleProof, err := ConvertProofs(res.ProofOps) + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) if err != nil { return nil, nil, clienttypes.Height{}, err } @@ -516,7 +514,7 @@ func (cc *CosmosProvider) QueryUpgradeProof(ctx context.Context, key []byte, hei return nil, clienttypes.Height{}, err } - merkleProof, err := ConvertProofs(res.ProofOps) + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) if err != nil { return nil, clienttypes.Height{}, err } @@ -537,30 +535,6 @@ func (cc *CosmosProvider) QueryUpgradeProof(ctx context.Context, key []byte, hei }, nil } -// ConvertProofs converts crypto.ProofOps into MerkleProof. -// This function is copied from ibc-go, so we can modify it to work with our CometBFT client wrapper types. -// see: https://github.com/cosmos/ibc-go/blob/04531d83bf51d949f4bf2d61e88e419d1620ea32/modules/core/23-commitment/types/utils.go#L12-L29 -func ConvertProofs(tmProof *abcitypes.ProofOps) (commitmenttypes.MerkleProof, error) { - if tmProof == nil { - return commitmenttypes.MerkleProof{}, sdkerrors.Wrapf(commitmenttypes.ErrInvalidMerkleProof, "tendermint proof is nil") - } - - // Unmarshal all proof ops to CommitmentProof - proofs := make([]*ics23.CommitmentProof, len(tmProof.Ops)) - for i, op := range tmProof.Ops { - var p ics23.CommitmentProof - err := p.Unmarshal(op.Data) - if err != nil || p.Proof == nil { - return commitmenttypes.MerkleProof{}, sdkerrors.Wrapf(commitmenttypes.ErrInvalidMerkleProof, "could not unmarshal proof op into CommitmentProof at index %d: %v", i, err) - } - proofs[i] = &p - } - - return commitmenttypes.MerkleProof{ - Proofs: proofs, - }, nil -} - // QueryUpgradedClient returns upgraded client info func (cc *CosmosProvider) QueryUpgradedClient(ctx context.Context, height int64) (*clienttypes.QueryClientStateResponse, error) { req := clienttypes.QueryUpgradedClientStateRequest{} diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index ef8e7de64..09979ebe7 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -18,10 +18,9 @@ import ( "cosmossdk.io/store/rootmulti" "github.com/avast/retry-go/v4" abci "github.com/cometbft/cometbft/abci/types" - "github.com/cometbft/cometbft/crypto/merkle" "github.com/cometbft/cometbft/libs/bytes" "github.com/cometbft/cometbft/light" - "github.com/cometbft/cometbft/proto/tendermint/crypto" + client2 "github.com/cometbft/cometbft/rpc/client" coretypes "github.com/cometbft/cometbft/rpc/core/types" tmtypes "github.com/cometbft/cometbft/types" "github.com/cosmos/cosmos-sdk/client" @@ -47,9 +46,6 @@ import ( strideicqtypes "github.com/cosmos/relayer/v2/relayer/chains/cosmos/stride" "github.com/cosmos/relayer/v2/relayer/ethermint" "github.com/cosmos/relayer/v2/relayer/provider" - abcitypes "github.com/strangelove-ventures/cometbft-client/abci/types" - client2 "github.com/strangelove-ventures/cometbft-client/client" - rpcclient "github.com/strangelove-ventures/cometbft-client/rpc/client" ctypes "github.com/strangelove-ventures/cometbft-client/rpc/core/types" "go.uber.org/zap" "google.golang.org/grpc/codes" @@ -477,7 +473,7 @@ func (cc *CosmosProvider) waitForBlockInclusion( return nil, fmt.Errorf("timed out after: %d; %w", waitTimeout, ErrTimeoutAfterWaitingForTxBroadcast) // This fixed poll is fine because it's only for logging and updating prometheus metrics currently. case <-time.After(time.Millisecond * 100): - res, err := cc.RPCClient.Client.Tx(ctx, txHash, false) + res, err := cc.RPCClient.Tx(ctx, txHash, false) if err == nil { return cc.mkTxResult(res) } @@ -491,7 +487,7 @@ func (cc *CosmosProvider) waitForBlockInclusion( } // mkTxResult decodes a comet transaction into an SDK TxResponse. -func (cc *CosmosProvider) mkTxResult(resTx *client2.TxResponse) (*sdk.TxResponse, error) { +func (cc *CosmosProvider) mkTxResult(resTx *coretypes.ResultTx) (*sdk.TxResponse, error) { txbz, err := cc.Cdc.TxConfig.TxDecoder()(resTx.Tx) if err != nil { return nil, err @@ -502,53 +498,8 @@ func (cc *CosmosProvider) mkTxResult(resTx *client2.TxResponse) (*sdk.TxResponse return nil, fmt.Errorf("expecting a type implementing intoAny, got: %T", txbz) } - events := make([]abci.Event, len(resTx.ExecTx.Events)) - for i, event := range resTx.ExecTx.Events { - attributes := make([]abci.EventAttribute, len(event.Attributes)) - - for j, attr := range event.Attributes { - attributes[j] = abci.EventAttribute{ - Key: attr.Key, - Value: attr.Value, - Index: false, - } - } - - events[i] = abci.Event{ - Type: event.Type, - Attributes: attributes, - } - } - - res := &coretypes.ResultTx{ - Hash: bytes.HexBytes(resTx.Hash), - Height: resTx.Height, - Index: resTx.Index, - TxResult: abci.ExecTxResult{ - Code: resTx.ExecTx.Code, - Data: resTx.ExecTx.Data, - Log: resTx.ExecTx.Log, - Info: resTx.ExecTx.Info, - GasWanted: resTx.ExecTx.GasWanted, - GasUsed: resTx.ExecTx.GasUsed, - Events: events, - Codespace: resTx.ExecTx.Codespace, - }, - Tx: tmtypes.Tx(resTx.Tx), - Proof: tmtypes.TxProof{ - RootHash: bytes.HexBytes(resTx.Proof.RootHash), - Data: tmtypes.Tx(resTx.Proof.Data), - Proof: merkle.Proof{ - Total: resTx.Proof.Proof.Total, - Index: resTx.Proof.Proof.Total, - LeafHash: resTx.Proof.Proof.LeafHash, - Aunts: resTx.Proof.Proof.Aunts, - }, - }, - } - any := p.AsAny() - return sdk.NewResponseResultTx(res, any, ""), nil + return sdk.NewResponseResultTx(resTx, any, ""), nil } func parseEventsFromTxResponse(resp *sdk.TxResponse) []provider.RelayerEvent { @@ -1359,21 +1310,9 @@ func (cc *CosmosProvider) QueryICQWithProof(ctx context.Context, path string, re return provider.ICQProof{}, fmt.Errorf("failed to execute interchain query: %w", err) } - proofOps := &crypto.ProofOps{} - - proofOps.Ops = make([]crypto.ProofOp, 0, len(res.ProofOps.Ops)) - - for i, op := range res.ProofOps.Ops { - proofOps.Ops[i] = crypto.ProofOp{ - Type: op.Type, - Key: op.Key, - Data: op.Data, - } - } - return provider.ICQProof{ Result: res.Value, - ProofOps: proofOps, + ProofOps: res.ProofOps, Height: res.Height, }, nil } @@ -1813,7 +1752,7 @@ func (cc *CosmosProvider) CalculateGas(ctx context.Context, txf tx.Factory, sign Data: txBytes, } - var res abcitypes.ResponseQuery + var res abci.ResponseQuery if err := retry.Do(func() error { var err error res, err = cc.QueryABCI(ctx, simQuery) @@ -1859,19 +1798,19 @@ func (pc *CosmosProviderConfig) SignMode() signing.SignMode { } // QueryABCI performs an ABCI query and returns the appropriate response and error sdk error code. -func (cc *CosmosProvider) QueryABCI(ctx context.Context, req abci.RequestQuery) (abcitypes.ResponseQuery, error) { - opts := rpcclient.ABCIQueryOptions{ +func (cc *CosmosProvider) QueryABCI(ctx context.Context, req abci.RequestQuery) (abci.ResponseQuery, error) { + opts := client2.ABCIQueryOptions{ Height: req.Height, Prove: req.Prove, } - result, err := cc.RPCClient.Client.ABCIQueryWithOptions(ctx, req.Path, req.Data, opts) + result, err := cc.RPCClient.ABCIQueryWithOptions(ctx, req.Path, req.Data, opts) if err != nil { - return abcitypes.ResponseQuery{}, err + return abci.ResponseQuery{}, err } if !result.Response.IsOK() { - return abcitypes.ResponseQuery{}, sdkErrorToGRPCError(result.Response) + return abci.ResponseQuery{}, sdkErrorToGRPCError(result.Response) } // data from trusted node or subspace query doesn't need verification @@ -1882,7 +1821,7 @@ func (cc *CosmosProvider) QueryABCI(ctx context.Context, req abci.RequestQuery) return result.Response, nil } -func sdkErrorToGRPCError(resp abcitypes.ResponseQuery) error { +func sdkErrorToGRPCError(resp abci.ResponseQuery) error { switch resp.Code { case legacyerrors.ErrInvalidRequest.ABCICode(): return status.Error(codes.InvalidArgument, resp.Log) diff --git a/relayer/chains/penumbra/grpc_query.go b/relayer/chains/penumbra/grpc_query.go index d288650ad..9a3de2229 100644 --- a/relayer/chains/penumbra/grpc_query.go +++ b/relayer/chains/penumbra/grpc_query.go @@ -10,7 +10,6 @@ import ( sdkerrors "cosmossdk.io/errors" abci "github.com/cometbft/cometbft/abci/types" - "github.com/cometbft/cometbft/proto/tendermint/crypto" "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" legacyerrors "github.com/cosmos/cosmos-sdk/types/errors" @@ -137,18 +136,6 @@ func (cc *PenumbraProvider) RunGRPCQuery(ctx context.Context, method string, req return abci.ResponseQuery{}, nil, err } - proofOps := &crypto.ProofOps{} - - if abciRes.ProofOps != nil { - for _, op := range abciRes.ProofOps.Ops { - proofOps.Ops = append(proofOps.Ops, crypto.ProofOp{ - Type: op.Type, - Key: op.Key, - Data: op.Data, - }) - } - } - // Create header metadata. For now the headers contain: // - block height // We then parse all the call options, if the call option is a @@ -156,17 +143,7 @@ func (cc *PenumbraProvider) RunGRPCQuery(ctx context.Context, method string, req // metadata. md = metadata.Pairs(grpctypes.GRPCBlockHeightHeader, strconv.FormatInt(abciRes.Height, 10)) - return abci.ResponseQuery{ - Code: abciRes.Code, - Log: abciRes.Log, - Info: abciRes.Info, - Index: abciRes.Index, - Key: abciRes.Key, - Value: abciRes.Value, - ProofOps: proofOps, - Height: abciRes.Height, - Codespace: abciRes.Codespace, - }, md, nil + return abciRes, md, nil } // TxServiceBroadcast is a helper function to broadcast a Tx with the correct gRPC types diff --git a/relayer/chains/penumbra/query.go b/relayer/chains/penumbra/query.go index 8f3222e14..0d74c892d 100644 --- a/relayer/chains/penumbra/query.go +++ b/relayer/chains/penumbra/query.go @@ -27,10 +27,8 @@ import ( host "github.com/cosmos/ibc-go/v8/modules/core/24-host" ibcexported "github.com/cosmos/ibc-go/v8/modules/core/exported" tmclient "github.com/cosmos/ibc-go/v8/modules/light-clients/07-tendermint" - ics23 "github.com/cosmos/ics23/go" "github.com/cosmos/relayer/v2/relayer/chains" "github.com/cosmos/relayer/v2/relayer/provider" - abcitypes "github.com/strangelove-ventures/cometbft-client/abci/types" "go.uber.org/zap" "golang.org/x/sync/errgroup" ) @@ -192,7 +190,7 @@ func (cc *PenumbraProvider) QueryTendermintProof(ctx context.Context, height int return nil, nil, clienttypes.Height{}, err } - merkleProof, err := ConvertProofs(res.ProofOps) + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) if err != nil { return nil, nil, clienttypes.Height{}, err } @@ -208,30 +206,6 @@ func (cc *PenumbraProvider) QueryTendermintProof(ctx context.Context, height int return res.Value, proofBz, clienttypes.NewHeight(revision, uint64(res.Height)+1), nil } -// ConvertProofs converts crypto.ProofOps into MerkleProof. -// This function is copied from ibc-go, so we can modify it to work with our CometBFT client wrapper types. -// see: https://github.com/cosmos/ibc-go/blob/04531d83bf51d949f4bf2d61e88e419d1620ea32/modules/core/23-commitment/types/utils.go#L12-L29 -func ConvertProofs(tmProof *abcitypes.ProofOps) (commitmenttypes.MerkleProof, error) { - if tmProof == nil { - return commitmenttypes.MerkleProof{}, sdkerrors.Wrapf(commitmenttypes.ErrInvalidMerkleProof, "tendermint proof is nil") - } - - // Unmarshal all proof ops to CommitmentProof - proofs := make([]*ics23.CommitmentProof, len(tmProof.Ops)) - for i, op := range tmProof.Ops { - var p ics23.CommitmentProof - err := p.Unmarshal(op.Data) - if err != nil || p.Proof == nil { - return commitmenttypes.MerkleProof{}, sdkerrors.Wrapf(commitmenttypes.ErrInvalidMerkleProof, "could not unmarshal proof op into CommitmentProof at index %d: %v", i, err) - } - proofs[i] = &p - } - - return commitmenttypes.MerkleProof{ - Proofs: proofs, - }, nil -} - // QueryClientStateResponse retrieves the latest consensus state for a client in state at a given height func (cc *PenumbraProvider) QueryClientStateResponse(ctx context.Context, height int64, srcClientId string) (*clienttypes.QueryClientStateResponse, error) { key := host.FullClientStateKey(srcClientId) @@ -328,7 +302,7 @@ func (cc *PenumbraProvider) QueryUpgradeProof(ctx context.Context, key []byte, h return nil, clienttypes.Height{}, err } - merkleProof, err := ConvertProofs(res.ProofOps) + merkleProof, err := commitmenttypes.ConvertProofs(res.ProofOps) if err != nil { return nil, clienttypes.Height{}, err } diff --git a/relayer/chains/penumbra/tx.go b/relayer/chains/penumbra/tx.go index 91ee699ba..5889d3bb1 100644 --- a/relayer/chains/penumbra/tx.go +++ b/relayer/chains/penumbra/tx.go @@ -13,10 +13,10 @@ import ( "cosmossdk.io/store/rootmulti" "github.com/avast/retry-go/v4" abci "github.com/cometbft/cometbft/abci/types" - "github.com/cometbft/cometbft/crypto/merkle" "github.com/cometbft/cometbft/libs/bytes" "github.com/cometbft/cometbft/light" tmcrypto "github.com/cometbft/cometbft/proto/tendermint/crypto" + "github.com/cometbft/cometbft/rpc/client" coretypes "github.com/cometbft/cometbft/rpc/core/types" tmtypes "github.com/cometbft/cometbft/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" @@ -39,9 +39,7 @@ import ( penumbratypes "github.com/cosmos/relayer/v2/relayer/chains/penumbra/core/transaction/v1alpha1" penumbracrypto "github.com/cosmos/relayer/v2/relayer/chains/penumbra/crypto/tct/v1alpha1" "github.com/cosmos/relayer/v2/relayer/provider" - abcitypes "github.com/strangelove-ventures/cometbft-client/abci/types" client2 "github.com/strangelove-ventures/cometbft-client/client" - rpcclient "github.com/strangelove-ventures/cometbft-client/rpc/client" "go.uber.org/zap" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" @@ -2069,19 +2067,19 @@ func (cc *PenumbraProvider) QueryIBCHeader(ctx context.Context, h int64) (provid } // QueryABCI performs an ABCI query and returns the appropriate response and error sdk error code. -func (cc *PenumbraProvider) QueryABCI(ctx context.Context, req abci.RequestQuery) (abcitypes.ResponseQuery, error) { - opts := rpcclient.ABCIQueryOptions{ +func (cc *PenumbraProvider) QueryABCI(ctx context.Context, req abci.RequestQuery) (abci.ResponseQuery, error) { + opts := client.ABCIQueryOptions{ Height: req.Height, Prove: req.Prove, } - result, err := cc.RPCClient.Client.ABCIQueryWithOptions(ctx, req.Path, req.Data, opts) + result, err := cc.RPCClient.ABCIQueryWithOptions(ctx, req.Path, req.Data, opts) if err != nil { - return abcitypes.ResponseQuery{}, err + return abci.ResponseQuery{}, err } if !result.Response.IsOK() { - return abcitypes.ResponseQuery{}, sdkErrorToGRPCError(result.Response) + return abci.ResponseQuery{}, sdkErrorToGRPCError(result.Response) } // data from trusted node or subspace query doesn't need verification @@ -2092,7 +2090,7 @@ func (cc *PenumbraProvider) QueryABCI(ctx context.Context, req abci.RequestQuery return result.Response, nil } -func sdkErrorToGRPCError(resp abcitypes.ResponseQuery) error { +func sdkErrorToGRPCError(resp abci.ResponseQuery) error { switch resp.Code { case legacyerrors.ErrInvalidRequest.ABCICode(): return status.Error(codes.InvalidArgument, resp.Log) @@ -2246,7 +2244,7 @@ func (cc *PenumbraProvider) waitForBlockInclusion( return nil, fmt.Errorf("timed out after: %d; %w", waitTimeout, ErrTimeoutAfterWaitingForTxBroadcast) // This fixed poll is fine because it's only for logging and updating prometheus metrics currently. case <-time.After(time.Millisecond * 100): - res, err := cc.RPCClient.Client.Tx(ctx, txHash, false) + res, err := cc.RPCClient.Tx(ctx, txHash, false) if err == nil { return cc.mkTxResult(res) } @@ -2260,7 +2258,7 @@ func (cc *PenumbraProvider) waitForBlockInclusion( } // mkTxResult decodes a comet transaction into an SDK TxResponse. -func (cc *PenumbraProvider) mkTxResult(resTx *client2.TxResponse) (*sdk.TxResponse, error) { +func (cc *PenumbraProvider) mkTxResult(resTx *coretypes.ResultTx) (*sdk.TxResponse, error) { txbz, err := cc.Codec.TxConfig.TxDecoder()(resTx.Tx) if err != nil { return nil, err @@ -2271,53 +2269,8 @@ func (cc *PenumbraProvider) mkTxResult(resTx *client2.TxResponse) (*sdk.TxRespon return nil, fmt.Errorf("expecting a type implementing intoAny, got: %T", txbz) } - events := make([]abci.Event, len(resTx.ExecTx.Events)) - for i, event := range resTx.ExecTx.Events { - attributes := make([]abci.EventAttribute, len(event.Attributes)) - - for j, attr := range event.Attributes { - attributes[j] = abci.EventAttribute{ - Key: attr.Key, - Value: attr.Value, - Index: false, - } - } - - events[i] = abci.Event{ - Type: event.Type, - Attributes: attributes, - } - } - - res := &coretypes.ResultTx{ - Hash: bytes.HexBytes(resTx.Hash), - Height: resTx.Height, - Index: resTx.Index, - TxResult: abci.ExecTxResult{ - Code: resTx.ExecTx.Code, - Data: resTx.ExecTx.Data, - Log: resTx.ExecTx.Log, - Info: resTx.ExecTx.Info, - GasWanted: resTx.ExecTx.GasWanted, - GasUsed: resTx.ExecTx.GasUsed, - Events: events, - Codespace: resTx.ExecTx.Codespace, - }, - Tx: tmtypes.Tx(resTx.Tx), - Proof: tmtypes.TxProof{ - RootHash: bytes.HexBytes(resTx.Proof.RootHash), - Data: tmtypes.Tx(resTx.Proof.Data), - Proof: merkle.Proof{ - Total: resTx.Proof.Proof.Total, - Index: resTx.Proof.Proof.Total, - LeafHash: resTx.Proof.Proof.LeafHash, - Aunts: resTx.Proof.Proof.Aunts, - }, - }, - } - any := p.AsAny() - return sdk.NewResponseResultTx(res, any, ""), nil + return sdk.NewResponseResultTx(resTx, any, ""), nil } func (cc *PenumbraProvider) MsgSubmitQueryResponse(chainID string, queryID provider.ClientICQQueryID, proof provider.ICQProof) (provider.RelayerMessage, error) {