From 7ae1596b81e6daa6ac54d413077fde500f8cf01a Mon Sep 17 00:00:00 2001 From: murataniloener Date: Tue, 25 Jul 2023 21:03:55 +0200 Subject: [PATCH 01/37] catch error if type is missing (#1234) Co-authored-by: Andrew Gouin --- cmd/config.go | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/cmd/config.go b/cmd/config.go index 5266a4685..9888a4596 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -19,6 +19,7 @@ package cmd import ( "context" "encoding/json" + "errors" "fmt" "io" "io/ioutil" @@ -393,7 +394,11 @@ func UnmarshalJSONProviderConfig(data []byte, customTypes map[string]reflect.Typ return nil, err } - typeName := m["type"].(string) + typeName, ok := m["type"].(string) + if !ok { + return nil, errors.New("cannot find type"); + } + var provCfg provider.ProviderConfig if ty, found := customTypes[typeName]; found { provCfg = reflect.New(ty).Interface().(provider.ProviderConfig) From 22bce429316c81ce9a5386787d021b003d752b72 Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:11:21 -0700 Subject: [PATCH 02/37] Export client expiration metric to prometheus (#1235) * export client expiration metric * finalize * add path name * snake case * change label to `chain` * trusting period as string --- relayer/processor/message_processor.go | 7 +++++++ relayer/processor/metrics.go | 12 ++++++++++++ 2 files changed, 19 insertions(+) diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index bb0f66b12..fe355cfa7 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -141,8 +141,14 @@ func (mp *messageProcessor) shouldUpdateClientNow(ctx context.Context, src, dst shouldUpdateClientNow := enoughBlocksPassed && (pastTwoThirdsTrustingPeriod || pastConfiguredClientUpdateThreshold) + if mp.metrics != nil { + timeToExpiration := dst.clientState.TrustingPeriod - time.Since(consensusHeightTime) + mp.metrics.SetClientExpiration(src.info.PathName, dst.info.ChainID, dst.clientState.ClientID, fmt.Sprint(dst.clientState.TrustingPeriod.String()), timeToExpiration) + } + if shouldUpdateClientNow { mp.log.Info("Client update threshold condition met", + zap.String("path_name", src.info.PathName), zap.String("chain_id", dst.info.ChainID), zap.String("client_id", dst.info.ClientID), zap.Int64("trusting_period", dst.clientState.TrustingPeriod.Milliseconds()), @@ -249,6 +255,7 @@ func (mp *messageProcessor) assembleMsgUpdateClient(ctx context.Context, src, ds clientConsensusHeight.RevisionHeight+1, src.info.ChainID, err) } mp.log.Debug("Had to query for client trusted IBC header", + zap.String("path_name", src.info.PathName), zap.String("chain_id", src.info.ChainID), zap.String("counterparty_chain_id", dst.info.ChainID), zap.String("counterparty_client_id", clientID), diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index a549eb40a..96de766b6 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -1,6 +1,8 @@ package processor import ( + "time" + "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promauto" ) @@ -12,6 +14,7 @@ type PrometheusMetrics struct { LatestHeightGauge *prometheus.GaugeVec WalletBalance *prometheus.GaugeVec FeesSpent *prometheus.GaugeVec + ClientExpiration *prometheus.GaugeVec } func (m *PrometheusMetrics) AddPacketsObserved(path, chain, channel, port, eventType string, count int) { @@ -34,10 +37,15 @@ func (m *PrometheusMetrics) SetFeesSpent(chain, key, address, denom string, amou m.FeesSpent.WithLabelValues(chain, key, address, denom).Set(amount) } +func (m *PrometheusMetrics) SetClientExpiration(pathName, chain, clientID, trustingPeriod string, timeToExpiration time.Duration) { + m.ClientExpiration.WithLabelValues(pathName, chain, clientID, trustingPeriod).Set(timeToExpiration.Seconds()) +} + func NewPrometheusMetrics() *PrometheusMetrics { packetLabels := []string{"path", "chain", "channel", "port", "type"} heightLabels := []string{"chain"} walletLabels := []string{"chain", "key", "address", "denom"} + clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} registry := prometheus.NewRegistry() registerer := promauto.With(registry) return &PrometheusMetrics{ @@ -62,5 +70,9 @@ func NewPrometheusMetrics() *PrometheusMetrics { Name: "cosmos_relayer_fees_spent", Help: "The amount of fees spent from the relayer's wallet", }, walletLabels), + ClientExpiration: registerer.NewGaugeVec(prometheus.GaugeOpts{ + Name: "cosmos_relayer_client_expiration_seconds", + Help: "Seconds until the client expires", + }, clientExpirationLables), } } From 55084bd5844c42a5df8cf9e6fa2d74a84ccf304c Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:21:03 -0700 Subject: [PATCH 03/37] Export configured gas prices to prometheus wallet balance metric (#1236) * export gas price to prom * update label * update fees spent metric * snake case --- relayer/chains/cosmos/cosmos_chain_processor.go | 2 +- relayer/chains/cosmos/tx.go | 2 +- relayer/processor/metrics.go | 10 +++++----- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/relayer/chains/cosmos/cosmos_chain_processor.go b/relayer/chains/cosmos/cosmos_chain_processor.go index b4bef6d47..9189e945d 100644 --- a/relayer/chains/cosmos/cosmos_chain_processor.go +++ b/relayer/chains/cosmos/cosmos_chain_processor.go @@ -550,6 +550,6 @@ func (ccp *CosmosChainProcessor) CurrentRelayerBalance(ctx context.Context) { bal := relayerWalletBalances.AmountOf(gasDenom.Denom) // Convert to a big float to get a float64 for metrics f, _ := big.NewFloat(0.0).SetInt(bal.BigInt()).Float64() - ccp.metrics.SetWalletBalance(ccp.chainProvider.ChainId(), ccp.chainProvider.Key(), address, gasDenom.Denom, f) + ccp.metrics.SetWalletBalance(ccp.chainProvider.ChainId(), ccp.chainProvider.PCfg.GasPrices, ccp.chainProvider.Key(), address, gasDenom.Denom, f) } } diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index e4c06714d..8d9ae37d1 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -1301,7 +1301,7 @@ func (cc *CosmosProvider) UpdateFeesSpent(chain, key, address string, fees sdk.C for _, fee := range cc.TotalFees { // Convert to a big float to get a float64 for metrics f, _ := big.NewFloat(0.0).SetInt(fee.Amount.BigInt()).Float64() - cc.metrics.SetFeesSpent(chain, key, address, fee.GetDenom(), f) + cc.metrics.SetFeesSpent(chain, cc.PCfg.GasPrices, key, address, fee.GetDenom(), f) } } diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index 96de766b6..6c77b5f3e 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -29,12 +29,12 @@ func (m *PrometheusMetrics) SetLatestHeight(chain string, height int64) { m.LatestHeightGauge.WithLabelValues(chain).Set(float64(height)) } -func (m *PrometheusMetrics) SetWalletBalance(chain, key, address, denom string, balance float64) { - m.WalletBalance.WithLabelValues(chain, key, address, denom).Set(balance) +func (m *PrometheusMetrics) SetWalletBalance(chain, gasPrice, key, address, denom string, balance float64) { + m.WalletBalance.WithLabelValues(chain, gasPrice, key, address, denom).Set(balance) } -func (m *PrometheusMetrics) SetFeesSpent(chain, key, address, denom string, amount float64) { - m.FeesSpent.WithLabelValues(chain, key, address, denom).Set(amount) +func (m *PrometheusMetrics) SetFeesSpent(chain, gasPrice, key, address, denom string, amount float64) { + m.FeesSpent.WithLabelValues(chain, gasPrice, key, address, denom).Set(amount) } func (m *PrometheusMetrics) SetClientExpiration(pathName, chain, clientID, trustingPeriod string, timeToExpiration time.Duration) { @@ -44,7 +44,7 @@ func (m *PrometheusMetrics) SetClientExpiration(pathName, chain, clientID, trust func NewPrometheusMetrics() *PrometheusMetrics { packetLabels := []string{"path", "chain", "channel", "port", "type"} heightLabels := []string{"chain"} - walletLabels := []string{"chain", "key", "address", "denom"} + walletLabels := []string{"chain", "gas_price", "key", "address", "denom"} clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} registry := prometheus.NewRegistry() registerer := promauto.With(registry) From 107d3f5174e17aabd1b336b098ef3bb0f68d1b6a Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:32:52 -0700 Subject: [PATCH 04/37] Exports block query errors to prometheus metrics (counter) (#1239) * separate by type * add help info * remove new line in help and fix readme * feedback --- docs/advanced_usage.md | 2 +- relayer/chains/cosmos/cosmos_chain_processor.go | 6 ++++++ relayer/processor/metrics.go | 10 ++++++++++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index 715bc283d..99a721634 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -5,7 +5,7 @@ **Prometheus exporter** If you started `rly` with the default `--debug-addr` argument, -you can use `http://$IP:7597/relayer/metrics` as a target for your prometheus scraper. +you can use `http://$IP:5183/relayer/metrics` as a target for your prometheus scraper. **Example metrics** diff --git a/relayer/chains/cosmos/cosmos_chain_processor.go b/relayer/chains/cosmos/cosmos_chain_processor.go index 9189e945d..c582cc731 100644 --- a/relayer/chains/cosmos/cosmos_chain_processor.go +++ b/relayer/chains/cosmos/cosmos_chain_processor.go @@ -386,12 +386,18 @@ func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *qu queryCtx, cancelQueryCtx := context.WithTimeout(ctx, blockResultsQueryTimeout) defer cancelQueryCtx() blockRes, err = ccp.chainProvider.RPCClient.BlockResults(queryCtx, &i) + 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, i) + if err != nil && ccp.metrics != nil { + ccp.metrics.IncBlockQueryFailure(chainID, "IBC Header") + } return err }) diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index 6c77b5f3e..27e9e789f 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -14,6 +14,7 @@ type PrometheusMetrics struct { LatestHeightGauge *prometheus.GaugeVec WalletBalance *prometheus.GaugeVec FeesSpent *prometheus.GaugeVec + BlockQueryFailure *prometheus.CounterVec ClientExpiration *prometheus.GaugeVec } @@ -41,9 +42,14 @@ func (m *PrometheusMetrics) SetClientExpiration(pathName, chain, clientID, trust m.ClientExpiration.WithLabelValues(pathName, chain, clientID, trustingPeriod).Set(timeToExpiration.Seconds()) } +func (m *PrometheusMetrics) IncBlockQueryFailure(chain, err string) { + m.BlockQueryFailure.WithLabelValues(chain, err).Inc() +} + func NewPrometheusMetrics() *PrometheusMetrics { packetLabels := []string{"path", "chain", "channel", "port", "type"} heightLabels := []string{"chain"} + blockQueryFailureLabels := []string{"chain", "type"} walletLabels := []string{"chain", "gas_price", "key", "address", "denom"} clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} registry := prometheus.NewRegistry() @@ -70,6 +76,10 @@ func NewPrometheusMetrics() *PrometheusMetrics { Name: "cosmos_relayer_fees_spent", Help: "The amount of fees spent from the relayer's wallet", }, walletLabels), + BlockQueryFailure: registerer.NewCounterVec(prometheus.CounterOpts{ + Name: "cosmos_relayer_block_query_errors_total", + Help: "The total number of block query failures. The failures are separated into two catagories: 'RPC Client' and 'IBC Header'", + }, blockQueryFailureLabels), ClientExpiration: registerer.NewGaugeVec(prometheus.GaugeOpts{ Name: "cosmos_relayer_client_expiration_seconds", Help: "Seconds until the client expires", From 3c7828782d351273c1e8192a0cc66a2d26de4296 Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Tue, 25 Jul 2023 12:55:34 -0700 Subject: [PATCH 05/37] Export TX failures to prometheus metrics (counter) (#1240) * export tx failures to prometheus * change label to `cause` --- docs/advanced_usage.md | 11 ++++++++ relayer/processor/message_processor.go | 36 ++++++++++++++++++++++++++ relayer/processor/metrics.go | 10 +++++++ 3 files changed, 57 insertions(+) diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index 99a721634..a0b518b07 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -7,6 +7,17 @@ If you started `rly` with the default `--debug-addr` argument, you can use `http://$IP:5183/relayer/metrics` as a target for your prometheus scraper. + +Exported metrics: + +| **Exported Metric** | **Description** | **Type** | +|:----------------------------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------:| +| cosmos_relayer_observed_packets | The total number of observed packets | Counter | +| cosmos_relayer_relayed_packets | The total number of relayed packets | Counter | +| cosmos_relayer_chain_latest_height | The current height of the chain | Gauge | +| cosmos_relayer_wallet_balance | The current balance for the relayer's wallet | Gauge | +| cosmos_relayer_fees_spent | The amount of fees spent from the relayer's wallet | Gauge | +| cosmos_relayer_tx_failure |
The total number of tx failures broken up into catagories .
Categories:
- "packet messages are redundant"
- "insufficient funds"
- "invalid coins"
- "out of gas"
- "incorrect account sequence"

"Tx Failure" is the the catch all bucket| Counter | **Example metrics** ``` diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index fe355cfa7..b17978fc4 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -8,6 +8,7 @@ import ( "sync" "time" + sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" chantypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" "github.com/cosmos/relayer/v2/relayer/provider" @@ -33,6 +34,9 @@ type messageProcessor struct { isLocalhost bool } +// catagories of tx errors for a Prometheus counter. If the error doesnt fall into one of the below categories, it is labeled as "Tx Failure" +var promErrorCatagories = []error{chantypes.ErrRedundantTx, sdkerrors.ErrInsufficientFunds, sdkerrors.ErrInvalidCoins, sdkerrors.ErrOutOfGas, sdkerrors.ErrWrongSequence} + // trackMessage stores the message tracker in the correct slice and index based on the type. func (mp *messageProcessor) trackMessage(tracker messageToTrack, i int) { switch t := tracker.(type) { @@ -361,6 +365,16 @@ func (mp *messageProcessor) sendClientUpdate( zap.String("dst_client_id", dst.info.ClientID), zap.Error(err), ) + + for _, promError := range promErrorCatagories { + if mp.metrics != nil { + if errors.Is(err, promError) { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, promError.Error()) + } else { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, "Tx Failure") + } + } + } return } dst.log.Debug("Client update broadcast completed") @@ -430,6 +444,17 @@ func (mp *messageProcessor) sendBatchMessages( zap.String("dst_client_id", dst.info.ClientID), zap.Error(err), } + + for _, promError := range promErrorCatagories { + if mp.metrics != nil { + if errors.Is(err, promError) { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, promError.Error()) + } else { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, "Tx Failure") + } + } + } + if errors.Is(err, chantypes.ErrRedundantTx) { mp.log.Debug("Redundant message(s)", errFields...) return @@ -490,6 +515,17 @@ func (mp *messageProcessor) sendSingleMessage( zap.String("src_client_id", src.info.ClientID), zap.String("dst_client_id", dst.info.ClientID), } + + for _, promError := range promErrorCatagories { + if mp.metrics != nil { + if errors.Is(err, promError) { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, promError.Error()) + } else { + mp.metrics.IncTxFailure(src.info.PathName, src.info.ChainID, "Tx Failure") + } + } + } + errFields = append(errFields, zap.Object("msg", tracker)) errFields = append(errFields, zap.Error(err)) if errors.Is(err, chantypes.ErrRedundantTx) { diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index 27e9e789f..6e522cfc2 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -14,6 +14,7 @@ type PrometheusMetrics struct { LatestHeightGauge *prometheus.GaugeVec WalletBalance *prometheus.GaugeVec FeesSpent *prometheus.GaugeVec + TxFailureError *prometheus.CounterVec BlockQueryFailure *prometheus.CounterVec ClientExpiration *prometheus.GaugeVec } @@ -46,9 +47,14 @@ func (m *PrometheusMetrics) IncBlockQueryFailure(chain, err string) { m.BlockQueryFailure.WithLabelValues(chain, err).Inc() } +func (m *PrometheusMetrics) IncTxFailure(path, chain, errDesc string) { + m.TxFailureError.WithLabelValues(path, chain, errDesc).Inc() +} + func NewPrometheusMetrics() *PrometheusMetrics { packetLabels := []string{"path", "chain", "channel", "port", "type"} heightLabels := []string{"chain"} + txFailureLabels := []string{"path", "chain", "cause"} blockQueryFailureLabels := []string{"chain", "type"} walletLabels := []string{"chain", "gas_price", "key", "address", "denom"} clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} @@ -76,6 +82,10 @@ func NewPrometheusMetrics() *PrometheusMetrics { Name: "cosmos_relayer_fees_spent", Help: "The amount of fees spent from the relayer's wallet", }, walletLabels), + TxFailureError: registerer.NewCounterVec(prometheus.CounterOpts{ + Name: "cosmos_relayer_tx_errors_total", + Help: "The total number of tx failures broken up into categories. See https://github.com/cosmos/relayer/blob/main/docs/advanced_usage.md#monitoring for list of catagories. 'Tx Failure' is the catch-all category", + }, txFailureLabels), BlockQueryFailure: registerer.NewCounterVec(prometheus.CounterOpts{ Name: "cosmos_relayer_block_query_errors_total", Help: "The total number of block query failures. The failures are separated into two catagories: 'RPC Client' and 'IBC Header'", From 993c21bd3f5e813e4d969f23506673f67061689c Mon Sep 17 00:00:00 2001 From: murataniloener Date: Wed, 26 Jul 2023 19:12:11 +0200 Subject: [PATCH 06/37] use the name given by the user to generate the fetch URL (#1233) * use the name given by the user to generate the fetch URL * add example --------- Co-authored-by: Andrew Gouin Co-authored-by: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> --- cmd/chains.go | 5 +++-- cregistry/chain_info.go | 8 ++++---- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/cmd/chains.go b/cmd/chains.go index 53404cabe..a11eeb1be 100644 --- a/cmd/chains.go +++ b/cmd/chains.go @@ -277,9 +277,10 @@ func chainsAddCmd(a *appState) *cobra.Command { " the chain-registry or passing a file (-f) or url (-u)", Args: withUsage(cobra.MinimumNArgs(0)), Example: fmt.Sprintf(` $ %s chains add cosmoshub + $ %s chains add testnets/cosmoshubtestnet $ %s chains add cosmoshub osmosis $ %s chains add --file chains/ibc0.json ibc0 - $ %s chains add --url https://relayer.com/ibc0.json ibc0`, appName, appName, appName, appName), + $ %s chains add --url https://relayer.com/ibc0.json ibc0`, appName, appName, appName, appName, appName), RunE: func(cmd *cobra.Command, args []string) error { file, url, err := getAddInputs(cmd) if err != nil { @@ -447,7 +448,7 @@ func addChainsFromRegistry(ctx context.Context, a *appState, chains []string) er continue } - chainConfig, err := chainInfo.GetChainConfig(ctx) + chainConfig, err := chainInfo.GetChainConfig(ctx, chain) if err != nil { a.log.Warn( "Error generating chain config", diff --git a/cregistry/chain_info.go b/cregistry/chain_info.go index 4d49017f0..7309296e2 100644 --- a/cregistry/chain_info.go +++ b/cregistry/chain_info.go @@ -206,8 +206,8 @@ func (c ChainInfo) GetRandomRPCEndpoint(ctx context.Context) (string, error) { } // GetAssetList returns the asset metadata from the cosmos chain registry for this particular chain. -func (c ChainInfo) GetAssetList(ctx context.Context) (AssetList, error) { - chainRegURL := fmt.Sprintf("https://raw.githubusercontent.com/cosmos/chain-registry/master/%s/assetlist.json", c.ChainName) +func (c ChainInfo) GetAssetList(ctx context.Context, name string) (AssetList, error) { + chainRegURL := fmt.Sprintf("https://raw.githubusercontent.com/cosmos/chain-registry/master/%s/assetlist.json", name) res, err := http.Get(chainRegURL) if err != nil { @@ -236,11 +236,11 @@ func (c ChainInfo) GetAssetList(ctx context.Context) (AssetList, error) { // GetChainConfig returns a CosmosProviderConfig composed from the details found in the cosmos chain registry for // this particular chain. -func (c ChainInfo) GetChainConfig(ctx context.Context) (*cosmos.CosmosProviderConfig, error) { +func (c ChainInfo) GetChainConfig(ctx context.Context, name string) (*cosmos.CosmosProviderConfig, error) { debug := viper.GetBool("debug") home := viper.GetString("home") - assetList, err := c.GetAssetList(ctx) + assetList, err := c.GetAssetList(ctx, name) if err != nil { return nil, err } From cdd7661d8470ff6e88f81996b68cde8fd4d23c9d Mon Sep 17 00:00:00 2001 From: KyleMoser Date: Thu, 27 Jul 2023 13:19:25 -0400 Subject: [PATCH 07/37] feegrant PR (#1140) * Feegrant support * Test case for address caching bugfix * Bugfix for SDK account prefix. Feegrant test passing. * Mutex for signer expanded to include feegrantees * Cleaned up feegrant test case * Cleaned up feegrant test case * Cleaned up feegrant test case * check round robin feegrant behavior by counting number of TXs each grantee signer * module updates from merge * v0.47.0 with bech32 address cache fix * Move SetAddrCacheEnabled to NewRelayer func for full coverage * Do not hardcode chain id in feegrant test case * Wait more blocks for ibc transfers * disable cosmos SDK bech32 address cache for rly start command * Fix sloppy comments/remove unnecessary code * Faster acc caching unit test * Penumbra provider feegrant support * Merge upstream * Fixed merge issue where feegrant config wasn't being written to file * feegrant patch for cosmos-sdk v0.47.1 * merge from main * Update to cosmos-sdk v0.47.2 * Increase test case blocks to wait * Fixed data race by moving test parallelization after relayer wallet build * Increased TestScenarioICAChannelClose timeout height * Cleanup feegrant test case * Fixed race condition in sequence guard w/ mutex * Automatic retry for TX lookup in feegrant test case --------- Co-authored-by: Andrew Gouin --- cmd/chains.go | 14 + cmd/feegrant.go | 197 ++++++ cmd/query.go | 15 + go.work.sum | 650 +++++++++++++++++- interchaintest/acc_cache_test.go | 44 ++ interchaintest/client_threshold_test.go | 38 +- interchaintest/fee_middleware_test.go | 6 +- interchaintest/feegrant_test.go | 532 ++++++++++++++ interchaintest/go.mod | 6 +- interchaintest/go.sum | 9 +- interchaintest/ica_channel_close_test.go | 8 +- interchaintest/interchain_accounts_test.go | 4 +- interchaintest/misbehaviour_test.go | 14 +- interchaintest/path_filter_test.go | 6 +- interchaintest/relayer.go | 4 + interchaintest/stride/stride_icq_test.go | 65 +- .../tendermint_v0.37_boundary_test.go | 4 +- relayer/chains/cosmos/feegrant.go | 529 ++++++++++++++ relayer/chains/cosmos/grpc_query.go | 2 +- relayer/chains/cosmos/keys.go | 35 +- relayer/chains/cosmos/log.go | 7 + relayer/chains/cosmos/msg.go | 9 +- relayer/chains/cosmos/provider.go | 60 +- relayer/chains/cosmos/query.go | 91 +++ relayer/chains/cosmos/relayer_packets.go | 12 +- relayer/chains/cosmos/tx.go | 484 ++++++++++--- relayer/chains/cosmos/tx_test.go | 23 +- relayer/chains/penumbra/tx.go | 131 +++- relayer/processor/message_processor.go | 50 +- relayer/provider/provider.go | 2 +- relayer/strategies.go | 4 + 31 files changed, 2846 insertions(+), 209 deletions(-) create mode 100644 cmd/feegrant.go create mode 100644 interchaintest/acc_cache_test.go create mode 100644 interchaintest/feegrant_test.go create mode 100644 relayer/chains/cosmos/feegrant.go diff --git a/cmd/chains.go b/cmd/chains.go index a11eeb1be..7e471ae00 100644 --- a/cmd/chains.go +++ b/cmd/chains.go @@ -39,6 +39,7 @@ func chainsCmd(a *appState) *cobra.Command { chainsShowCmd(a), chainsAddrCmd(a), chainsAddDirCmd(a), + cmdChainsConfigure(a), ) return cmd @@ -144,6 +145,19 @@ $ %s ch d ibc-0`, appName, appName)), return cmd } +func cmdChainsConfigure(a *appState) *cobra.Command { + cmd := &cobra.Command{ + Use: "configure", + Short: "manage local chain configurations", + } + + cmd.AddCommand( + feegrantConfigureBaseCmd(a), + ) + + return cmd +} + func chainsRegistryList(a *appState) *cobra.Command { cmd := &cobra.Command{ Use: "registry-list", diff --git a/cmd/feegrant.go b/cmd/feegrant.go new file mode 100644 index 000000000..3d0c86421 --- /dev/null +++ b/cmd/feegrant.go @@ -0,0 +1,197 @@ +package cmd + +import ( + "errors" + "fmt" + + "github.com/cosmos/relayer/v2/relayer/chains/cosmos" + "github.com/spf13/cobra" +) + +// feegrantConfigureCmd returns the fee grant configuration commands for this module +func feegrantConfigureBaseCmd(a *appState) *cobra.Command { + cmd := &cobra.Command{ + Use: "feegrant", + Short: "Configure the client to use round-robin feegranted accounts when sending TXs", + Long: "Use round-robin feegranted accounts when sending TXs. Useful for relayers and applications where sequencing is important", + } + + cmd.AddCommand( + feegrantConfigureBasicCmd(a), + ) + + return cmd +} + +func feegrantConfigureBasicCmd(a *appState) *cobra.Command { + var numGrantees int + var update bool + var updateGrantees bool + var grantees []string + + cmd := &cobra.Command{ + Use: "basicallowance [chain-name] [granter] --num-grantees [int] --overwrite-granter --overwrite-grantees", + Short: "feegrants for the given chain and granter (if granter is unspecified, use the default key)", + Long: "feegrants for the given chain. 10 grantees by default, all with an unrestricted BasicAllowance.", + Args: cobra.MinimumNArgs(1), + RunE: func(cmd *cobra.Command, args []string) error { + chain := args[0] + cosmosChain, ok := a.config.Chains[chain] + if !ok { + return errChainNotFound(args[0]) + } + + prov, ok := cosmosChain.ChainProvider.(*cosmos.CosmosProvider) + if !ok { + return errors.New("only CosmosProvider can be feegranted") + } + + granterKeyOrAddr := "" + + if len(args) > 1 { + granterKeyOrAddr = args[1] + } else if prov.PCfg.FeeGrants != nil { + granterKeyOrAddr = prov.PCfg.FeeGrants.GranterKey + } else { + granterKeyOrAddr = prov.PCfg.Key + } + + granterKey, err := prov.KeyFromKeyOrAddress(granterKeyOrAddr) + if err != nil { + return fmt.Errorf("could not get granter key from '%s'", granterKeyOrAddr) + } + + if prov.PCfg.FeeGrants != nil && granterKey != prov.PCfg.FeeGrants.GranterKey && !update { + return fmt.Errorf("you specified granter '%s' which is different than configured feegranter '%s', but you did not specify the --overwrite-granter flag", granterKeyOrAddr, prov.PCfg.FeeGrants.GranterKey) + } else if prov.PCfg.FeeGrants != nil && granterKey != prov.PCfg.FeeGrants.GranterKey && update { + cfgErr := a.performConfigLockingOperation(cmd.Context(), func() error { + prov.PCfg.FeeGrants.GranterKey = granterKey + return nil + }) + cobra.CheckErr(cfgErr) + } + + if prov.PCfg.FeeGrants == nil || updateGrantees || len(grantees) > 0 { + var feegrantErr error + + //No list of grantees was provided, so we will use the default naming convention "grantee1, ... granteeN" + if grantees == nil { + feegrantErr = prov.ConfigureFeegrants(numGrantees, granterKey) + } else { + feegrantErr = prov.ConfigureWithGrantees(grantees, granterKey) + } + + if feegrantErr != nil { + return feegrantErr + } + + cfgErr := a.performConfigLockingOperation(cmd.Context(), func() error { + chain := a.config.Chains[chain] + oldProv := chain.ChainProvider.(*cosmos.CosmosProvider) + oldProv.PCfg.FeeGrants = prov.PCfg.FeeGrants + return nil + }) + cobra.CheckErr(cfgErr) + } + + memo, err := cmd.Flags().GetString(flagMemo) + if err != nil { + return err + } + + ctx := cmd.Context() + _, err = prov.EnsureBasicGrants(ctx, memo) + if err != nil { + return fmt.Errorf("error writing grants on chain: '%s'", err.Error()) + } + + //Get latest height from the chain, mark feegrant configuration as verified up to that height. + //This means we've verified feegranting is enabled on-chain and TXs can be sent with a feegranter. + if prov.PCfg.FeeGrants != nil { + fmt.Printf("Querying latest chain height to mark FeeGrant height... \n") + h, err := prov.QueryLatestHeight(ctx) + cobra.CheckErr(err) + + cfgErr := a.performConfigLockingOperation(cmd.Context(), func() error { + chain := a.config.Chains[chain] + oldProv := chain.ChainProvider.(*cosmos.CosmosProvider) + oldProv.PCfg.FeeGrants = prov.PCfg.FeeGrants + oldProv.PCfg.FeeGrants.BlockHeightVerified = h + fmt.Printf("Feegrant chain height marked: %d\n", h) + return nil + }) + cobra.CheckErr(cfgErr) + } + + return nil + }, + } + cmd.Flags().BoolVar(&update, "overwrite-granter", false, "allow overwriting the existing granter") + cmd.Flags().BoolVar(&updateGrantees, "overwrite-grantees", false, "allow overwriting existing grantees") + cmd.Flags().IntVar(&numGrantees, "num-grantees", 10, "number of grantees that will be feegranted with basic allowances") + cmd.Flags().StringSliceVar(&grantees, "grantees", []string{}, "comma separated list of grantee key names (keys are created if they do not exist)") + cmd.MarkFlagsMutuallyExclusive("num-grantees", "grantees") + + memoFlag(a.viper, cmd) + return cmd +} + +func feegrantBasicGrantsCmd(a *appState) *cobra.Command { + cmd := &cobra.Command{ + Use: "basic chain-name [granter]", + Short: "query the grants for an account (if none is specified, the default account is returned)", + Args: cobra.RangeArgs(1, 2), + RunE: func(cmd *cobra.Command, args []string) error { + chain := args[0] + cosmosChain, ok := a.config.Chains[chain] + if !ok { + return errChainNotFound(args[0]) + } + + prov, ok := cosmosChain.ChainProvider.(*cosmos.CosmosProvider) + if !ok { + return errors.New("only CosmosProvider can be feegranted") + } + + // TODO fix pagination + // pageReq, err := client.ReadPageRequest(cmd.Flags()) + // if err != nil { + // return err + // } + + //TODO fix height + // height, err := lensCmd.ReadHeight(cmd.Flags()) + // if err != nil { + // return err + // } + + keyNameOrAddress := "" + if len(args) == 0 { + keyNameOrAddress = prov.PCfg.Key + } else { + keyNameOrAddress = args[0] + } + + granterAcc, err := prov.AccountFromKeyOrAddress(keyNameOrAddress) + if err != nil { + fmt.Printf("Error retrieving account from key '%s'\n", keyNameOrAddress) + return err + } + granterAddr := prov.MustEncodeAccAddr(granterAcc) + + res, err := prov.QueryFeegrantsByGranter(granterAddr, nil) + if err != nil { + return err + } + + for _, grant := range res { + allowance, e := prov.Sprint(grant.Allowance) + cobra.CheckErr(e) + fmt.Printf("Granter: %s, Grantee: %s, Allowance: %s\n", grant.Granter, grant.Grantee, allowance) + } + + return nil + }, + } + return paginationFlags(a.viper, cmd, "feegrant") +} diff --git a/cmd/query.go b/cmd/query.go index 5540fb916..cd91bc2d7 100644 --- a/cmd/query.go +++ b/cmd/query.go @@ -47,6 +47,21 @@ func queryCmd(a *appState) *cobra.Command { lineBreakCommand(), queryIBCDenoms(a), queryBaseDenomFromIBCDenom(a), + feegrantQueryCmd(a), + ) + + return cmd +} + +// feegrantQueryCmd returns the fee grant query commands for this module +func feegrantQueryCmd(a *appState) *cobra.Command { + cmd := &cobra.Command{ + Use: "feegrant", + Short: "Querying commands for the feegrant module [currently BasicAllowance only]", + } + + cmd.AddCommand( + feegrantBasicGrantsCmd(a), ) return cmd diff --git a/go.work.sum b/go.work.sum index 2767b9f8c..4232792ab 100644 --- a/go.work.sum +++ b/go.work.sum @@ -7,321 +7,761 @@ cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFO cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= cloud.google.com/go/accessapproval v1.5.0 h1:/nTivgnV/n1CaAeo+ekGexTYUsKEU9jUVkoY5359+3Q= cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= +cloud.google.com/go/accessapproval v1.6.0 h1:x0cEHro/JFPd7eS4BlEWNTMecIj2HdXjOVB5BtvwER0= cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= +cloud.google.com/go/accesscontextmanager v1.7.0 h1:MG60JgnEoawHJrbWw0jGdv6HLNSf6gQvYRiXpuzqgEA= cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= +cloud.google.com/go/aiplatform v1.37.0 h1:zTw+suCVchgZyO+k847wjzdVjWmrAuehxdvcZvJwfGg= cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= +cloud.google.com/go/analytics v0.19.0 h1:LqAo3tAh2FU9+w/r7vc3hBjU23Kv7GhO/PDIW7kIYgM= cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= +cloud.google.com/go/apigateway v1.5.0 h1:ZI9mVO7x3E9RK/BURm2p1aw9YTBSCQe3klmyP1WxWEg= cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= +cloud.google.com/go/apigeeconnect v1.5.0 h1:sWOmgDyAsi1AZ48XRHcATC0tsi9SkPT7DA/+VCfkaeA= cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= +cloud.google.com/go/apigeeregistry v0.6.0 h1:E43RdhhCxdlV+I161gUY2rI4eOaMzHTA5kNkvRsFXvc= cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= +cloud.google.com/go/apikeys v0.6.0 h1:B9CdHFZTFjVti89tmyXXrO+7vSNo2jvZuHG8zD5trdQ= cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= +cloud.google.com/go/appengine v1.7.1 h1:aBGDKmRIaRRoWJ2tAoN0oVSHoWLhtO9aj/NvUyP4aYs= cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= +cloud.google.com/go/area120 v0.7.1 h1:ugckkFh4XkHJMPhTIx0CyvdoBxmOpMe8rNs4Ok8GAag= cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= +cloud.google.com/go/artifactregistry v1.13.0 h1:o1Q80vqEB6Qp8WLEH3b8FBLNUCrGQ4k5RFj0sn/sgO8= cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= +cloud.google.com/go/asset v1.13.0 h1:YAsssO08BqZ6mncbb6FPlj9h6ACS7bJQUOlzciSfbNk= cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= +cloud.google.com/go/assuredworkloads v1.10.0 h1:VLGnVFta+N4WM+ASHbhc14ZOItOabDLH1MSoDv+Xuag= cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= +cloud.google.com/go/automl v1.12.0 h1:50VugllC+U4IGl3tDNcZaWvApHBTrn/TvyHDJ0wM+Uw= cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= +cloud.google.com/go/baremetalsolution v0.5.0 h1:2AipdYXL0VxMboelTTw8c1UJ7gYu35LZYUbuRv9Q28s= cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= +cloud.google.com/go/batch v0.7.0 h1:YbMt0E6BtqeD5FvSv1d56jbVsWEzlGm55lYte+M6Mzs= cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= +cloud.google.com/go/beyondcorp v0.5.0 h1:UkY2BTZkEUAVrgqnSdOJ4p3y9ZRBPEe1LkjgC8Bj/Pc= cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= +cloud.google.com/go/bigquery v1.50.0 h1:RscMV6LbnAmhAzD893Lv9nXXy2WCaJmbxYPWDLbGqNQ= cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= +cloud.google.com/go/billing v1.13.0 h1:JYj28UYF5w6VBAh0gQYlgHJ/OD1oA+JgW29YZQU+UHM= cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= +cloud.google.com/go/binaryauthorization v1.5.0 h1:d3pMDBCCNivxt5a4eaV7FwL7cSH0H7RrEnFrTb1QKWs= cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= +cloud.google.com/go/certificatemanager v1.6.0 h1:5C5UWeSt8Jkgp7OWn2rCkLmYurar/vIWIoSQ2+LaTOc= cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= +cloud.google.com/go/channel v1.12.0 h1:GpcQY5UJKeOekYgsX3QXbzzAc/kRGtBq43fTmyKe6Uw= cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= +cloud.google.com/go/cloudbuild v1.9.0 h1:GHQCjV4WlPPVU/j3Rlpc8vNIDwThhd1U9qSY/NPZdko= cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= +cloud.google.com/go/clouddms v1.5.0 h1:E7v4TpDGUyEm1C/4KIrpVSOCTm0P6vWdHT0I4mostRA= cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= +cloud.google.com/go/cloudtasks v1.10.0 h1:uK5k6abf4yligFgYFnG0ni8msai/dSv6mDmiBulU0hU= cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= +cloud.google.com/go/contactcenterinsights v1.6.0 h1:jXIpfcH/VYSE1SYcPzO0n1VVb+sAamiLOgCw45JbOQk= cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= +cloud.google.com/go/container v1.15.0 h1:NKlY/wCDapfVZlbVVaeuu2UZZED5Dy1z4Zx1KhEzm8c= cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= +cloud.google.com/go/containeranalysis v0.9.0 h1:EQ4FFxNaEAg8PqQCO7bVQfWz9NVwZCUKaM1b3ycfx3U= cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= +cloud.google.com/go/datacatalog v1.13.0 h1:4H5IJiyUE0X6ShQBqgFFZvGGcrwGVndTwUSLP4c52gw= cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= +cloud.google.com/go/dataflow v0.8.0 h1:eYyD9o/8Nm6EttsKZaEGD84xC17bNgSKCu0ZxwqUbpg= cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= +cloud.google.com/go/dataform v0.7.0 h1:Dyk+fufup1FR6cbHjFpMuP4SfPiF3LI3JtoIIALoq48= cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= +cloud.google.com/go/datafusion v1.6.0 h1:sZjRnS3TWkGsu1LjYPFD/fHeMLZNXDK6PDHi2s2s/bk= cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= +cloud.google.com/go/datalabeling v0.7.0 h1:ch4qA2yvddGRUrlfwrNJCr79qLqhS9QBwofPHfFlDIk= cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= +cloud.google.com/go/dataplex v1.6.0 h1:RvoZ5T7gySwm1CHzAw7yY1QwwqaGswunmqEssPxU/AM= cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= +cloud.google.com/go/dataproc v1.12.0 h1:W47qHL3W4BPkAIbk4SWmIERwsWBaNnWm0P2sdx3YgGU= cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= +cloud.google.com/go/dataqna v0.7.0 h1:yFzi/YU4YAdjyo7pXkBE2FeHbgz5OQQBVDdbErEHmVQ= cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= +cloud.google.com/go/datastore v1.11.0 h1:iF6I/HaLs3Ado8uRKMvZRvF/ZLkWaWE9i8AiHzbC774= cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= +cloud.google.com/go/datastream v1.7.0 h1:BBCBTnWMDwwEzQQmipUXxATa7Cm7CA/gKjKcR2w35T0= cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= +cloud.google.com/go/deploy v1.8.0 h1:otshdKEbmsi1ELYeCKNYppwV0UH5xD05drSdBm7ouTk= cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= +cloud.google.com/go/dialogflow v1.32.0 h1:uVlKKzp6G/VtSW0E7IH1Y5o0H48/UOCmqksG2riYCwQ= cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= +cloud.google.com/go/dlp v1.9.0 h1:1JoJqezlgu6NWCroBxr4rOZnwNFILXr4cB9dMaSKO4A= cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= +cloud.google.com/go/documentai v1.18.0 h1:KM3Xh0QQyyEdC8Gs2vhZfU+rt6OCPF0dwVwxKgLmWfI= cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= +cloud.google.com/go/domains v0.8.0 h1:2ti/o9tlWL4N+wIuWUNH+LbfgpwxPr8J1sv9RHA4bYQ= cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= +cloud.google.com/go/edgecontainer v1.0.0 h1:O0YVE5v+O0Q/ODXYsQHmHb+sYM8KNjGZw2pjX2Ws41c= cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= +cloud.google.com/go/errorreporting v0.3.0 h1:kj1XEWMu8P0qlLhm3FwcaFsUvXChV/OraZwA70trRR0= cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= +cloud.google.com/go/essentialcontacts v1.5.0 h1:gIzEhCoOT7bi+6QZqZIzX1Erj4SswMPIteNvYVlu+pM= cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= +cloud.google.com/go/eventarc v1.11.0 h1:fsJmNeqvqtk74FsaVDU6cH79lyZNCYP8Rrv7EhaB/PU= cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= +cloud.google.com/go/filestore v1.6.0 h1:ckTEXN5towyTMu4q0uQ1Mde/JwTHur0gXs8oaIZnKfw= cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= +cloud.google.com/go/firestore v1.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= +cloud.google.com/go/functions v1.13.0 h1:pPDqtsXG2g9HeOQLoquLbmvmb82Y4Ezdo1GXuotFoWg= cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= +cloud.google.com/go/gaming v1.9.0 h1:7vEhFnZmd931Mo7sZ6pJy7uQPDxF7m7v8xtBheG08tc= cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= +cloud.google.com/go/gkebackup v0.4.0 h1:za3QZvw6ujR0uyqkhomKKKNoXDyqYGPJies3voUK8DA= cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= +cloud.google.com/go/gkeconnect v0.7.0 h1:gXYKciHS/Lgq0GJ5Kc9SzPA35NGc3yqu6SkjonpEr2Q= cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= +cloud.google.com/go/gkehub v0.12.0 h1:TqCSPsEBQ6oZSJgEYZ3XT8x2gUadbvfwI32YB0kuHCs= cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= +cloud.google.com/go/gkemulticloud v0.5.0 h1:8I84Q4vl02rJRsFiinBxl7WCozfdLlUVBQuSrqr9Wtk= cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= +cloud.google.com/go/grafeas v0.2.0 h1:CYjC+xzdPvbV65gi6Dr4YowKcmLo045pm18L0DhdELM= +cloud.google.com/go/gsuiteaddons v1.5.0 h1:1mvhXqJzV0Vg5Fa95QwckljODJJfDFXV4pn+iL50zzA= cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +cloud.google.com/go/iap v1.7.1 h1:PxVHFuMxmSZyfntKXHXhd8bo82WJ+LcATenq7HLdVnU= cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= +cloud.google.com/go/ids v1.3.0 h1:fodnCDtOXuMmS8LTC2y3h8t24U8F3eKWfhi+3LY6Qf0= cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= +cloud.google.com/go/iot v1.6.0 h1:39W5BFSarRNZfVG0eXI5LYux+OVQT8GkgpHCnrZL2vM= cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= +cloud.google.com/go/kms v1.10.1 h1:7hm1bRqGCA1GBRQUrp831TwJ9TWhP+tvLuP497CQS2g= cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= +cloud.google.com/go/language v1.9.0 h1:7Ulo2mDk9huBoBi8zCE3ONOoBrL6UXfAI71CLQ9GEIM= cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= +cloud.google.com/go/lifesciences v0.8.0 h1:uWrMjWTsGjLZpCTWEAzYvyXj+7fhiZST45u9AgasasI= cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= +cloud.google.com/go/logging v1.7.0 h1:CJYxlNNNNAMkHp9em/YEXcfJg+rPDg7YfwoRpMU+t5I= cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= +cloud.google.com/go/managedidentities v1.5.0 h1:ZRQ4k21/jAhrHBVKl/AY7SjgzeJwG1iZa+mJ82P+VNg= cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= +cloud.google.com/go/maps v0.7.0 h1:mv9YaczD4oZBZkM5XJl6fXQ984IkJNHPwkc8MUsdkBo= cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= +cloud.google.com/go/mediatranslation v0.7.0 h1:anPxH+/WWt8Yc3EdoEJhPMBRF7EhIdz426A+tuoA0OU= cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= +cloud.google.com/go/memcache v1.9.0 h1:8/VEmWCpnETCrBwS3z4MhT+tIdKgR1Z4Tr2tvYH32rg= cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= +cloud.google.com/go/metastore v1.10.0 h1:QCFhZVe2289KDBQ7WxaHV2rAmPrmRAdLC6gbjUd3HPo= cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= +cloud.google.com/go/monitoring v1.13.0 h1:2qsrgXGVoRXpP7otZ14eE1I568zAa92sJSDPyOJvwjM= cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= +cloud.google.com/go/networkconnectivity v1.11.0 h1:ZD6b4Pk1jEtp/cx9nx0ZYcL3BKqDa+KixNDZ6Bjs1B8= cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= +cloud.google.com/go/networkmanagement v1.6.0 h1:8KWEUNGcpSX9WwZXq7FtciuNGPdPdPN/ruDm769yAEM= cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= +cloud.google.com/go/networksecurity v0.8.0 h1:sOc42Ig1K2LiKlzG71GUVloeSJ0J3mffEBYmvu+P0eo= cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= +cloud.google.com/go/notebooks v1.8.0 h1:Kg2K3K7CbSXYJHZ1aGQpf1xi5x2GUvQWf2sFVuiZh8M= cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= +cloud.google.com/go/optimization v1.3.1 h1:dj8O4VOJRB4CUwZXdmwNViH1OtI0WtWL867/lnYH248= cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= +cloud.google.com/go/orchestration v1.6.0 h1:Vw+CEXo8M/FZ1rb4EjcLv0gJqqw89b7+g+C/EmniTb8= cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= +cloud.google.com/go/orgpolicy v1.10.0 h1:XDriMWug7sd0kYT1QKofRpRHzjad0bK8Q8uA9q+XrU4= cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= +cloud.google.com/go/osconfig v1.11.0 h1:PkSQx4OHit5xz2bNyr11KGcaFccL5oqglFPdTboyqwQ= cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= +cloud.google.com/go/oslogin v1.9.0 h1:whP7vhpmc+ufZa90eVpkfbgzJRK/Xomjz+XCD4aGwWw= cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= +cloud.google.com/go/phishingprotection v0.7.0 h1:l6tDkT7qAEV49MNEJkEJTB6vOO/onbSOcNtAT09HPuA= cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= +cloud.google.com/go/policytroubleshooter v1.6.0 h1:yKAGC4p9O61ttZUswaq9GAn1SZnEzTd0vUYXD7ZBT7Y= cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= +cloud.google.com/go/privatecatalog v0.8.0 h1:EPEJ1DpEGXLDnmc7mnCAqFmkwUJbIsaLAiLHVOkkwtc= cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= +cloud.google.com/go/pubsub v1.30.0 h1:vCge8m7aUKBJYOgrZp7EsNDf6QMd2CAlXZqWTn3yq6s= cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= +cloud.google.com/go/pubsublite v1.7.0 h1:cb9fsrtpINtETHiJ3ECeaVzrfIVhcGjhhJEjybHXHao= cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= +cloud.google.com/go/recaptchaenterprise v1.3.1 h1:u6EznTGzIdsyOsvm+Xkw0aSuKFXQlyjGE9a4exk6iNQ= +cloud.google.com/go/recaptchaenterprise/v2 v2.7.0 h1:6iOCujSNJ0YS7oNymI64hXsjGq60T4FK1zdLugxbzvU= cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= +cloud.google.com/go/recommendationengine v0.7.0 h1:VibRFCwWXrFebEWKHfZAt2kta6pS7Tlimsnms0fjv7k= cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= +cloud.google.com/go/recommender v1.9.0 h1:ZnFRY5R6zOVk2IDS1Jbv5Bw+DExCI5rFumsTnMXiu/A= cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= +cloud.google.com/go/redis v1.11.0 h1:JoAd3SkeDt3rLFAAxEvw6wV4t+8y4ZzfZcZmddqphQ8= cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= +cloud.google.com/go/resourcemanager v1.7.0 h1:NRM0p+RJkaQF9Ee9JMnUV9BQ2QBIOq/v8M+Pbv/wmCs= cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= +cloud.google.com/go/resourcesettings v1.5.0 h1:8Dua37kQt27CCWHm4h/Q1XqCF6ByD7Ouu49xg95qJzI= cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= +cloud.google.com/go/retail v1.12.0 h1:1Dda2OpFNzIb4qWgFZjYlpP7sxX3aLeypKG6A3H4Yys= cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= +cloud.google.com/go/run v0.9.0 h1:ydJQo+k+MShYnBfhaRHSZYeD/SQKZzZLAROyfpeD9zw= cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= +cloud.google.com/go/scheduler v1.9.0 h1:NpQAHtx3sulByTLe2dMwWmah8PWgeoieFPpJpArwFV0= cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= +cloud.google.com/go/secretmanager v1.10.0 h1:pu03bha7ukxF8otyPKTFdDz+rr9sE3YauS5PliDXK60= cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= +cloud.google.com/go/security v1.13.0 h1:PYvDxopRQBfYAXKAuDpFCKBvDOWPWzp9k/H5nB3ud3o= cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= +cloud.google.com/go/securitycenter v1.19.0 h1:AF3c2s3awNTMoBtMX3oCUoOMmGlYxGOeuXSYHNBkf14= cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= +cloud.google.com/go/servicecontrol v1.11.1 h1:d0uV7Qegtfaa7Z2ClDzr9HJmnbJW7jn0WhZ7wOX6hLE= cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= +cloud.google.com/go/servicedirectory v1.9.0 h1:SJwk0XX2e26o25ObYUORXx6torSFiYgsGkWSkZgkoSU= cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= +cloud.google.com/go/servicemanagement v1.8.0 h1:fopAQI/IAzlxnVeiKn/8WiV6zKndjFkvi+gzu+NjywY= cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= +cloud.google.com/go/serviceusage v1.6.0 h1:rXyq+0+RSIm3HFypctp7WoXxIA563rn206CfMWdqXX4= cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= +cloud.google.com/go/shell v1.6.0 h1:wT0Uw7ib7+AgZST9eCDygwTJn4+bHMDtZo5fh7kGWDU= cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= +cloud.google.com/go/spanner v1.45.0 h1:7VdjZ8zj4sHbDw55atp5dfY6kn1j9sam9DRNpPQhqR4= cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= +cloud.google.com/go/speech v1.15.0 h1:JEVoWGNnTF128kNty7T4aG4eqv2z86yiMJPT9Zjp+iw= cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= +cloud.google.com/go/storagetransfer v1.8.0 h1:5T+PM+3ECU3EY2y9Brv0Sf3oka8pKmsCfpQ07+91G9o= cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= +cloud.google.com/go/talent v1.5.0 h1:nI9sVZPjMKiO2q3Uu0KhTDVov3Xrlpt63fghP9XjyEM= cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= +cloud.google.com/go/texttospeech v1.6.0 h1:H4g1ULStsbVtalbZGktyzXzw6jP26RjVGYx9RaYjBzc= cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= +cloud.google.com/go/tpu v1.5.0 h1:/34T6CbSi+kTv5E19Q9zbU/ix8IviInZpzwz3rsFE+A= cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= +cloud.google.com/go/trace v1.9.0 h1:olxC0QHC59zgJVALtgqfD9tGk0lfeCP5/AGXL3Px/no= cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= +cloud.google.com/go/translate v1.7.0 h1:GvLP4oQ4uPdChBmBaUSa/SaZxCdyWELtlAaKzpHsXdA= cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= +cloud.google.com/go/video v1.15.0 h1:upIbnGI0ZgACm58HPjAeBMleW3sl5cT84AbYQ8PWOgM= cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= +cloud.google.com/go/videointelligence v1.10.0 h1:Uh5BdoET8XXqXX2uXIahGb+wTKbLkGH7s4GXR58RrG8= cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= +cloud.google.com/go/vision v1.2.0 h1:/CsSTkbmO9HC8iQpxbK8ATms3OQaX3YQUeTMGCxlaK4= +cloud.google.com/go/vision/v2 v2.7.0 h1:8C8RXUJoflCI4yVdqhTy9tRyygSHmp60aP363z23HKg= cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= +cloud.google.com/go/vmmigration v1.6.0 h1:Azs5WKtfOC8pxvkyrDvt7J0/4DYBch0cVbuFfCCFt5k= cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= +cloud.google.com/go/vmwareengine v0.3.0 h1:b0NBu7S294l0gmtrT0nOJneMYgZapr5x9tVWvgDoVEM= cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= +cloud.google.com/go/vpcaccess v1.6.0 h1:FOe6CuiQD3BhHJWt7E8QlbBcaIzVRddupwJlp7eqmn4= cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= +cloud.google.com/go/webrisk v1.8.0 h1:IY+L2+UwxcVm2zayMAtBhZleecdIFLiC+QJMzgb0kT0= cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= +cloud.google.com/go/websecurityscanner v1.5.0 h1:AHC1xmaNMOZtNqxI9Rmm87IJEyPaRkOxeI0gpAacXGk= cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= +cloud.google.com/go/workflows v1.10.0 h1:FfGp9w0cYnaKZJhUOMqCOJCYT/WlvYBfTQhFWV3sRKI= cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= +dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= +github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= +github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= +github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= +github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= +github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 h1:qoVeMsc9/fh/yhxVaA0obYjVH/oI/ihrOoMwsLS9KSA= +github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 h1:E+m3SkZCN0Bf5q7YdTs5lSm2CYY3CK4spn5OmUIiQtk= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0 h1:Px2UA+2RvSSvv+RvJNuUB6n7rs5Wsel4dXLe90Um2n4= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= +github.com/CosmWasm/wasmd v0.40.0-rc.1 h1:prIM2vP1jNh0zgs9seua5BgKdayBgp3FiHtwxFcZSGs= +github.com/CosmWasm/wasmvm v1.2.3 h1:OKYlobwmVGbl0eSn0mXoAAjE5hIuXnQCLPjbNd91sVY= +github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= +github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= +github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= +github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= +github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= +github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= +github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= +github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= +github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= +github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= +github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= +github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= +github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= +github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= +github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= +github.com/alecthomas/kingpin/v2 v2.3.1 h1:ANLJcKmQm4nIaog7xdr/id6FM6zm5hHnfZrvtKPxqGg= github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= +github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= +github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= +github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= +github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= +github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= +github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= +github.com/apache/arrow/go/v11 v11.0.0 h1:hqauxvFQxww+0mEU/2XHG6LT7eZternCZq+A5Yly2uM= +github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= +github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= +github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= +github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw= +github.com/ashanbrown/forbidigo v1.3.0 h1:VkYIwb/xxdireGAdJNZoo24O4lmnEWkactplBlWTShc= github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= +github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= +github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= +github.com/aws/aws-lambda-go v1.13.3 h1:SuCy7H3NLyp+1Mrfp+m80jcbi9KYWAs9/BXwppwRDzY= +github.com/aws/aws-sdk-go-v2 v1.9.1 h1:ZbovGV/qo40nrOJ4q8G33AGICzaPI45FHQWJ9650pF4= +github.com/aws/aws-sdk-go-v2/config v1.1.1 h1:ZAoq32boMzcaTW9bcUacBswAmHTbvlvDJICgHFZuECo= +github.com/aws/aws-sdk-go-v2/credentials v1.1.1 h1:NbvWIM1Mx6sNPTxowHgS2ewXCRp+NGTzUYb/96FZJbY= +github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 h1:EtEU7WRaWliitZh2nmuxEXrN0Cb8EgPUFGIoTMeqbzI= +github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1 h1:w/fPGB0t5rWwA43mux4e9ozFSH5zF1moQemlA131PWc= +github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 h1:4AH9fFjUlVktQMznF+YN33aWNXaR4VgDXyP28qokJC0= +github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1 h1:cKr6St+CtC3/dl/rEBJvlk7A/IN5D5F02GNkGzfbtVU= +github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 h1:37QubsarExl5ZuCBlnRP+7l1tNwZPBSTqpTBrPH98RU= +github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 h1:TJoIfnIFubCX0ACVeJ0w46HEH5MwjwYN4iFhuYIhfIY= +github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= +github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= +github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= +github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= +github.com/bradleyfalzon/ghinstallation/v2 v2.0.4 h1:tXKVfhE7FcSkhkv0UwkLvPDeZ4kz6OXd0PKPlFqf81M= +github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= +github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= +github.com/btcsuite/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= +github.com/btcsuite/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= +github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk= +github.com/bufbuild/buf v1.7.0 h1:uWRjhIXcrWkzIkA5TqXGyJbF51VW54QJsQZ3nwaes5Q= github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= +github.com/bufbuild/connect-go v1.0.0 h1:htSflKUT8y1jxhoPhPYTZMrsY3ipUXjjrbcZR5O2cVo= github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= +github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= +github.com/casbin/casbin/v2 v2.37.0 h1:/poEwPSovi4bTOcP752/CsTQiRz2xycyVKFG7GUhbDw= +github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= +github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= +github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= +github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8= +github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= +github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= +github.com/cilium/ebpf v0.7.0 h1:1k/q3ATgxSXRdrmPfH8d7YK0GfqVsEKZAX9dQZvs56k= +github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= +github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= +github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= +github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= +github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= +github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= +github.com/cloudflare/cloudflare-go v0.14.0 h1:gFqGlGl/5f9UGXAaKapCGUfaTCgRKKnzu2VvzMZlOFA= +github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195 h1:58f1tJ1ra+zFINPlwLWvQsR9CzAKt2e+EWV2yX9oXQ4= github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= +github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= +github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 h1:qbb/AE938DFhOajUYh9+OXELpSF9KZw2ZivtmW6eX1Q= +github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= +github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= +github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= +github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f h1:C43yEtQ6NIf4ftFXD/V55gnGFgPbMQobd//YlnLjUJ8= +github.com/containerd/aufs v1.0.0 h1:2oeJiwX5HstO7shSrPZjrohJZLzK36wvpdmzDRkL/LY= +github.com/containerd/btrfs v1.0.0 h1:osn1exbzdub9L5SouXO5swW4ea/xVdJZ3wokxN5GrnA= +github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= +github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= +github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU= +github.com/containerd/go-cni v1.1.6 h1:el5WPymG5nRRLQF1EfB97FWob4Tdc8INg8RZMaXWZlo= +github.com/containerd/go-runc v1.0.0 h1:oU+lLv1ULm5taqgV/CJivypVODI4SUz1znWjv3nNYS0= +github.com/containerd/imgcrypt v1.1.4 h1:iKTstFebwy3Ak5UF0RHSeuCTahC5OIrPJa6vjMAM81s= +github.com/containerd/nri v0.1.0 h1:6QioHRlThlKh2RkRTR4kIT3PKAcrLo3gIWnjkM4dQmQ= +github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= +github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= +github.com/containerd/zfs v1.0.0 h1:cXLJbx+4Jj7rNsTiqVfm6i+RNLx6FFA2fMmDlEf+Wm8= +github.com/containernetworking/cni v1.1.1 h1:ky20T7c0MvKvbMOwS/FrlbNwjEoqJEUUYfsL4b0mc4k= +github.com/containernetworking/plugins v1.1.1 h1:+AGfFigZ5TiQH00vhR8qPeSatj53eNGz0C1d3wVYlHE= +github.com/containers/ocicrypt v1.1.3 h1:uMxn2wTb4nDR7GqG3rnZSfpJXqWURfzZ7nKydzIeKpA= +github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= +github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= +github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= +github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 h1:u9SHYsPQNyt5tgDm3YN7+9dYrpK96E5wFilTFWIDZOM= github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= +github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= +github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf h1:CAKfRE2YtTUIjjh1bkBtyYFaUT/WmOqsJjgtihT0vMI= +github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32 h1:zlCp9n3uwQieELltZWHRmwPmPaZ8+XoL2Sj+A2YJlr8= +github.com/cosmos/cosmos-sdk v0.47.2/go.mod h1:zYzgI8w8hhotXTSoGbbSOAKfpJTx4wOy4XgbaKhtRtc= +github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a h1:2humuGPw3O5riJVFq/E2FRjF57UrO97W1qJcGVmK+6k= github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= +github.com/cosmos/gogoproto v1.4.8/go.mod h1:hnb0DIEWTv+wdNzNcqus5xCQXq5+CXauq1FJuurRfVY= +github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= +github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= +github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= +github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= +github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= +github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= +github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= +github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= +github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= +github.com/decred/dcrd/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= +github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= +github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= +github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= +github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= +github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= +github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= +github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ= +github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= +github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= +github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= +github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= +github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= +github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= +github.com/envoyproxy/go-control-plane v0.11.0 h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o= github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= +github.com/envoyproxy/protoc-gen-validate v0.10.0 h1:oIfnZFdC0YhpNNEX+SuIqko4cqqVZeN9IGTrhZje83Y= github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= +github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= +github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= +github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= +github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= +github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= +github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= +github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= +github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= +github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= +github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= +github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= +github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db h1:gb2Z18BhTPJPpLQWj4T+rfKHYCHxRHCtRxhKKjRidVw= +github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= +github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= +github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= +github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= +github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= +github.com/getsentry/sentry-go v0.17.0 h1:UustVWnOoDFHBS7IJUB2QK/nB5pap748ZEp0swnQJak= +github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= +github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= +github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-billy/v5 v5.4.0 h1:Vaw7LaSTRJOUric7pe4vnzBSgyuf2KrLsu2Y4ZpQBDE= github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= +github.com/go-git/go-git/v5 v5.5.2 h1:v8lgZa5k9ylUw+OR/roJHTxR4QItsNFI5nKtAXFuynw= github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= +github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= +github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= +github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= +github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= +github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= +github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= +github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= +github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= +github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= +github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= +github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= +github.com/go-zookeeper/zk v1.0.2 h1:4mx0EYENAdX/B/rbunjlt5+4RTA/a9SMHBRuSKdGxPM= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= +github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= +github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= +github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= +github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= +github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= +github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= +github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= +github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= +github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= +github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= +github.com/google/go-github/v41 v41.0.0 h1:HseJrM2JFf2vfiZJ8anY2hqBjdfY1Vlj/K27ueww4gg= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= +github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= +github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8 h1:tlyzajkF3030q6M8SvmJSemC9DTHL/xaMa18b65+JM4= +github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= +github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 h1:PVRE9d4AQKmbelZ7emNig1+NT27DUmKZn5qXxfio54U= github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= +github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= +github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= +github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= +github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= +github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= +github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= +github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= +github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= +github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= +github.com/hashicorp/consul/sdk v0.3.0 h1:UOxjlb4xVNF93jak1mzzoBatyFju9nrkxpVwIp/QqxQ= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= +github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= +github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= +github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= +github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= +github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= +github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= +github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= +github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= +github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= +github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/hudl/fargo v1.4.0 h1:ZDDILMbB37UlAVLlWcJ2Iz1XuahZZTDZfdCKeclfq2s= +github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= +github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI= +github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/influxdata/influxdb v1.8.3 h1:WEypI1BQFTT4teLM+1qkEcvUi0dAvopAI/ir0vAiBg8= +github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= +github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= +github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= +github.com/informalsystems/tm-load-test v1.3.0 h1:FGjKy7vBw6mXNakt+wmNWKggQZRsKkEYpaFk/zR64VA= github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= +github.com/intel/goresctrl v0.2.0 h1:JyZjdMQu9Kl/wLXe9xA6s1X+tF6BWsQPFGJMEeCfWzE= +github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ= +github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro= +github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= +github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= +github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= +github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= +github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= +github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= +github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a h1:d4+I1YEKVmWZrgkt6jpXBnLgV2ZjO0YxEtLDdfIZfH4= github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= +github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e h1:UvSe12bq+Uj2hWd8aOlwPmoZ+CITRFrdit+sDGfAg8U= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= +github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f h1:BNuUg9k2EiJmlMwjoef3e8vZLHplbVw6DrjGFjLL+Yo= github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= +github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= +github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= +github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= +github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= +github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= +github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= +github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= +github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= +github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= +github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= +github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= +github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= +github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= +github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= +github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= +github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= +github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= +github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= +github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= +github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= +github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= +github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= +github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= +github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= +github.com/libp2p/go-libp2p-testing v0.11.0 h1:+R7FRl/U3Y00neyBSM2qgDzqz3HkWH24U9nMlascHL4= +github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY= +github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= +github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= +github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= +github.com/libp2p/go-reuseport v0.2.0 h1:18PRvIMlpY6ZK85nIAicSBuXXvrYoSw3dsBAR7zc560= +github.com/libp2p/go-yamux/v3 v3.1.2 h1:lNEy28MBk1HavUAlzKgShp+F6mn/ea1nDYWftZhFW9Q= +github.com/libp2p/zeroconf/v2 v2.2.0 h1:Cup06Jv6u81HLhIj1KasuNM/RHHrJ8T7wOTS4+Tv53Q= +github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= +github.com/lightstep/lightstep-tracer-go v0.18.1 h1:vi1F1IQ8N7hNWytK9DpJsUfQhGuNSc19z330K6vl4zk= +github.com/lucas-clemente/quic-go v0.28.1 h1:Uo0lvVxWg5la9gflIF9lwa39ONq85Xq2D91YNEIslzU= +github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= +github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= +github.com/lyft/protoc-gen-star/v2 v2.0.1 h1:keaAo8hRuAT0O3DfJ/wM3rufbAjGeJ1lAtWZHDjKGB0= +github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= +github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= +github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= +github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= +github.com/marten-seemann/qtls-go1-17 v0.1.2 h1:JADBlm0LYiVbuSySCHeY863dNkcpMmDR7s0bLKJeYlQ= +github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM= +github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK5df3GufyYYU= +github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= +github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= @@ -335,40 +775,109 @@ github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= +github.com/mgechev/revive v1.2.4 h1:+2Hd/S8oO2H0Ikq2+egtNwQsVhAeELHjxjIUFX5ajLI= github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= +github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= +github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= +github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= +github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= +github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= +github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= +github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= +github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= +github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= +github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= +github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= +github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= +github.com/moby/buildkit v0.10.4 h1:FvC+buO8isGpUFZ1abdSLdGHZVqg9sqI4BbFL8tlzP4= github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= +github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= +github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= +github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI= +github.com/moby/sys/signal v0.6.0 h1:aDpY94H8VlhTGa9sNYUFCFsMZIUh5wm0B6XkIoJj/iY= +github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZc= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= +github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= +github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= +github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= +github.com/multiformats/go-multistream v0.3.3 h1:d5PZpjwRgVlbwfdTDjife7XszfZd8KYWfROYFlGcR8o= +github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76 h1:0xuRacu/Zr+jX+KyLLPPktbwXqyOvnOPUQmMLzX1jxU= +github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= +github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= +github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= +github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= +github.com/nats-io/jwt/v2 v2.0.3 h1:i/O6cmIsjpcQyWDYNcq2JyZ3/VTF8SJ4JWluI5OhpvI= +github.com/nats-io/nats-server/v2 v2.5.0 h1:wsnVaaXH9VRSg+A2MVg5Q727/CqxnmPLGFQ3YZYKTQg= +github.com/nats-io/nats.go v1.12.1 h1:+0ndxwUPz3CmQ2vjbXdkC1fo3FdiOQDim4gl3Mge8Qo= +github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= +github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= +github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= +github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= +github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= +github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= +github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= +github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= +github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= +github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= +github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= +github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w= +github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= +github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= +github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= +github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU= +github.com/openzipkin/zipkin-go v0.2.5 h1:UwtQQx2pyPIgWYHRg+epgdx1/HnBQTgN3/oIYEJTQzU= github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= +github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q= +github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= +github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= +github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= +github.com/performancecopilot/speed/v4 v4.0.0 h1:VxEDCmdkfbQYDlcr/GC9YoN9PQ6p8ulk9xVsepYy9ZY= +github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= +github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= +github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= +github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= +github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= +github.com/pkg/profile v1.6.0 h1:hUDfIISABYI59DyeB3OTay/HxSRwTQ8rB/H83k6r5dM= github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= +github.com/pkg/sftp v1.13.1 h1:I2qBYMChEhIjOgazfJmV3/mZM256btk6wkCDRmW7JYs= +github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3 h1:hUmXhbljNFtrH5hzV9kiRoddZ5nfPTq3K0Sb2hYYiqE= github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= +github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4 h1:RHHRCZeaNyBXdYPMjZNH8/XHDBH38TZzw8izrW7dmBE= github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= +github.com/pointlander/peg v1.0.1 h1:mgA/GQE8TeS9MdkU6Xn6iEzBmQUQCNuWD7rHCK6Mjs0= github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= +github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= +github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= @@ -379,87 +888,185 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= +github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= +github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= +github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= +github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= +github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= +github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 h1:xe+mmCnDN82KhC010l3NfYlA8ZbOuzbXAzSYBa6wbMc= github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= +github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= +github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= +github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= +github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= +github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1rEOtBp4= github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= +github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= +github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= +github.com/sagikazarmark/crypt v0.10.0 h1:96E1qrToLBU6fGzo+PRRz7KGOc9FkYFiPnR3/zf8Smg= github.com/sagikazarmark/crypt v0.10.0/go.mod h1:gwTNHQVoOS3xp9Xvz5LLR+1AauC5M6880z5NWzdhOyQ= +github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= +github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= +github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= +github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= +github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= +github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= +github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:RpforrEYXWkmGwJHIGnLZ3tTWStkjVVstwzNGqxX2Ds= +github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= +github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= +github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= +github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= +github.com/sivchari/tenv v1.7.0 h1:d4laZMBK6jpe5PWepxlV9S+LC0yXqvYHiq8E6ceoVVE= github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= +github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= +github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= +github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= +github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= +github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= +github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= +github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= +github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= +github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= +github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= +github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 h1:lIOOHPEbXzO3vnmx2gok1Tfs31Q8GQqKLc8vVqyQq/I= +github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= +github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e h1:mOtuXaRAbVZsxAHVdPR3IjfmN8T1h2iczJLynhLybf8= github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= +github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 h1:m+8fKfQwCAy1QjzINvKe/pYtLjo2dl59x2w9YSEJxuY= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= +github.com/tchap/go-patricia v2.2.6+incompatible h1:JvoDL7JSoIP2HDE8AbDH3zC8QBPxmzYe32HHy5yQ+Ck= +github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= +github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= +github.com/tendermint/tendermint v0.37.0-rc2 h1:2n1em+jfbhSv6QnBj8F6KHCpbIzZCB8KgcjidJUQNlY= +github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= +github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= +github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= +github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= +github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 h1:ndzgwNDnKIqyCvHTXaCqh9KlOWKvBry6nuXMJmonVsE= +github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= +github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= +github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= +github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= +github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= +github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= +github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= +github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= +github.com/vektra/mockery/v2 v2.14.0 h1:KZ1p5Hrn8tiY+LErRMr14HHle6khxo+JKOXLBW/yfqs= github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= +github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5 h1:+UB2BJA852UkGH42H+Oee69djmxS3ANzl2b/JtT1YiA= +github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= +github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xhit/go-str2duration v1.2.0 h1:BcV5u025cITWxEQKGWr1URRzrcXtu7uk8+luz3Yuhwc= github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= +github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= +github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= +github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= +github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= +go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= +go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE= go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= +go.etcd.io/etcd/client/v2 v2.305.7 h1:AELPkjNR3/igjbO7CjyF1fPuVPjrblliiKj+Y6xSGOU= go.etcd.io/etcd/client/v2 v2.305.7/go.mod h1:GQGT5Z3TBuAQGvgPfhR7VPySu/SudxmEkRq9BgzFU6s= +go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E= go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= +go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= +go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwfMkW0JX+cIcQi/SwLAmZP5M= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3 h1:syAz40OyelLZo42+3U68Phisvrx4qh+4wpdZw7eUUdY= go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= +go.opentelemetry.io/otel v1.11.0 h1:kfToEGMDq6TrVrJ9Vht84Y8y9enykSZzDDZglV0kIEk= go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= +go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0 h1:R/OBkMoGgfy2fLhs2QhkCI1w4HLEQX92GCcJB6SSdNk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0 h1:giGm8w67Ja7amYNfYMdme7xSp2pIxThWopw8+QP51Yk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0 h1:VQbUHoJqytHHSJ1OZodPH9tvZZSVzUHjPHpkO85sT6k= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0 h1:Ydage/P0fRrSPpZeCVxzjqGcI6iVmG2xb43+IR8cjqM= +go.opentelemetry.io/otel/sdk v1.3.0 h1:3278edCoH89MEJ0Ky8WQXVmDQv3FX4ZJ3Pp+9fJreAI= +go.opentelemetry.io/otel/trace v1.11.0 h1:20U/Vj42SX+mASlXLmSGBg6jpI1jQtv682lZtTAOVFI= go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= +go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= +go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= +golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= @@ -467,19 +1074,23 @@ golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.8.0/go.mod h1:mRqEX+O9/h5TFCrQhkgjo2yKi0yYA+9ecGkdQoHrywE= golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp v0.0.0-20221205204356-47842c84f3db/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= +golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= +golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= +golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -522,6 +1133,7 @@ golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/time v0.1.0/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/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -557,16 +1169,20 @@ golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= +gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= @@ -575,20 +1191,48 @@ google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsA google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.27 h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo= +gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= +gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= +gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= +gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= +gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= +gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= +gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= +honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= +k8s.io/api v0.22.5 h1:xk7C+rMjF/EGELiD560jdmwzrB788mfcHiNbMQLIVI8= +k8s.io/apimachinery v0.22.5 h1:cIPwldOYm1Slq9VLBRPtEYpyhjIm1C6aAMAoENuvN9s= +k8s.io/apiserver v0.22.5 h1:71krQxCUz218ecb+nPhfDsNB6QgP1/4EMvi1a2uYBlg= +k8s.io/client-go v0.22.5 h1:I8Zn/UqIdi2r02aZmhaJ1hqMxcpfJ3t5VqvHtctHYFo= +k8s.io/component-base v0.22.5 h1:U0eHqZm7mAFE42hFwYhY6ze/MmVaW00JpMrzVsQmzYE= +k8s.io/cri-api v0.23.1 h1:0DHL/hpTf4Fp+QkUXFefWcp1fhjXr9OlNdY9X99c+O8= +k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= +k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= +mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= +mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= +mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= +mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLtskWyueeIzmLXghMGgk= mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= +rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= +rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= +rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= +sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= +sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= diff --git a/interchaintest/acc_cache_test.go b/interchaintest/acc_cache_test.go new file mode 100644 index 000000000..a2d0fbbc2 --- /dev/null +++ b/interchaintest/acc_cache_test.go @@ -0,0 +1,44 @@ +package interchaintest + +import ( + "testing" + + "github.com/cometbft/cometbft/crypto/ed25519" + "github.com/cosmos/cosmos-sdk/types" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/stretchr/testify/require" +) + +// See https://github.com/cosmos/cosmos-sdk/issues/15317 for description of bug. +// Basically, in cosmos SDK, there is an account address cache that will ignore the bech32 prefix setting. +// This will cause the AccAddress.String() to print out unexpected prefixes. +// If this function fails you are on an unsafe SDK version that should NOT be used with the relayer. +func TestAccCacheBugfix(t *testing.T) { + types.SetAddrCacheEnabled(false) + + // Use a random key + priv := ed25519.GenPrivKey() + pub := priv.PubKey() + + //Set to 'osmo' + prefix := "osmo" + sdkConf := sdk.GetConfig() + sdkConf.SetBech32PrefixForAccount(prefix, prefix+"pub") + sdkConf.SetBech32PrefixForValidator(prefix+"valoper", prefix+"valoperpub") + sdkConf.SetBech32PrefixForConsensusNode(prefix+"valcons", prefix+"valconspub") + + addrOsmo := sdk.AccAddress(pub.Address()) + osmoAddrBech32 := addrOsmo.String() + + //Set to 'cosmos' + prefix = "cosmos" + sdkConf.SetBech32PrefixForAccount(prefix, prefix+"pub") + sdkConf.SetBech32PrefixForValidator(prefix+"valoper", prefix+"valoperpub") + sdkConf.SetBech32PrefixForConsensusNode(prefix+"valcons", prefix+"valconspub") + + addrCosmos := sdk.AccAddress(pub.Address()) + cosmosAddrBech32 := addrCosmos.String() + + //If the addresses are equal, the AccAddress caching caused a bug + require.NotEqual(t, osmoAddrBech32, cosmosAddrBech32) +} diff --git a/interchaintest/client_threshold_test.go b/interchaintest/client_threshold_test.go index 8b608ca68..bc6e22a12 100644 --- a/interchaintest/client_threshold_test.go +++ b/interchaintest/client_threshold_test.go @@ -12,6 +12,7 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" + "go.uber.org/zap" "go.uber.org/zap/zaptest" "golang.org/x/sync/errgroup" ) @@ -24,8 +25,6 @@ const ( // Tests that the Relayer will update light clients within a // user specified time threshold. func TestScenarioClientThresholdUpdate(t *testing.T) { - t.Parallel() - ctx := context.Background() nv := 1 @@ -85,6 +84,9 @@ func TestScenarioClientThresholdUpdate(t *testing.T) { Client: client, NetworkID: network, })) + + t.Parallel() + t.Cleanup(func() { _ = ic.Close() }) @@ -144,9 +146,8 @@ func TestScenarioClientThresholdUpdate(t *testing.T) { // Tests that without the threshold flag, the clients will be updated // automatically due to passing 2/3 trusting period expiration. func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { - t.Parallel() - ctx := context.Background() + t.Parallel() nv := 1 nf := 0 @@ -164,12 +165,13 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { client, network := interchaintest.DockerSetup(t) relayerinterchaintest.BuildRelayerImage(t) + logger := zaptest.NewLogger(t) // Relayer is set with "--time-threshold 0" // The Relayer should NOT continuously update clients r := interchaintest.NewBuiltinRelayerFactory( ibc.CosmosRly, - zaptest.NewLogger(t), + logger, interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"), interchaintestrelayer.ImagePull(false), ).Build(t, client, network) @@ -203,18 +205,24 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { SkipPathCreation: false, })) + t.Cleanup(func() { _ = ic.Close() }) // Wait 2 blocks after building interchain require.NoError(t, testutil.WaitForBlocks(ctx, 2, g0, g1)) + g0Ctx := context.Background() + g1Ctx := context.Background() - g0Height, err := g0.Height(ctx) + g0Height, err := g0.Height(g0Ctx) require.NoError(t, err) - g1Height, err := g1.Height(ctx) + g1Height, err := g1.Height(g1Ctx) require.NoError(t, err) + logger.Info("Chain height", zap.String("g0 chainID", g0.Config().ChainID), zap.Uint64("height", g0Height)) + logger.Info("Chain height", zap.String("g1 chainID", g1.Config().ChainID), zap.Uint64("g1 height", g1Height)) + require.NoError(t, r.StartRelayer(ctx, eRep, ibcPath)) t.Cleanup(func() { _ = r.StopRelayer(ctx, eRep) @@ -222,13 +230,13 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { const heightOffset = 10 - g0Conns, err := r.GetConnections(ctx, eRep, g0ChainId) + g0Conns, err := r.GetConnections(g0Ctx, eRep, g0ChainId) require.NoError(t, err) require.Len(t, g0Conns, 1) g0ClientID := g0Conns[0].ClientID - g1Conns, err := r.GetConnections(ctx, eRep, g1ChainId) + g1Conns, err := r.GetConnections(g1Ctx, eRep, g1ChainId) require.NoError(t, err) require.Len(t, g1Conns, 1) @@ -236,7 +244,11 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { var eg errgroup.Group eg.Go(func() error { - msg, err := pollForUpdateClient(ctx, g0, g0Height, g0Height+heightOffset) + updatedG0Height, err := g0.Height(g0Ctx) + require.NoError(t, err) + logger.Info("G0 Chain height (2)", zap.String("g0 chainID", g0.Config().ChainID), zap.Uint64("g0 height", updatedG0Height)) + + msg, err := pollForUpdateClient(g0Ctx, g0, updatedG0Height, updatedG0Height+heightOffset) if err != nil { return fmt.Errorf("first chain: %w", err) } @@ -246,7 +258,11 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { return nil }) eg.Go(func() error { - msg, err := pollForUpdateClient(ctx, g1, g1Height, g1Height+heightOffset) + updatedG1Height, err := g1.Height(g1Ctx) + require.NoError(t, err) + logger.Info("G1 Chain height (2)", zap.String("g1 chainID", g1.Config().ChainID), zap.Uint64("g1 height", updatedG1Height)) + + msg, err := pollForUpdateClient(g1Ctx, g1, updatedG1Height, updatedG1Height+heightOffset) if err != nil { return fmt.Errorf("second chain: %w", err) } diff --git a/interchaintest/fee_middleware_test.go b/interchaintest/fee_middleware_test.go index 93caad39e..850fe27d7 100644 --- a/interchaintest/fee_middleware_test.go +++ b/interchaintest/fee_middleware_test.go @@ -21,8 +21,6 @@ func TestRelayerFeeMiddleware(t *testing.T) { t.Skip() } - t.Parallel() - nv := 1 nf := 0 @@ -73,11 +71,13 @@ func TestRelayerFeeMiddleware(t *testing.T) { SkipPathCreation: false, })) + t.Parallel() + t.Cleanup(func() { _ = ic.Close() }) - err = testutil.WaitForBlocks(ctx, 10, chainA, chainB) + err = testutil.WaitForBlocks(ctx, 5, chainA, chainB) require.NoError(t, err) // ChainID of ChainA diff --git a/interchaintest/feegrant_test.go b/interchaintest/feegrant_test.go new file mode 100644 index 000000000..0d0dcd13a --- /dev/null +++ b/interchaintest/feegrant_test.go @@ -0,0 +1,532 @@ +package interchaintest + +import ( + "context" + "encoding/hex" + "fmt" + "math/rand" + "strings" + "testing" + "time" + + "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" + transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + chantypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" + "github.com/cosmos/relayer/v2/relayer" + "github.com/cosmos/relayer/v2/relayer/chains/cosmos" + "github.com/cosmos/relayer/v2/relayer/processor" + interchaintest "github.com/strangelove-ventures/interchaintest/v7" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/testreporter" + "github.com/strangelove-ventures/interchaintest/v7/testutil" + "github.com/stretchr/testify/require" + "go.uber.org/zap/zaptest" + "golang.org/x/sync/errgroup" +) + +// protoTxProvider is a type which can provide a proto transaction. It is a +// workaround to get access to the wrapper TxBuilder's method GetProtoTx(). +type protoTxProvider interface { + GetProtoTx() *txtypes.Tx +} + +type chainFeegrantInfo struct { + granter string + grantees []string +} + +func genMnemonic(t *testing.T) string { + // read entropy seed straight from tmcrypto.Rand and convert to mnemonic + entropySeed, err := bip39.NewEntropy(256) + if err != nil { + t.Fail() + } + + mn, err := bip39.NewMnemonic(entropySeed) + if err != nil { + t.Fail() + } + + return mn +} + +// TestScenarioFeegrantBasic Feegrant on a single chain +// Run this test with e.g. go test -timeout 300s -run ^TestScenarioFeegrantBasic$ github.com/cosmos/relayer/v2/ibctest. +// +// Helpful to debug: +// docker ps -a --format {{.Names}} then e.g. docker logs gaia-1-val-0-TestScenarioFeegrantBasic 2>&1 -f +func TestScenarioFeegrantBasic(t *testing.T) { + ctx := context.Background() + logger := zaptest.NewLogger(t) + + nv := 1 + nf := 0 + + //In order to have this image locally you'd need to build it with heighliner, e.g., + //from within the local "gaia" directory, run the following command: + //../heighliner/heighliner build -c gaia --local -f ../heighliner/chains.yaml + // gaiaImage := ibc.DockerImage{ + // Repository: "gaia", + // Version: "local", + // UidGid: "1025:1025", //the heighliner user string. this isn't exposed on ibctest + // } + + // gaiaChainSpec := &interchaintest.ChainSpec{ + // ChainName: "gaia", + // NumValidators: &nv, + // NumFullNodes: &nf, + // ChainConfig: ibc.ChainConfig{ + // Type: "cosmos", + // Name: "gaia", + // //ChainID: "gaia-1", //I believe this will be auto-generated? + // Images: []ibc.DockerImage{gaiaImage}, + // Bin: "gaiad", + // Bech32Prefix: "cosmos", + // Denom: "uatom", + // GasPrices: "0.01uatom", + // TrustingPeriod: "504h", + // GasAdjustment: 1.3, + // }} + + // Chain Factory + cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + {Name: "gaia", ChainName: "gaia", Version: "v7.0.3", NumValidators: &nv, NumFullNodes: &nf}, + {Name: "osmosis", ChainName: "osmosis", Version: "v14.0.1", NumValidators: &nv, NumFullNodes: &nf}, + }) + + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + gaia, osmosis := chains[0], chains[1] + + // Relayer Factory to construct relayer + r := NewRelayerFactory(RelayerConfig{ + Processor: relayer.ProcessorEvents, + InitialBlockHistory: 100, + }).Build(t, nil, "") + + processor.PathProcMessageCollector = make(chan *processor.PathProcessorMessageResp, 10000) + + // Prep Interchain + const ibcPath = "gaia-osmosis" + ic := interchaintest.NewInterchain(). + AddChain(gaia). + AddChain(osmosis). + AddRelayer(r, "relayer"). + AddLink(interchaintest.InterchainLink{ + Chain1: gaia, + Chain2: osmosis, + Relayer: r, + Path: ibcPath, + }) + + // Reporter/logs + rep := testreporter.NewNopReporter() + eRep := rep.RelayerExecReporter(t) + + client, network := interchaintest.DockerSetup(t) + + // Build interchain + require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + + SkipPathCreation: false, + })) + + t.Parallel() + + // Get Channel ID + gaiaChans, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) + require.NoError(t, err) + gaiaChannel := gaiaChans[0] + osmosisChannel := gaiaChans[0].Counterparty + + // Create and Fund User Wallets + fundAmount := int64(10_000_000) + + // Tiny amount of funding, not enough to pay for a single TX fee (the GRANTER should be paying the fee) + granteeFundAmount := int64(10) + granteeKeyPrefix := "grantee1" + grantee2KeyPrefix := "grantee2" + grantee3KeyPrefix := "grantee3" + granterKeyPrefix := "default" + + mnemonicAny := genMnemonic(t) + gaiaGranterWallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, granterKeyPrefix, mnemonicAny, int64(fundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaGranteeWallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, granteeKeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaGrantee2Wallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, grantee2KeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaGrantee3Wallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, grantee3KeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + osmosisUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, "recipient", mnemonicAny, int64(fundAmount), osmosis) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, "recipient", mnemonicAny, int64(fundAmount), gaia) + require.NoError(t, err) + + mnemonic := gaiaGranterWallet.Mnemonic() + fmt.Printf("Wallet mnemonic: %s\n", mnemonic) + + rand.Seed(time.Now().UnixNano()) + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGranterWallet.KeyName(), + gaiaGranterWallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGranteeWallet.KeyName(), + gaiaGranteeWallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGrantee2Wallet.KeyName(), + gaiaGrantee2Wallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGrantee3Wallet.KeyName(), + gaiaGrantee3Wallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + osmosis.Config(), + osmosisUser.KeyName(), + osmosisUser.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", osmosis.Config().ChainID, err.Error()) + } + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + osmosis.Config(), + gaiaUser.KeyName(), + gaiaUser.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } + + gaiaGranteeAddr := gaiaGranteeWallet.FormattedAddress() + gaiaGrantee2Addr := gaiaGrantee2Wallet.FormattedAddress() + gaiaGrantee3Addr := gaiaGrantee3Wallet.FormattedAddress() + gaiaGranterAddr := gaiaGranterWallet.FormattedAddress() + + granteeCsv := gaiaGranteeWallet.KeyName() + "," + gaiaGrantee2Wallet.KeyName() + "," + gaiaGrantee3Wallet.KeyName() + + //You MUST run the configure feegrant command prior to starting the relayer, otherwise it'd be like you never set it up at all (within this test) + //Note that Gaia supports feegrants, but Osmosis does not (x/feegrant module, or any compatible module, is not included in Osmosis SDK app modules) + localRelayer := r.(*Relayer) + res := localRelayer.sys().Run(logger, "chains", "configure", "feegrant", "basicallowance", gaia.Config().ChainID, gaiaGranterWallet.KeyName(), "--grantees", granteeCsv, "--overwrite-granter") + if res.Err != nil { + fmt.Printf("configure feegrant results: %s\n", res.Stdout.String()) + t.Fatalf("failed to rly config feegrants: %v", res.Err) + } + + //Map of feegranted chains and the feegrant info for the chain + feegrantedChains := map[string]*chainFeegrantInfo{} + feegrantedChains[gaia.Config().ChainID] = &chainFeegrantInfo{granter: gaiaGranterAddr, grantees: []string{gaiaGranteeAddr, gaiaGrantee2Addr, gaiaGrantee3Addr}} + + time.Sleep(14 * time.Second) //commit a couple blocks + r.StartRelayer(ctx, eRep, ibcPath) + + // Send Transaction + amountToSend := int64(1_000) + + gaiaDstAddress := types.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, gaiaUser.Address()) + osmosisDstAddress := types.MustBech32ifyAddressBytes(gaia.Config().Bech32Prefix, osmosisUser.Address()) + + gaiaHeight, err := gaia.Height(ctx) + require.NoError(t, err) + + osmosisHeight, err := osmosis.Height(ctx) + require.NoError(t, err) + + var eg errgroup.Group + var gaiaTx ibc.Tx + + eg.Go(func() error { + gaiaTx, err = gaia.SendIBCTransfer(ctx, gaiaChannel.ChannelID, gaiaUser.KeyName(), ibc.WalletAmount{ + Address: gaiaDstAddress, + Denom: gaia.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := gaiaTx.Validate(); err != nil { + return err + } + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+20, gaiaTx.Packet) + return err + }) + + eg.Go(func() error { + tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ + Address: osmosisDstAddress, + Denom: osmosis.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := tx.Validate(); err != nil { + return err + } + _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) + return err + }) + + eg.Go(func() error { + tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ + Address: osmosisDstAddress, + Denom: osmosis.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := tx.Validate(); err != nil { + return err + } + _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) + return err + }) + + eg.Go(func() error { + tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ + Address: osmosisDstAddress, + Denom: osmosis.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := tx.Validate(); err != nil { + return err + } + _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) + return err + }) + + require.NoError(t, err) + require.NoError(t, eg.Wait()) + + feegrantMsgSigners := map[string][]string{} //chain to list of signers + + for len(processor.PathProcMessageCollector) > 0 { + select { + case curr, ok := <-processor.PathProcMessageCollector: + if ok && curr.Error == nil && curr.SuccessfulTx { + cProv, cosmProv := curr.DestinationChain.(*cosmos.CosmosProvider) + if cosmProv { + chain := cProv.PCfg.ChainID + feegrantInfo, isFeegrantedChain := feegrantedChains[chain] + if isFeegrantedChain && !strings.Contains(cProv.PCfg.KeyDirectory, t.Name()) { + //This would indicate that a parallel test is inserting msgs into the queue. + //We can safely skip over any messages inserted by other test cases. + fmt.Println("Skipping PathProcessorMessageResp from unrelated Parallel test case") + continue + } + + done := cProv.SetSDKContext() + + hash, err := hex.DecodeString(curr.Response.TxHash) + require.Nil(t, err) + txResp, err := TxWithRetry(ctx, cProv.RPCClient, hash) + require.Nil(t, err) + + require.Nil(t, err) + dc := cProv.Cdc.TxConfig.TxDecoder() + tx, err := dc(txResp.Tx) + require.Nil(t, err) + builder, err := cProv.Cdc.TxConfig.WrapTxBuilder(tx) + require.Nil(t, err) + txFinder := builder.(protoTxProvider) + fullTx := txFinder.GetProtoTx() + isFeegrantedMsg := false + + msgs := "" + msgType := "" + for _, m := range fullTx.GetMsgs() { + msgType = types.MsgTypeURL(m) + //We want all IBC transfers (on an open channel/connection) to be feegranted in round robin fashion + if msgType == "/ibc.core.channel.v1.MsgRecvPacket" || msgType == "/ibc.core.channel.v1.MsgAcknowledgement" { + isFeegrantedMsg = true + msgs += msgType + ", " + } else { + msgs += msgType + ", " + } + } + + //It's required that TXs be feegranted in a round robin fashion for this chain and message type + if isFeegrantedChain && isFeegrantedMsg { + fmt.Printf("Msg types: %+v\n", msgs) + signers := fullTx.GetSigners() + require.Equal(t, len(signers), 1) + granter := fullTx.FeeGranter() + + //Feegranter for the TX that was signed on chain must be the relayer chain's configured feegranter + require.Equal(t, feegrantInfo.granter, granter.String()) + require.NotEmpty(t, granter) + + for _, msg := range fullTx.GetMsgs() { + msgType = types.MsgTypeURL(msg) + //We want all IBC transfers (on an open channel/connection) to be feegranted in round robin fashion + if msgType == "/ibc.core.channel.v1.MsgRecvPacket" { + c := msg.(*chantypes.MsgRecvPacket) + appData := c.Packet.GetData() + tokenTransfer := &transfertypes.FungibleTokenPacketData{} + err := tokenTransfer.Unmarshal(appData) + if err == nil { + fmt.Printf("%+v\n", tokenTransfer) + } else { + fmt.Println(string(appData)) + } + } + } + + //Grantee for the TX that was signed on chain must be a configured grantee in the relayer's chain feegrants. + //In addition, the grantee must be used in round robin fashion + //expectedGrantee := nextGrantee(feegrantInfo) + actualGrantee := signers[0].String() + signerList, ok := feegrantMsgSigners[chain] + if ok { + signerList = append(signerList, actualGrantee) + feegrantMsgSigners[chain] = signerList + } else { + feegrantMsgSigners[chain] = []string{actualGrantee} + } + fmt.Printf("Chain: %s, msg type: %s, height: %d, signer: %s, granter: %s\n", chain, msgType, curr.Response.Height, actualGrantee, granter.String()) + } + done() + } + } + default: + fmt.Println("Unknown channel message") + } + } + + for chain, signers := range feegrantMsgSigners { + require.Equal(t, chain, gaia.Config().ChainID) + signerCountMap := map[string]int{} + + for _, signer := range signers { + count, ok := signerCountMap[signer] + if ok { + signerCountMap[signer] = count + 1 + } else { + signerCountMap[signer] = 1 + } + } + + highestCount := 0 + for _, count := range signerCountMap { + if count > highestCount { + highestCount = count + } + } + + //At least one feegranter must have signed a TX + require.GreaterOrEqual(t, highestCount, 1) + + //All of the feegrantees must have signed at least one TX + expectedFeegrantInfo := feegrantedChains[chain] + require.Equal(t, len(signerCountMap), len(expectedFeegrantInfo.grantees)) + + // verify that TXs were signed in a round robin fashion. + // no grantee should have signed more TXs than any other grantee (off by one is allowed). + for signer, count := range signerCountMap { + fmt.Printf("signer %s signed %d feegranted TXs \n", signer, count) + require.LessOrEqual(t, highestCount-count, 1) + } + } + + // Trace IBC Denom + gaiaDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(osmosisChannel.PortID, osmosisChannel.ChannelID, gaia.Config().Denom)) + gaiaIbcDenom := gaiaDenomTrace.IBCDenom() + + osmosisDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(gaiaChannel.PortID, gaiaChannel.ChannelID, osmosis.Config().Denom)) + osmosisIbcDenom := osmosisDenomTrace.IBCDenom() + + // Test destination wallets have increased funds + gaiaIBCBalance, err := osmosis.GetBalance(ctx, gaiaDstAddress, gaiaIbcDenom) + require.NoError(t, err) + require.Equal(t, amountToSend, gaiaIBCBalance) + + osmosisIBCBalance, err := gaia.GetBalance(ctx, osmosisDstAddress, osmosisIbcDenom) + require.NoError(t, err) + require.Equal(t, 3*amountToSend, osmosisIBCBalance) + + // Test grantee still has exact amount expected + gaiaGranteeIBCBalance, err := gaia.GetBalance(ctx, gaiaGranteeAddr, gaia.Config().Denom) + require.NoError(t, err) + require.Equal(t, granteeFundAmount, gaiaGranteeIBCBalance) + + // Test granter has less than they started with, meaning fees came from their account + gaiaGranterIBCBalance, err := gaia.GetBalance(ctx, gaiaGranterAddr, gaia.Config().Denom) + require.NoError(t, err) + require.Less(t, gaiaGranterIBCBalance, fundAmount) + r.StopRelayer(ctx, eRep) +} + +func TxWithRetry(ctx context.Context, client rpcclient.Client, hash []byte) (*ctypes.ResultTx, error) { + var err error + var res *ctypes.ResultTx + if err = retry.Do(func() error { + res, err = client.Tx(ctx, hash, true) + return err + }, retry.Context(ctx), relayer.RtyAtt, relayer.RtyDel, relayer.RtyErr); err != nil { + return res, err + } + + return res, err +} diff --git a/interchaintest/go.mod b/interchaintest/go.mod index 6d4e1f484..6352c1099 100644 --- a/interchaintest/go.mod +++ b/interchaintest/go.mod @@ -3,12 +3,13 @@ module github.com/cosmos/relayer/v2/interchaintest go 1.20 require ( - cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff + cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 github.com/cometbft/cometbft v0.37.2 github.com/cosmos/cosmos-sdk v0.47.3 + github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/ibc-go/v7 v7.2.0 - github.com/cosmos/relayer/v2 v2.0.0-00010101000000-000000000000 + github.com/cosmos/relayer/v2 v2.0.0 github.com/docker/docker v24.0.1+incompatible github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/moby/moby v24.0.2+incompatible @@ -64,7 +65,6 @@ require ( github.com/containerd/containerd v1.6.8 // indirect github.com/cosmos/btcutil v1.0.5 // indirect github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect - github.com/cosmos/go-bip39 v1.0.0 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect diff --git a/interchaintest/go.sum b/interchaintest/go.sum index 37d2d6154..74c50689d 100644 --- a/interchaintest/go.sum +++ b/interchaintest/go.sum @@ -200,8 +200,8 @@ cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= -cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff h1:P1ialzTepD1oxdNPYc5N8Eggq3RdejZq3cJs8YYMs9Y= -cosmossdk.io/simapp v0.0.0-20230323161446-0af178d721ff/go.mod h1:AKzx6Mb544LjJ9RHmGFHjY9rEOLiUAi8I0F727TR0dY= +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/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -484,8 +484,8 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= +github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -507,8 +507,8 @@ github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8c github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= -github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -520,7 +520,6 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= diff --git a/interchaintest/ica_channel_close_test.go b/interchaintest/ica_channel_close_test.go index b21a41c32..6eac44b64 100644 --- a/interchaintest/ica_channel_close_test.go +++ b/interchaintest/ica_channel_close_test.go @@ -26,8 +26,6 @@ func TestScenarioICAChannelClose(t *testing.T) { t.Skip("skipping in short mode") } - t.Parallel() - client, network := interchaintest.DockerSetup(t) rep := testreporter.NewNopReporter() @@ -93,6 +91,8 @@ func TestScenarioICAChannelClose(t *testing.T) { // BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), })) + t.Parallel() + // Fund a user account on chain1 and chain2 const userFunds = int64(10_000_000_000) users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, chain1, chain2) @@ -244,7 +244,7 @@ func TestScenarioICAChannelClose(t *testing.T) { // Wait for ack _, err = cosmos.PollForMessage(ctx, chain1, ir, - c1h, c1h+10, ackFound) + c1h, c1h+25, ackFound) require.NoError(t, err) // Assert that the funds have been received by the user account on chain2 @@ -311,7 +311,7 @@ func TestScenarioICAChannelClose(t *testing.T) { // Wait for channel open confirm _, err = cosmos.PollForMessage(ctx, chain2, ir, - c2h, c2h+30, channelFound) + c2h, c2h+40, channelFound) require.NoError(t, err) // Assert that a new channel has been opened and the same ICA is in use diff --git a/interchaintest/interchain_accounts_test.go b/interchaintest/interchain_accounts_test.go index 0185b2bc2..0ec0a1df5 100644 --- a/interchaintest/interchain_accounts_test.go +++ b/interchaintest/interchain_accounts_test.go @@ -27,8 +27,6 @@ func TestScenarioInterchainAccounts(t *testing.T) { t.Skip("skipping in short mode") } - t.Parallel() - client, network := interchaintest.DockerSetup(t) rep := testreporter.NewNopReporter() @@ -94,6 +92,8 @@ func TestScenarioInterchainAccounts(t *testing.T) { // BlockDatabaseFile: interchaintest.DefaultBlockDatabaseFilepath(), })) + t.Parallel() + // Fund a user account on chain1 and chain2 const userFunds = int64(10_000_000_000) users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, chain1, chain2) diff --git a/interchaintest/misbehaviour_test.go b/interchaintest/misbehaviour_test.go index 2dc8b4656..9c99c5504 100644 --- a/interchaintest/misbehaviour_test.go +++ b/interchaintest/misbehaviour_test.go @@ -35,6 +35,7 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" + "go.uber.org/zap" "go.uber.org/zap/zaptest" ) @@ -43,13 +44,13 @@ func TestRelayerMisbehaviourDetection(t *testing.T) { t.Skip() } - t.Parallel() - numVals := 1 numFullNodes := 0 - cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ - {Name: "gaia", Version: "v9.0.0-rc1", NumValidators: &numVals, NumFullNodes: &numFullNodes, ChainConfig: ibc.ChainConfig{ChainID: "chain-a", GasPrices: "0.0uatom"}}, - {Name: "gaia", Version: "v9.0.0-rc1", NumValidators: &numVals, NumFullNodes: &numFullNodes, ChainConfig: ibc.ChainConfig{ChainID: "chain-b", GasPrices: "0.0uatom"}}}, + logger := zaptest.NewLogger(t) + + cf := interchaintest.NewBuiltinChainFactory(logger, []*interchaintest.ChainSpec{ + {Name: "gaia", Version: "v9.0.0-rc1", NumValidators: &numVals, NumFullNodes: &numFullNodes, ChainConfig: ibc.ChainConfig{ChainID: "chain-a", GasPrices: "0.0uatom", Bech32Prefix: "cosmos"}}, + {Name: "gaia", Version: "v9.0.0-rc1", NumValidators: &numVals, NumFullNodes: &numFullNodes, ChainConfig: ibc.ChainConfig{ChainID: "chain-b", GasPrices: "0.0uatom", Bech32Prefix: "cosmos"}}}, ) chains, err := cf.Chains(t.Name()) @@ -86,6 +87,8 @@ func TestRelayerMisbehaviourDetection(t *testing.T) { SkipPathCreation: false, })) + t.Parallel() + t.Cleanup(func() { _ = ic.Close() }) @@ -186,6 +189,7 @@ func TestRelayerMisbehaviourDetection(t *testing.T) { ClientMessage: protoAny, Signer: user.FormattedAddress(), } + logger.Info("Misbehaviour test, MsgUpdateClient", zap.String("Signer", user.FormattedAddress())) resp, err := cosmos.BroadcastTx(ctx, b, user, msg) require.NoError(t, err) diff --git a/interchaintest/path_filter_test.go b/interchaintest/path_filter_test.go index 1ec706a80..3ef7b9215 100644 --- a/interchaintest/path_filter_test.go +++ b/interchaintest/path_filter_test.go @@ -21,7 +21,6 @@ import ( // TestScenarioPathFilterAllow tests the channel allowlist func TestScenarioPathFilterAllow(t *testing.T) { - t.Parallel() ctx := context.Background() nv := 1 @@ -43,6 +42,8 @@ func TestScenarioPathFilterAllow(t *testing.T) { InitialBlockHistory: 100, }).Build(t, nil, "") + t.Parallel() + // Prep Interchain const ibcPath = "gaia-osmosis" ic := interchaintest.NewInterchain(). @@ -167,7 +168,6 @@ func TestScenarioPathFilterAllow(t *testing.T) { // TestScenarioPathFilterDeny tests the channel denylist func TestScenarioPathFilterDeny(t *testing.T) { - t.Parallel() ctx := context.Background() nv := 1 @@ -216,6 +216,8 @@ func TestScenarioPathFilterDeny(t *testing.T) { SkipPathCreation: false, })) + t.Parallel() + // Get Channel ID gaiaChans, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) require.NoError(t, err) diff --git a/interchaintest/relayer.go b/interchaintest/relayer.go index d06c0e1b8..8641830bc 100644 --- a/interchaintest/relayer.go +++ b/interchaintest/relayer.go @@ -9,6 +9,7 @@ import ( "testing" "github.com/cosmos/cosmos-sdk/crypto/keyring" + "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/relayer/v2/cmd" "github.com/cosmos/relayer/v2/internal/relayertest" "github.com/cosmos/relayer/v2/relayer" @@ -37,6 +38,9 @@ func NewRelayer( t *testing.T, config RelayerConfig, ) ibc.Relayer { + //prevent incorrect bech32 address prefixed addresses when calling AccAddress.String() + types.SetAddrCacheEnabled(false) + r := &Relayer{ t: t, home: t.TempDir(), diff --git a/interchaintest/stride/stride_icq_test.go b/interchaintest/stride/stride_icq_test.go index 00a42c609..ac9a067e4 100644 --- a/interchaintest/stride/stride_icq_test.go +++ b/interchaintest/stride/stride_icq_test.go @@ -16,6 +16,7 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" + "go.uber.org/zap" "go.uber.org/zap/zaptest" "golang.org/x/sync/errgroup" ) @@ -26,9 +27,6 @@ func TestScenarioStrideICAandICQ(t *testing.T) { if testing.Short() { t.Skip() } - - t.Parallel() - client, network := interchaintest.DockerSetup(t) rep := testreporter.NewNopReporter() @@ -38,9 +36,10 @@ func TestScenarioStrideICAandICQ(t *testing.T) { nf := 0 nv := 1 + logger := zaptest.NewLogger(t) // Define chains involved in test - cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ + cf := interchaintest.NewBuiltinChainFactory(logger, []*interchaintest.ChainSpec{ { Name: "stride", ChainName: "stride", @@ -113,10 +112,15 @@ func TestScenarioStrideICAandICQ(t *testing.T) { SkipPathCreation: false, })) + + t.Parallel() + t.Cleanup(func() { _ = ic.Close() }) + logger.Info("TestScenarioStrideICAandICQ [1]") + // Fund user accounts, so we can query balances and make assertions. const userFunds = int64(10_000_000_000_000) users := interchaintest.GetAndFundTestUsers(t, ctx, t.Name(), userFunds, stride, gaia) @@ -128,6 +132,8 @@ func TestScenarioStrideICAandICQ(t *testing.T) { err = r.StartRelayer(ctx, eRep, pathStrideGaia) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [2]") + t.Cleanup( func() { err := r.StopRelayer(ctx, eRep) @@ -147,6 +153,8 @@ func TestScenarioStrideICAandICQ(t *testing.T) { strideAdminAddr, err := types.Bech32ifyAddressBytes(strideCfg.Bech32Prefix, strideAdminAddrBytes) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [3]") + err = stride.SendFunds(ctx, interchaintest.FaucetAccountKeyName, ibc.WalletAmount{ Address: strideAdminAddr, Amount: userFunds, @@ -154,12 +162,16 @@ func TestScenarioStrideICAandICQ(t *testing.T) { }) require.NoError(t, err, "failed to fund stride admin account") + logger.Info("TestScenarioStrideICAandICQ [4]") + // get native chain user addresses strideAddr := strideUser.FormattedAddress() require.NotEmpty(t, strideAddr) + logger.Info("TestScenarioStrideICAandICQ [5]", zap.String("stride addr", strideAddr)) gaiaAddress := gaiaUser.FormattedAddress() require.NotEmpty(t, gaiaAddress) + logger.Info("TestScenarioStrideICAandICQ [6]", zap.String("gaia addr", gaiaAddress)) // get ibc paths gaiaConns, err := r.GetConnections(ctx, eRep, gaiaCfg.ChainID) @@ -168,6 +180,8 @@ func TestScenarioStrideICAandICQ(t *testing.T) { gaiaChans, err := r.GetChannels(ctx, eRep, gaiaCfg.ChainID) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [7]") + atomIBCDenom := transfertypes.ParseDenomTrace( transfertypes.GetPrefixedDenom( gaiaChans[0].Counterparty.PortID, @@ -182,6 +196,8 @@ func TestScenarioStrideICAandICQ(t *testing.T) { gaiaHeight, err := gaia.Height(ctx) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [8]") + // Fund stride user with ibc denom atom tx, err := gaia.SendIBCTransfer(ctx, gaiaChans[0].ChannelID, gaiaUser.KeyName(), ibc.WalletAmount{ Amount: 1_000_000_000_000, @@ -190,13 +206,19 @@ func TestScenarioStrideICAandICQ(t *testing.T) { }, ibc.TransferOptions{}) require.NoError(t, err) - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+10, tx.Packet) + logger.Info("TestScenarioStrideICAandICQ [9]") + + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+40, tx.Packet) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [10]") + require.NoError(t, eg.Wait()) + logger.Info("TestScenarioStrideICAandICQ [11]") + // Register gaia host zone - _, err = strideFullNode.ExecTx(ctx, StrideAdminAccount, + res, err := strideFullNode.ExecTx(ctx, StrideAdminAccount, "stakeibc", "register-host-zone", gaiaConns[0].Counterparty.ConnectionId, gaiaCfg.Denom, gaiaCfg.Bech32Prefix, atomIBCDenom, gaiaChans[0].Counterparty.ChannelID, "1", @@ -204,30 +226,40 @@ func TestScenarioStrideICAandICQ(t *testing.T) { ) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [12]", zap.String("execTx res", res)) + gaiaHeight, err = gaia.Height(ctx) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [13]") + // Wait for the ICA accounts to be setup // Poll for 4 MsgChannelOpenConfirm with timeout after 15 blocks. chanCount := 0 _, err = cosmos.PollForMessage( - ctx, gaia, gaiaCfg.EncodingConfig.InterfaceRegistry, gaiaHeight, gaiaHeight+15, + ctx, gaia, gaiaCfg.EncodingConfig.InterfaceRegistry, gaiaHeight, gaiaHeight+40, func(found *chantypes.MsgChannelOpenConfirm) bool { chanCount++; return chanCount == 4 }, ) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [14]") + // Get validator address gaiaVal1Address, err := gaia.Validators[0].KeyBech32(ctx, "validator", "val") require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [15]") + // Add gaia validator - _, err = strideFullNode.ExecTx(ctx, StrideAdminAccount, + res, err = strideFullNode.ExecTx(ctx, StrideAdminAccount, "stakeibc", "add-validator", gaiaCfg.ChainID, "gval1", gaiaVal1Address, "10", "5", ) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [16]", zap.String("execTx res", res)) + var gaiaHostZone HostZoneWrapper // query gaia host zone @@ -238,20 +270,31 @@ func TestScenarioStrideICAandICQ(t *testing.T) { err = json.Unmarshal(stdout, &gaiaHostZone) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [17]", zap.String("execQuery res", string(stdout))) + // Liquid stake some atom - _, err = strideFullNode.ExecTx(ctx, strideUser.KeyName(), + res, err = strideFullNode.ExecTx(ctx, strideUser.KeyName(), "stakeibc", "liquid-stake", "1000000000000", gaiaCfg.Denom, ) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [18]", zap.String("execTx res", res)) + strideHeight, err := stride.Height(ctx) require.NoError(t, err) + logger.Info("TestScenarioStrideICAandICQ [19]") + // Poll for MsgSubmitQueryResponse with timeout after 20 blocks - _, err = cosmos.PollForMessage( - ctx, stride, strideCfg.EncodingConfig.InterfaceRegistry, strideHeight, strideHeight+20, + resp, err := cosmos.PollForMessage( + ctx, stride, strideCfg.EncodingConfig.InterfaceRegistry, strideHeight, strideHeight+40, func(found *rlystride.MsgSubmitQueryResponse) bool { return true }, ) + + logger.Info("TestScenarioStrideICAandICQ [20]", zap.String("[poll for msg] resp", resp.String())) + if err != nil { + logger.Info("error poll: " + err.Error()) + } require.NoError(t, err) } diff --git a/interchaintest/tendermint_v0.37_boundary_test.go b/interchaintest/tendermint_v0.37_boundary_test.go index c7972c1ac..04a7a8c47 100644 --- a/interchaintest/tendermint_v0.37_boundary_test.go +++ b/interchaintest/tendermint_v0.37_boundary_test.go @@ -18,8 +18,6 @@ func TestScenarioTendermint37Boundary(t *testing.T) { t.Skip("skipping in short mode") } - t.Parallel() - nv := 1 nf := 0 @@ -58,6 +56,8 @@ func TestScenarioTendermint37Boundary(t *testing.T) { }) r := rf.Build(t, client, network) + t.Parallel() + ic := interchaintest.NewInterchain(). AddChain(chain). AddChain(counterpartyChain). diff --git a/relayer/chains/cosmos/feegrant.go b/relayer/chains/cosmos/feegrant.go new file mode 100644 index 000000000..92b14b6d3 --- /dev/null +++ b/relayer/chains/cosmos/feegrant.go @@ -0,0 +1,529 @@ +package cosmos + +import ( + "context" + "errors" + "fmt" + "regexp" + "strconv" + "time" + + "github.com/cosmos/cosmos-sdk/crypto/hd" + "github.com/cosmos/cosmos-sdk/types" + sdk "github.com/cosmos/cosmos-sdk/types" + txtypes "github.com/cosmos/cosmos-sdk/types/tx" + "github.com/cosmos/cosmos-sdk/x/feegrant" +) + +// Searches for valid, existing BasicAllowance grants for the ChainClient's configured Feegranter. +// Expired grants are ignored. Other grant types are ignored. +func (cc *CosmosProvider) GetValidBasicGrants() ([]*feegrant.Grant, error) { + validGrants := []*feegrant.Grant{} + + if cc.PCfg.FeeGrants == nil { + return nil, errors.New("no feegrant configuration for chainclient") + } + + keyNameOrAddress := cc.PCfg.FeeGrants.GranterKey + address, err := cc.AccountFromKeyOrAddress(keyNameOrAddress) + if err != nil { + return nil, err + } + + encodedAddr := cc.MustEncodeAccAddr(address) + grants, err := cc.QueryFeegrantsByGranter(encodedAddr, nil) + if err != nil { + return nil, err + } + + for _, grant := range grants { + switch grant.Allowance.TypeUrl { + case "/cosmos.feegrant.v1beta1.BasicAllowance": + //var feegrantAllowance feegrant.BasicAllowance + var feegrantAllowance feegrant.FeeAllowanceI + e := cc.Cdc.InterfaceRegistry.UnpackAny(grant.Allowance, &feegrantAllowance) + if e != nil { + return nil, e + } + //feegrantAllowance := grant.Allowance.GetCachedValue().(*feegrant.BasicAllowance) + if isValidGrant(feegrantAllowance.(*feegrant.BasicAllowance)) { + validGrants = append(validGrants, grant) + } + default: + fmt.Printf("Ignoring grant type %s for granter %s and grantee %s\n", grant.Allowance.TypeUrl, grant.Granter, grant.Grantee) + } + } + + return validGrants, nil +} + +// Searches for valid, existing BasicAllowance grants for the given grantee & ChainClient's configured granter. +// Expired grants are ignored. Other grant types are ignored. +func (cc *CosmosProvider) GetGranteeValidBasicGrants(granteeKey string) ([]*feegrant.Grant, error) { + validGrants := []*feegrant.Grant{} + + if cc.PCfg.FeeGrants == nil { + return nil, errors.New("no feegrant configuration for chainclient") + } + + granterAddr, err := cc.AccountFromKeyOrAddress(cc.PCfg.FeeGrants.GranterKey) + if err != nil { + return nil, err + } + granterEncodedAddr := cc.MustEncodeAccAddr(granterAddr) + + address, err := cc.AccountFromKeyOrAddress(granteeKey) + if err != nil { + return nil, err + } + + encodedAddr := cc.MustEncodeAccAddr(address) + grants, err := cc.QueryFeegrantsByGrantee(encodedAddr, nil) + if err != nil { + return nil, err + } + + for _, grant := range grants { + if grant.Granter == granterEncodedAddr { + switch grant.Allowance.TypeUrl { + case "/cosmos.feegrant.v1beta1.BasicAllowance": + var feegrantAllowance feegrant.FeeAllowanceI + e := cc.Cdc.InterfaceRegistry.UnpackAny(grant.Allowance, &feegrantAllowance) + if e != nil { + return nil, e + } + if isValidGrant(feegrantAllowance.(*feegrant.BasicAllowance)) { + validGrants = append(validGrants, grant) + } + default: + fmt.Printf("Ignoring grant type %s for granter %s and grantee %s\n", grant.Allowance.TypeUrl, grant.Granter, grant.Grantee) + } + } + } + + return validGrants, nil +} + +// True if the grant has not expired and all coins have positive balances, false otherwise +// Note: technically, any single coin with a positive balance makes the grant usable +func isValidGrant(a *feegrant.BasicAllowance) bool { + //grant expired due to time limit + if a.Expiration != nil && time.Now().After(*a.Expiration) { + return false + } + + //feegrant without a spending limit specified allows unlimited fees to be spent + valid := true + + //spending limit is specified, check if there are funds remaining on every coin + if a.SpendLimit != nil { + for _, coin := range a.SpendLimit { + if coin.Amount.LTE(types.ZeroInt()) { + valid = false + } + } + } + + return valid +} + +func (cc *CosmosProvider) ConfigureFeegrants(numGrantees int, granterKey string) error { + cc.PCfg.FeeGrants = &FeeGrantConfiguration{ + GranteesWanted: numGrantees, + GranterKey: granterKey, + ManagedGrantees: []string{}, + } + + return cc.PCfg.FeeGrants.AddGranteeKeys(cc) +} + +func (cc *CosmosProvider) ConfigureWithGrantees(grantees []string, granterKey string) error { + if len(grantees) == 0 { + return errors.New("list of grantee names cannot be empty") + } + + cc.PCfg.FeeGrants = &FeeGrantConfiguration{ + GranteesWanted: len(grantees), + GranterKey: granterKey, + ManagedGrantees: grantees, + } + + for _, newGrantee := range grantees { + if !cc.KeyExists(newGrantee) { + //Add another key to the chain client for the grantee + _, err := cc.AddKey(newGrantee, sdk.CoinType, string(hd.Secp256k1Type)) + if err != nil { + return err + } + } + } + + return nil +} + +func (fg *FeeGrantConfiguration) AddGranteeKeys(cc *CosmosProvider) error { + for i := len(fg.ManagedGrantees); i < fg.GranteesWanted; i++ { + newGranteeIdx := strconv.Itoa(len(fg.ManagedGrantees) + 1) + newGrantee := "grantee" + newGranteeIdx + + //Add another key to the chain client for the grantee + _, err := cc.AddKey(newGrantee, sdk.CoinType, string(hd.Secp256k1Type)) + if err != nil { + return err + } + + fg.ManagedGrantees = append(fg.ManagedGrantees, newGrantee) + } + + return nil +} + +// Get the feegrant params to use for the next TX. If feegrants are not configured for the chain client, the default key will be used for TX signing. +// Otherwise, a configured feegrantee will be chosen for TX signing in round-robin fashion. +func (cc *CosmosProvider) GetTxFeeGrant() (txSignerKey string, feeGranterKey string) { + //By default, we should sign TXs with the ChainClient's default key + txSignerKey = cc.PCfg.Key + + if cc.PCfg.FeeGrants == nil { + fmt.Printf("cc.Config.FeeGrants == nil\n") + return + } + + // Use the ChainClient's configured Feegranter key for the next TX. + feeGranterKey = cc.PCfg.FeeGrants.GranterKey + + // The ChainClient Feegrant configuration has never been verified on chain. + // Don't use Feegrants as it could cause the TX to fail on chain. + if feeGranterKey == "" || cc.PCfg.FeeGrants.BlockHeightVerified <= 0 { + fmt.Printf("cc.Config.FeeGrants.BlockHeightVerified <= 0\n") + feeGranterKey = "" + return + } + + //Pick the next managed grantee in the list as the TX signer + lastGranteeIdx := cc.PCfg.FeeGrants.GranteeLastSignerIndex + + if lastGranteeIdx >= 0 && lastGranteeIdx <= len(cc.PCfg.FeeGrants.ManagedGrantees)-1 { + txSignerKey = cc.PCfg.FeeGrants.ManagedGrantees[lastGranteeIdx] + cc.PCfg.FeeGrants.GranteeLastSignerIndex = cc.PCfg.FeeGrants.GranteeLastSignerIndex + 1 + + //Restart the round robin at 0 if we reached the end of the list of grantees + if cc.PCfg.FeeGrants.GranteeLastSignerIndex == len(cc.PCfg.FeeGrants.ManagedGrantees) { + cc.PCfg.FeeGrants.GranteeLastSignerIndex = 0 + } + } + + return +} + +// Ensure all Basic Allowance grants are in place for the given ChainClient. +// This will query (RPC) for existing grants and create new grants if they don't exist. +func (cc *CosmosProvider) EnsureBasicGrants(ctx context.Context, memo string) (*sdk.TxResponse, error) { + if cc.PCfg.FeeGrants == nil { + return nil, errors.New("ChainClient must be a FeeGranter to establish grants") + } else if len(cc.PCfg.FeeGrants.ManagedGrantees) == 0 { + return nil, errors.New("ChainClient is a FeeGranter, but is not managing any Grantees") + } + + granterKey := cc.PCfg.FeeGrants.GranterKey + if granterKey == "" { + granterKey = cc.PCfg.Key + } + + granterAcc, err := cc.GetKeyAddressForKey(granterKey) + if err != nil { + fmt.Printf("Retrieving key '%s': ChainClient FeeGranter misconfiguration: %s", granterKey, err.Error()) + return nil, err + } + + granterAddr, granterAddrErr := cc.EncodeBech32AccAddr(granterAcc) + if granterAddrErr != nil { + return nil, granterAddrErr + } + + validGrants, err := cc.GetValidBasicGrants() + failedLookupGrantsByGranter := err != nil + + msgs := []sdk.Msg{} + numGrantees := len(cc.PCfg.FeeGrants.ManagedGrantees) + grantsNeeded := 0 + + for _, grantee := range cc.PCfg.FeeGrants.ManagedGrantees { + + //Searching for all grants with the given granter failed, so we will search by the grantee. + //Reason this lookup sometimes fails is because the 'Search by granter' request is in SDK v0.46+ + if failedLookupGrantsByGranter { + validGrants, err = cc.GetGranteeValidBasicGrants(grantee) + if err != nil { + return nil, err + } + } + + granteeAcc, err := cc.GetKeyAddressForKey(grantee) + if err != nil { + fmt.Printf("Misconfiguration for grantee key %s. Error: %s\n", grantee, err.Error()) + return nil, err + } + + granteeAddr, granteeAddrErr := cc.EncodeBech32AccAddr(granteeAcc) + if granteeAddrErr != nil { + return nil, granteeAddrErr + } + + hasGrant := false + for _, basicGrant := range validGrants { + if basicGrant.Grantee == granteeAddr { + fmt.Printf("Valid grant found for granter %s, grantee %s\n", basicGrant.Granter, basicGrant.Grantee) + hasGrant = true + } + } + + if !hasGrant { + grantsNeeded += 1 + fmt.Printf("Grant will be created on chain for granter %s and grantee %s\n", granterAddr, granteeAddr) + grantMsg, err := cc.getMsgGrantBasicAllowance(granterAcc, granteeAcc) + if err != nil { + return nil, err + } + msgs = append(msgs, grantMsg) + } + } + + if len(msgs) > 0 { + //Make sure the granter has funds on chain, if not, we can't even pay TX fees. + //Also, depending how the config was initialized, the key might only exist locally, not on chain. + balance, err := cc.QueryBalanceWithAddress(ctx, granterAddr) + if err != nil { + return nil, err + } + + //Check to ensure the feegranter has funds on chain that can pay TX fees + weBroke := true + gasDenom, err := getGasTokenDenom(cc.PCfg.GasPrices) + if err != nil { + return nil, err + } + + for _, coin := range balance { + if coin.Denom == gasDenom { + if coin.Amount.GT(sdk.ZeroInt()) { + weBroke = false + } + } + } + + //Feegranter can pay TX fees + if !weBroke { + txResp, err := cc.SubmitTxAwaitResponse(ctx, msgs, memo, 0, granterKey) + if err != nil { + fmt.Printf("Error: SubmitTxAwaitResponse: %s", err.Error()) + return nil, err + } else if txResp != nil && txResp.TxResponse != nil && txResp.TxResponse.Code != 0 { + fmt.Printf("Submitting grants for granter %s failed. Code: %d, TX hash: %s\n", granterKey, txResp.TxResponse.Code, txResp.TxResponse.TxHash) + return nil, fmt.Errorf("could not configure feegrant for granter %s", granterKey) + } + + fmt.Printf("TX succeeded, %d new grants configured, %d grants already in place. TX hash: %s\n", grantsNeeded, numGrantees-grantsNeeded, txResp.TxResponse.TxHash) + return txResp.TxResponse, err + } else { + return nil, fmt.Errorf("granter %s does not have funds on chain in fee denom '%s' (no TXs submitted)", granterKey, gasDenom) + } + } else { + fmt.Printf("All grantees (%d total) already had valid feegrants. Feegrant configuration verified.\n", numGrantees) + } + + return nil, nil +} + +func getGasTokenDenom(gasPrices string) (string, error) { + r := regexp.MustCompile(`(?P[0-9.]*)(?P.*)`) + submatches := r.FindStringSubmatch(gasPrices) + if len(submatches) != 3 { + return "", errors.New("could not find fee denom") + } + + return submatches[2], nil +} + +// GrantBasicAllowance Send a feegrant with the basic allowance type. +// This function does not check for existing feegrant authorizations. +// TODO: check for existing authorizations prior to attempting new one. +func (cc *CosmosProvider) GrantAllGranteesBasicAllowance(ctx context.Context, gas uint64) error { + if cc.PCfg.FeeGrants == nil { + return errors.New("ChainClient must be a FeeGranter to establish grants") + } else if len(cc.PCfg.FeeGrants.ManagedGrantees) == 0 { + return errors.New("ChainClient is a FeeGranter, but is not managing any Grantees") + } + + granterKey := cc.PCfg.FeeGrants.GranterKey + if granterKey == "" { + granterKey = cc.PCfg.Key + } + granterAddr, err := cc.GetKeyAddressForKey(granterKey) + if err != nil { + fmt.Printf("ChainClient FeeGranter misconfiguration: %s", err.Error()) + return err + } + + for _, grantee := range cc.PCfg.FeeGrants.ManagedGrantees { + granteeAddr, err := cc.GetKeyAddressForKey(grantee) + + if err != nil { + fmt.Printf("Misconfiguration for grantee %s. Error: %s\n", grantee, err.Error()) + return err + } + + grantResp, err := cc.GrantBasicAllowance(ctx, granterAddr, granterKey, granteeAddr, gas) + if err != nil { + return err + } else if grantResp != nil && grantResp.TxResponse != nil && grantResp.TxResponse.Code != 0 { + fmt.Printf("grantee %s and granter %s. Code: %d\n", granterAddr.String(), granteeAddr.String(), grantResp.TxResponse.Code) + return fmt.Errorf("could not configure feegrant for granter %s and grantee %s", granterAddr.String(), granteeAddr.String()) + } + } + return nil +} + +// GrantBasicAllowance Send a feegrant with the basic allowance type. +// This function does not check for existing feegrant authorizations. +// TODO: check for existing authorizations prior to attempting new one. +func (cc *CosmosProvider) GrantAllGranteesBasicAllowanceWithExpiration(ctx context.Context, gas uint64, expiration time.Time) error { + if cc.PCfg.FeeGrants == nil { + return errors.New("ChainClient must be a FeeGranter to establish grants") + } else if len(cc.PCfg.FeeGrants.ManagedGrantees) == 0 { + return errors.New("ChainClient is a FeeGranter, but is not managing any Grantees") + } + + granterKey := cc.PCfg.FeeGrants.GranterKey + if granterKey == "" { + granterKey = cc.PCfg.Key + } + + granterAddr, err := cc.GetKeyAddressForKey(granterKey) + if err != nil { + fmt.Printf("ChainClient FeeGranter misconfiguration: %s", err.Error()) + return err + } + + for _, grantee := range cc.PCfg.FeeGrants.ManagedGrantees { + granteeAddr, err := cc.GetKeyAddressForKey(grantee) + + if err != nil { + fmt.Printf("Misconfiguration for grantee %s. Error: %s\n", grantee, err.Error()) + return err + } + + grantResp, err := cc.GrantBasicAllowanceWithExpiration(ctx, granterAddr, granterKey, granteeAddr, gas, expiration) + if err != nil { + return err + } else if grantResp != nil && grantResp.TxResponse != nil && grantResp.TxResponse.Code != 0 { + fmt.Printf("grantee %s and granter %s. Code: %d\n", granterAddr.String(), granteeAddr.String(), grantResp.TxResponse.Code) + return fmt.Errorf("could not configure feegrant for granter %s and grantee %s", granterAddr.String(), granteeAddr.String()) + } + } + return nil +} + +func (cc *CosmosProvider) getMsgGrantBasicAllowanceWithExpiration(granter sdk.AccAddress, grantee sdk.AccAddress, expiration time.Time) (sdk.Msg, error) { + //thirtyMin := time.Now().Add(30 * time.Minute) + feeGrantBasic := &feegrant.BasicAllowance{ + Expiration: &expiration, + } + msgGrantAllowance, err := feegrant.NewMsgGrantAllowance(feeGrantBasic, granter, grantee) + if err != nil { + fmt.Printf("Error: GrantBasicAllowance.NewMsgGrantAllowance: %s", err.Error()) + return nil, err + } + + //Due to the way Lens configures the SDK, addresses will have the 'cosmos' prefix which + //doesn't necessarily match the chain prefix of the ChainClient config. So calling the internal + //'NewMsgGrantAllowance' function will return the *incorrect* 'cosmos' prefixed bech32 address. + + //Update the Grant to ensure the correct chain-specific granter is set + granterAddr, granterAddrErr := cc.EncodeBech32AccAddr(granter) + if granterAddrErr != nil { + fmt.Printf("EncodeBech32AccAddr: %s", granterAddrErr.Error()) + return nil, granterAddrErr + } + + //Update the Grant to ensure the correct chain-specific grantee is set + granteeAddr, granteeAddrErr := cc.EncodeBech32AccAddr(grantee) + if granteeAddrErr != nil { + fmt.Printf("EncodeBech32AccAddr: %s", granteeAddrErr.Error()) + return nil, granteeAddrErr + } + + //override the 'cosmos' prefixed bech32 addresses with the correct chain prefix + msgGrantAllowance.Grantee = granteeAddr + msgGrantAllowance.Granter = granterAddr + + return msgGrantAllowance, nil +} + +func (cc *CosmosProvider) getMsgGrantBasicAllowance(granter sdk.AccAddress, grantee sdk.AccAddress) (sdk.Msg, error) { + //thirtyMin := time.Now().Add(30 * time.Minute) + feeGrantBasic := &feegrant.BasicAllowance{ + //Expiration: &thirtyMin, + } + msgGrantAllowance, err := feegrant.NewMsgGrantAllowance(feeGrantBasic, granter, grantee) + if err != nil { + fmt.Printf("Error: GrantBasicAllowance.NewMsgGrantAllowance: %s", err.Error()) + return nil, err + } + + //Due to the way Lens configures the SDK, addresses will have the 'cosmos' prefix which + //doesn't necessarily match the chain prefix of the ChainClient config. So calling the internal + //'NewMsgGrantAllowance' function will return the *incorrect* 'cosmos' prefixed bech32 address. + + //Update the Grant to ensure the correct chain-specific granter is set + granterAddr, granterAddrErr := cc.EncodeBech32AccAddr(granter) + if granterAddrErr != nil { + fmt.Printf("EncodeBech32AccAddr: %s", granterAddrErr.Error()) + return nil, granterAddrErr + } + + //Update the Grant to ensure the correct chain-specific grantee is set + granteeAddr, granteeAddrErr := cc.EncodeBech32AccAddr(grantee) + if granteeAddrErr != nil { + fmt.Printf("EncodeBech32AccAddr: %s", granteeAddrErr.Error()) + return nil, granteeAddrErr + } + + //override the 'cosmos' prefixed bech32 addresses with the correct chain prefix + msgGrantAllowance.Grantee = granteeAddr + msgGrantAllowance.Granter = granterAddr + + return msgGrantAllowance, nil +} + +func (cc *CosmosProvider) GrantBasicAllowance(ctx context.Context, granter sdk.AccAddress, granterKeyName string, grantee sdk.AccAddress, gas uint64) (*txtypes.GetTxResponse, error) { + msgGrantAllowance, err := cc.getMsgGrantBasicAllowance(granter, grantee) + if err != nil { + return nil, err + } + + msgs := []sdk.Msg{msgGrantAllowance} + txResp, err := cc.SubmitTxAwaitResponse(ctx, msgs, "", gas, granterKeyName) + if err != nil { + fmt.Printf("Error: GrantBasicAllowance.SubmitTxAwaitResponse: %s", err.Error()) + return nil, err + } + + return txResp, nil +} + +func (cc *CosmosProvider) GrantBasicAllowanceWithExpiration(ctx context.Context, granter sdk.AccAddress, granterKeyName string, grantee sdk.AccAddress, gas uint64, expiration time.Time) (*txtypes.GetTxResponse, error) { + msgGrantAllowance, err := cc.getMsgGrantBasicAllowanceWithExpiration(granter, grantee, expiration) + if err != nil { + return nil, err + } + + msgs := []sdk.Msg{msgGrantAllowance} + txResp, err := cc.SubmitTxAwaitResponse(ctx, msgs, "", gas, granterKeyName) + if err != nil { + fmt.Printf("Error: GrantBasicAllowance.SubmitTxAwaitResponse: %s", err.Error()) + return nil, err + } + + return txResp, nil +} diff --git a/relayer/chains/cosmos/grpc_query.go b/relayer/chains/cosmos/grpc_query.go index dec0c84a8..33f274e8d 100644 --- a/relayer/chains/cosmos/grpc_query.go +++ b/relayer/chains/cosmos/grpc_query.go @@ -177,7 +177,7 @@ func (cc *CosmosProvider) TxServiceBroadcast(ctx context.Context, req *tx.Broadc wg.Add(1) - if err := cc.broadcastTx(ctx, req.TxBytes, nil, nil, ctx, blockTimeout, callback); err != nil { + if err := cc.broadcastTx(ctx, req.TxBytes, nil, nil, ctx, blockTimeout, []func(*provider.RelayerTxResponse, error){callback}); err != nil { return nil, err } diff --git a/relayer/chains/cosmos/keys.go b/relayer/chains/cosmos/keys.go index 0ccdd0938..858f77505 100644 --- a/relayer/chains/cosmos/keys.go +++ b/relayer/chains/cosmos/keys.go @@ -192,8 +192,8 @@ func (cc *CosmosProvider) ExportPrivKeyArmor(keyName string) (armor string, err } // GetKeyAddress returns the account address representation for the currently configured key. -func (cc *CosmosProvider) GetKeyAddress() (sdk.AccAddress, error) { - info, err := cc.Keybase.Key(cc.PCfg.Key) +func (cc *CosmosProvider) GetKeyAddress(key string) (sdk.AccAddress, error) { + info, err := cc.Keybase.Key(key) if err != nil { return nil, err } @@ -219,3 +219,34 @@ func CreateMnemonic() (string, error) { func (cc *CosmosProvider) EncodeBech32AccAddr(addr sdk.AccAddress) (string, error) { return sdk.Bech32ifyAddressBytes(cc.PCfg.AccountPrefix, addr) } + +func (cc *CosmosProvider) DecodeBech32AccAddr(addr string) (sdk.AccAddress, error) { + return sdk.GetFromBech32(addr, cc.PCfg.AccountPrefix) +} + +func (cc *CosmosProvider) GetKeyAddressForKey(key string) (sdk.AccAddress, error) { + info, err := cc.Keybase.Key(key) + if err != nil { + return nil, err + } + return info.GetAddress() +} + +func (cc *CosmosProvider) KeyFromKeyOrAddress(keyOrAddress string) (string, error) { + switch { + case keyOrAddress == "": + return cc.PCfg.Key, nil + case cc.KeyExists(keyOrAddress): + return keyOrAddress, nil + default: + acc, err := cc.DecodeBech32AccAddr(keyOrAddress) + if err != nil { + return "", err + } + kr, err := cc.Keybase.KeyByAddress(acc) + if err != nil { + return "", err + } + return kr.Name, nil + } +} diff --git a/relayer/chains/cosmos/log.go b/relayer/chains/cosmos/log.go index 9008e58d5..f6e6564a0 100644 --- a/relayer/chains/cosmos/log.go +++ b/relayer/chains/cosmos/log.go @@ -7,7 +7,9 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" typestx "github.com/cosmos/cosmos-sdk/types/tx" + feetypes "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" chantypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/cosmos/relayer/v2/relayer/provider" @@ -162,6 +164,11 @@ func getFeePayer(tx *typestx.Tx) string { case *clienttypes.MsgUpdateClient: // Same failure mode as MsgCreateClient. return firstMsg.Signer + case *clienttypes.MsgSubmitMisbehaviour: + // Same failure mode as MsgCreateClient. + return firstMsg.Signer + case *feetypes.MsgRegisterCounterpartyPayee: + return firstMsg.Relayer default: return firstMsg.GetSigners()[0].String() } diff --git a/relayer/chains/cosmos/msg.go b/relayer/chains/cosmos/msg.go index 6f0dfeb14..ddd5a770d 100644 --- a/relayer/chains/cosmos/msg.go +++ b/relayer/chains/cosmos/msg.go @@ -11,12 +11,15 @@ import ( ) type CosmosMessage struct { - Msg sdk.Msg + Msg sdk.Msg + SetSigner func(string) //callback to update the Msg Signer field + FeegrantDisabled bool //marks whether this message type should ALWAYS disable feegranting (use the default signer) } -func NewCosmosMessage(msg sdk.Msg) provider.RelayerMessage { +func NewCosmosMessage(msg sdk.Msg, optionalSetSigner func(string)) provider.RelayerMessage { return CosmosMessage{ - Msg: msg, + Msg: msg, + SetSigner: optionalSetSigner, } } diff --git a/relayer/chains/cosmos/provider.go b/relayer/chains/cosmos/provider.go index 505b26782..c33743faf 100644 --- a/relayer/chains/cosmos/provider.go +++ b/relayer/chains/cosmos/provider.go @@ -58,6 +58,23 @@ type CosmosProviderConfig struct { Broadcast provider.BroadcastMode `json:"broadcast-mode" yaml:"broadcast-mode"` MinLoopDuration time.Duration `json:"min-loop-duration" yaml:"min-loop-duration"` ExtensionOptions []provider.ExtensionOption `json:"extension-options" yaml:"extension-options"` + + //If FeeGrantConfiguration is set, TXs submitted by the ChainClient will be signed by the FeeGrantees in a round-robin fashion by default. + FeeGrants *FeeGrantConfiguration `json:"feegrants" yaml:"feegrants"` +} + +// By default, TXs will be signed by the feegrantees 'ManagedGrantees' keys in a round robin fashion. +// Clients can use other signing keys by invoking 'tx.SendMsgsWith' and specifying the signing key. +type FeeGrantConfiguration struct { + GranteesWanted int `json:"num_grantees" yaml:"num_grantees"` + //Normally this is the default ChainClient key + GranterKey string `json:"granter" yaml:"granter"` + //List of keys (by name) that this FeeGranter manages + ManagedGrantees []string `json:"grantees" yaml:"grantees"` + //Last checked on chain (0 means grants never checked and may not exist) + BlockHeightVerified int64 `json:"block_last_verified" yaml:"block_last_verified"` + //Index of the last ManagedGrantee used as a TX signer + GranteeLastSignerIndex int } func (pc CosmosProviderConfig) Validate() error { @@ -92,6 +109,7 @@ func (pc CosmosProviderConfig) NewProvider(log *zap.Logger, homepath string, deb KeyringOptions: []keyring.Option{ethermint.EthSecp256k1Option()}, Input: os.Stdin, Output: os.Stdout, + walletStateMap: map[string]*WalletState{}, // TODO: this is a bit of a hack, we should probably have a better way to inject modules Cdc: MakeCodec(pc.Modules, pc.ExtraCodecs), @@ -113,8 +131,13 @@ type CosmosProvider struct { Cdc Codec // TODO: GRPC Client type? - nextAccountSeq uint64 - txMu sync.Mutex + //nextAccountSeq uint64 + feegrantMu sync.Mutex + + // the map key is the TX signer, which can either be 'default' (provider key) or a feegrantee + // the purpose of the map is to lock on the signer from TX creation through submission, + // thus making TX sequencing errors less likely. + walletStateMap map[string]*WalletState // metrics to monitor the provider TotalFees sdk.Coins @@ -126,6 +149,11 @@ type CosmosProvider struct { cometLegacyEncoding bool } +type WalletState struct { + NextAccountSequence uint64 + Mu sync.Mutex +} + func (cc *CosmosProvider) ProviderConfig() provider.ProviderConfig { return cc.PCfg } @@ -175,6 +203,28 @@ func (cc *CosmosProvider) Address() (string, error) { return out, err } +func (cc *CosmosProvider) MustEncodeAccAddr(addr sdk.AccAddress) string { + enc, err := cc.EncodeBech32AccAddr(addr) + if err != nil { + panic(err) + } + return enc +} + +// AccountFromKeyOrAddress returns an account from either a key or an address. +// If 'keyOrAddress' is the empty string, this returns the default key's address. +func (cc *CosmosProvider) AccountFromKeyOrAddress(keyOrAddress string) (out sdk.AccAddress, err error) { + switch { + case keyOrAddress == "": + out, err = cc.GetKeyAddress(cc.PCfg.Key) + case cc.KeyExists(keyOrAddress): + out, err = cc.GetKeyAddress(keyOrAddress) + default: + out, err = sdk.GetFromBech32(keyOrAddress, cc.PCfg.AccountPrefix) + } + return +} + func (cc *CosmosProvider) TrustingPeriod(ctx context.Context) (time.Duration, error) { res, err := cc.QueryStakingParams(ctx) @@ -297,9 +347,9 @@ func (cc *CosmosProvider) SetMetrics(m *processor.PrometheusMetrics) { cc.metrics = m } -func (cc *CosmosProvider) updateNextAccountSequence(seq uint64) { - if seq > cc.nextAccountSeq { - cc.nextAccountSeq = seq +func (cc *CosmosProvider) updateNextAccountSequence(sequenceGuard *WalletState, seq uint64) { + if seq > sequenceGuard.NextAccountSequence { + sequenceGuard.NextAccountSequence = seq } } diff --git a/relayer/chains/cosmos/query.go b/relayer/chains/cosmos/query.go index 6e438727f..766ad06dc 100644 --- a/relayer/chains/cosmos/query.go +++ b/relayer/chains/cosmos/query.go @@ -17,8 +17,11 @@ import ( "github.com/cosmos/cosmos-sdk/codec" sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" + grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" + "github.com/cosmos/cosmos-sdk/types/query" querytypes "github.com/cosmos/cosmos-sdk/types/query" bankTypes "github.com/cosmos/cosmos-sdk/x/bank/types" + "github.com/cosmos/cosmos-sdk/x/feegrant" "github.com/cosmos/cosmos-sdk/x/params/types/proposal" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" upgradetypes "github.com/cosmos/cosmos-sdk/x/upgrade/types" @@ -33,6 +36,7 @@ import ( "github.com/cosmos/relayer/v2/relayer/provider" "go.uber.org/zap" "golang.org/x/sync/errgroup" + "google.golang.org/grpc/metadata" ) const PaginationDelay = 10 * time.Millisecond @@ -183,6 +187,93 @@ func parseEventsFromResponseDeliverTx(resp abci.ResponseDeliverTx) []provider.Re return events } +// QueryFeegrantsByGrantee returns all requested grants for the given grantee. +// Default behavior will return all grants. +func (cc *CosmosProvider) QueryFeegrantsByGrantee(address string, paginator *query.PageRequest) ([]*feegrant.Grant, error) { + grants := []*feegrant.Grant{} + allPages := paginator == nil + + req := &feegrant.QueryAllowancesRequest{Grantee: address, Pagination: paginator} + queryClient := feegrant.NewQueryClient(cc) + ctx, cancel := cc.GetQueryContext(0) + defer cancel() + hasNextPage := true + + for { + res, err := queryClient.Allowances(ctx, req) + if err != nil { + return nil, err + } + + if res.Allowances != nil { + grants = append(grants, res.Allowances...) + } + + if res.Pagination != nil { + req.Pagination.Key = res.Pagination.NextKey + if len(res.Pagination.NextKey) == 0 { + hasNextPage = false + } + } else { + hasNextPage = false + } + + if !allPages || !hasNextPage { + break + } + } + + return grants, nil +} + +// Feegrant_GrantsByGranterRPC returns all requested grants for the given Granter. +// Default behavior will return all grants. +func (cc *CosmosProvider) QueryFeegrantsByGranter(address string, paginator *query.PageRequest) ([]*feegrant.Grant, error) { + grants := []*feegrant.Grant{} + allPages := paginator == nil + + req := &feegrant.QueryAllowancesByGranterRequest{Granter: address, Pagination: paginator} + queryClient := feegrant.NewQueryClient(cc) + ctx, cancel := cc.GetQueryContext(0) + defer cancel() + hasNextPage := true + + for { + res, err := queryClient.AllowancesByGranter(ctx, req) + if err != nil { + return nil, err + } + + if res.Allowances != nil { + grants = append(grants, res.Allowances...) + } + + if res.Pagination != nil && res.Pagination.NextKey != nil { + req.Pagination.Key = res.Pagination.NextKey + if len(res.Pagination.NextKey) == 0 { + hasNextPage = false + } + } else { + hasNextPage = false + } + + if !allPages || !hasNextPage { + break + } + } + + return grants, nil +} + +// GetQueryContext returns a context that includes the height and uses the timeout from the config +func (cc *CosmosProvider) GetQueryContext(height int64) (context.Context, context.CancelFunc) { + timeout, _ := time.ParseDuration(cc.PCfg.Timeout) // Timeout is validated in the config so no error check + ctx, cancel := context.WithTimeout(context.Background(), timeout) + strHeight := strconv.FormatInt(height, 10) + ctx = metadata.AppendToOutgoingContext(ctx, grpctypes.GRPCBlockHeightHeader, strHeight) + return ctx, cancel +} + // QueryBalance returns the amount of coins in the relayer account func (cc *CosmosProvider) QueryBalance(ctx context.Context, keyName string) (sdk.Coins, error) { addr, err := cc.ShowAddress(keyName) diff --git a/relayer/chains/cosmos/relayer_packets.go b/relayer/chains/cosmos/relayer_packets.go index 168b6be9a..ad7779c6a 100644 --- a/relayer/chains/cosmos/relayer_packets.go +++ b/relayer/chains/cosmos/relayer_packets.go @@ -66,7 +66,9 @@ func (rp relayMsgTimeout) Msg(src provider.ChainProvider, srcPortId, srcChanId, Signer: addr, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } type relayMsgRecvPacket struct { @@ -129,7 +131,9 @@ func (rp relayMsgRecvPacket) Msg(src provider.ChainProvider, srcPortId, srcChanI Signer: addr, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } type relayMsgPacketAck struct { @@ -184,5 +188,7 @@ func (rp relayMsgPacketAck) Msg(src provider.ChainProvider, srcPortId, srcChanId Signer: addr, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index 8d9ae37d1..48eeb6a9d 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -6,6 +6,7 @@ import ( "fmt" "math" "math/big" + "math/rand" "regexp" "strconv" "strings" @@ -14,6 +15,7 @@ import ( "github.com/avast/retry-go/v4" abci "github.com/cometbft/cometbft/abci/types" + "github.com/cometbft/cometbft/libs/bytes" "github.com/cometbft/cometbft/light" rpcclient "github.com/cometbft/cometbft/rpc/client" coretypes "github.com/cometbft/cometbft/rpc/core/types" @@ -78,6 +80,26 @@ func (cc *CosmosProvider) SendMessage(ctx context.Context, msg provider.RelayerM return cc.SendMessages(ctx, []provider.RelayerMessage{msg}, memo) } +var seqGuardSingleton sync.Mutex + +// Gets the sequence guard. If it doesn't exist, initialized and returns it. +func ensureSequenceGuard(cc *CosmosProvider, key string) *WalletState { + seqGuardSingleton.Lock() + defer seqGuardSingleton.Unlock() + + if cc.walletStateMap == nil { + cc.walletStateMap = map[string]*WalletState{} + } + + sequenceGuard, ok := cc.walletStateMap[key] + if !ok { + cc.walletStateMap[key] = &WalletState{} + return cc.walletStateMap[key] + } + + return sequenceGuard +} + // SendMessages attempts to sign, encode, & send a slice of RelayerMessages // This is used extensively in the relayer as an extension of the Provider interface // @@ -101,7 +123,7 @@ func (cc *CosmosProvider) SendMessages(ctx context.Context, msgs []provider.Rela wg.Add(1) if err := retry.Do(func() error { - return cc.SendMessagesToMempool(ctx, msgs, memo, ctx, callback) + return cc.SendMessagesToMempool(ctx, msgs, memo, ctx, []func(*provider.RelayerTxResponse, error){callback}) }, retry.Context(ctx), rtyAtt, rtyDel, rtyErr, retry.OnRetry(func(n uint, err error) { cc.log.Info( "Error building or broadcasting transaction", @@ -137,37 +159,183 @@ func (cc *CosmosProvider) SendMessagesToMempool( memo string, asyncCtx context.Context, - asyncCallback func(*provider.RelayerTxResponse, error), + asyncCallbacks []func(*provider.RelayerTxResponse, error), ) error { - // Guard against account sequence number mismatch errors by locking for the specific wallet for - // the account sequence query all the way through the transaction broadcast success/fail. - cc.txMu.Lock() - defer cc.txMu.Unlock() + txSignerKey, feegranterKey, err := cc.buildSignerConfig(msgs) + if err != nil { + return err + } + + sequenceGuard := ensureSequenceGuard(cc, txSignerKey) + sequenceGuard.Mu.Lock() + defer sequenceGuard.Mu.Unlock() - txBytes, sequence, fees, err := cc.buildMessages(ctx, msgs, memo) + txBytes, sequence, fees, err := cc.buildMessages(ctx, msgs, memo, 0, txSignerKey, feegranterKey, sequenceGuard) if err != nil { // Account sequence mismatch errors can happen on the simulated transaction also. if strings.Contains(err.Error(), sdkerrors.ErrWrongSequence.Error()) { - cc.handleAccountSequenceMismatchError(err) + cc.handleAccountSequenceMismatchError(sequenceGuard, err) } return err } - if err := cc.broadcastTx(ctx, txBytes, msgs, fees, asyncCtx, defaultBroadcastWaitTimeout, asyncCallback); err != nil { + if err := cc.broadcastTx(ctx, txBytes, msgs, fees, asyncCtx, defaultBroadcastWaitTimeout, asyncCallbacks); err != nil { if strings.Contains(err.Error(), sdkerrors.ErrWrongSequence.Error()) { - cc.handleAccountSequenceMismatchError(err) + cc.handleAccountSequenceMismatchError(sequenceGuard, err) } return err } // we had a successful tx broadcast with this sequence, so update it to the next - cc.updateNextAccountSequence(sequence + 1) - + cc.updateNextAccountSequence(sequenceGuard, sequence+1) return nil } +func (cc *CosmosProvider) SubmitTxAwaitResponse(ctx context.Context, msgs []sdk.Msg, memo string, gas uint64, signingKeyName string) (*txtypes.GetTxResponse, error) { + resp, err := cc.SendMsgsWith(ctx, msgs, memo, gas, signingKeyName, "") + 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) + if err != nil { + return nil, err + } + + return tx1resp, err +} + +// Get the TX by hash, waiting for it to be included in a block +func (cc *CosmosProvider) AwaitTx(txHash bytes.HexBytes, timeout time.Duration) (*txtypes.GetTxResponse, error) { + var txByHash *txtypes.GetTxResponse + var txLookupErr error + startTime := time.Now() + timeBetweenQueries := 100 + + txClient := txtypes.NewServiceClient(cc) + + for txByHash == nil { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + if time.Since(startTime) > timeout { + cancel() + return nil, txLookupErr + } + + txByHash, txLookupErr = txClient.GetTx(ctx, &txtypes.GetTxRequest{Hash: txHash.String()}) + if txLookupErr != nil { + time.Sleep(time.Duration(timeBetweenQueries) * time.Millisecond) + } + cancel() + } + + return txByHash, nil +} + +// SendMsgs wraps the msgs in a StdTx, signs and sends it. An error is returned if there +// was an issue sending the transaction. A successfully sent, but failed transaction will +// not return an error. If a transaction is successfully sent, the result of the execution +// of that transaction will be logged. A boolean indicating if a transaction was successfully +// 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) { + sdkConfigMutex.Lock() + sdkConf := sdk.GetConfig() + sdkConf.SetBech32PrefixForAccount(cc.PCfg.AccountPrefix, cc.PCfg.AccountPrefix+"pub") + sdkConf.SetBech32PrefixForValidator(cc.PCfg.AccountPrefix+"valoper", cc.PCfg.AccountPrefix+"valoperpub") + sdkConf.SetBech32PrefixForConsensusNode(cc.PCfg.AccountPrefix+"valcons", cc.PCfg.AccountPrefix+"valconspub") + defer sdkConfigMutex.Unlock() + + rand.Seed(time.Now().UnixNano()) + feegrantKeyAcc, _ := cc.GetKeyAddressForKey(feegranterKey) + + txf, err := cc.PrepareFactory(cc.TxFactory(), signingKey) + if err != nil { + return nil, err + } + + adjusted := gas + + if gas == 0 { + // TODO: Make this work with new CalculateGas method + // TODO: This is related to GRPC client stuff? + // https://github.com/cosmos/cosmos-sdk/blob/5725659684fc93790a63981c653feee33ecf3225/client/tx/tx.go#L297 + _, adjusted, err = cc.CalculateGas(ctx, txf, signingKey, msgs...) + + if err != nil { + return nil, err + } + + adjusted = uint64(float64(adjusted) * cc.PCfg.GasAdjustment) + } + + //Cannot feegrant your own TX + if signingKey != feegranterKey && feegranterKey != "" { + //Must be set in Factory to affect gas calculation (sim tx) as well as real tx + txf = txf.WithFeeGranter(feegrantKeyAcc) + } + + if memo != "" { + txf = txf.WithMemo(memo) + } + + // Set the gas amount on the transaction factory + txf = txf.WithGas(adjusted) + + // Build the transaction builder + txb, err := txf.BuildUnsignedTx(msgs...) + if err != nil { + return nil, err + } + + // Attach the signature to the transaction + // c.LogFailedTx(nil, err, msgs) + // Force encoding in the chain specific address + for _, msg := range msgs { + cc.Cdc.Marshaler.MustMarshalJSON(msg) + } + + err = func() error { + //done := cc.SetSDKContext() + // ensure that we allways call done, even in case of an error or panic + //defer done() + + if err = tx.Sign(txf, signingKey, txb, false); err != nil { + return err + } + return nil + }() + + if err != nil { + return nil, err + } + + // Generate the transaction bytes + txBytes, err := cc.Cdc.TxConfig.TxEncoder()(txb.GetTx()) + if err != nil { + return nil, err + } + + res, err := cc.RPCClient.BroadcastTxAsync(ctx, txBytes) + if res != nil { + fmt.Printf("TX hash: %s\n", res.Hash) + } + if err != nil { + return nil, err + } + + // transaction was executed, log the success or failure using the tx response code + // NOTE: error is nil, logic should use the returned error to determine if the + // transaction was successfully executed. + if res.Code != 0 { + return res, fmt.Errorf("transaction failed with code: %d", res.Code) + } + + return res, nil +} + // sdkError will return the Cosmos SDK registered error for a given codespace/code combo if registered, otherwise nil. func (cc *CosmosProvider) sdkError(codespace string, code uint32) error { // ABCIError will return an error other than "unknown" if syncRes.Code is a registered error in syncRes.Codespace @@ -190,7 +358,7 @@ func (cc *CosmosProvider) broadcastTx( asyncCtx context.Context, // context for async wait for block inclusion after successful tx broadcast asyncTimeout time.Duration, // timeout for waiting for block inclusion - asyncCallback func(*provider.RelayerTxResponse, error), // callback for success/fail of the wait for block inclusion + asyncCallbacks []func(*provider.RelayerTxResponse, error), // callback for success/fail of the wait for block inclusion ) error { res, err := cc.RPCClient.BroadcastTxSync(ctx, tx) isErr := err != nil @@ -228,7 +396,7 @@ func (cc *CosmosProvider) broadcastTx( // TODO: maybe we need to check if the node has tx indexing enabled? // if not, we need to find a new way to block until inclusion in a block - go cc.waitForTx(asyncCtx, res.Hash, msgs, asyncTimeout, asyncCallback) + go cc.waitForTx(asyncCtx, res.Hash, msgs, asyncTimeout, asyncCallbacks) return nil } @@ -240,13 +408,16 @@ func (cc *CosmosProvider) waitForTx( txHash []byte, msgs []provider.RelayerMessage, // used for logging only waitTimeout time.Duration, - callback func(*provider.RelayerTxResponse, error), + callbacks []func(*provider.RelayerTxResponse, error), ) { res, err := cc.waitForBlockInclusion(ctx, txHash, waitTimeout) if err != nil { cc.log.Error("Failed to wait for block inclusion", zap.Error(err)) - if callback != nil { - callback(nil, err) + if len(callbacks) > 0 { + for _, cb := range callbacks { + //Call each callback in order since waitForTx is already invoked asyncronously + cb(nil, err) + } } return } @@ -270,15 +441,21 @@ func (cc *CosmosProvider) waitForTx( if err == nil { err = fmt.Errorf("transaction failed to execute") } - if callback != nil { - callback(nil, err) + if len(callbacks) > 0 { + for _, cb := range callbacks { + //Call each callback in order since waitForTx is already invoked asyncronously + cb(nil, err) + } } cc.LogFailedTx(rlyResp, nil, msgs) return } - if callback != nil { - callback(rlyResp, nil) + if len(callbacks) > 0 { + for _, cb := range callbacks { + //Call each callback in order since waitForTx is already invoked asyncronously + cb(rlyResp, nil) + } } cc.LogSuccessTx(res, msgs) } @@ -345,9 +522,76 @@ func parseEventsFromTxResponse(resp *sdk.TxResponse) []provider.RelayerEvent { return events } -func (cc *CosmosProvider) buildMessages(ctx context.Context, msgs []provider.RelayerMessage, memo string) ([]byte, uint64, sdk.Coins, error) { - // Query account details - txf, err := cc.PrepareFactory(cc.TxFactory()) +func (cc *CosmosProvider) buildSignerConfig(msgs []provider.RelayerMessage) ( + txSignerKey string, + feegranterKey string, + err error, +) { + //Guard against race conditions when choosing a signer/feegranter + cc.feegrantMu.Lock() + defer cc.feegrantMu.Unlock() + + //Some messages have feegranting disabled. If any message in the TX disables feegrants, then the TX will not be feegranted. + isFeegrantEligible := cc.PCfg.FeeGrants != nil + + for _, curr := range msgs { + if cMsg, ok := curr.(CosmosMessage); ok { + if cMsg.FeegrantDisabled { + isFeegrantEligible = false + } + } + } + + //By default, we should sign TXs with the provider's default key + txSignerKey = cc.PCfg.Key + + if isFeegrantEligible { + txSignerKey, feegranterKey = cc.GetTxFeeGrant() + signerAcc, addrErr := cc.GetKeyAddressForKey(txSignerKey) + if addrErr != nil { + err = addrErr + return + } + + signerAccAddr, encodeErr := cc.EncodeBech32AccAddr(signerAcc) + if encodeErr != nil { + err = encodeErr + return + } + + //Overwrite the 'Signer' field in any Msgs that provide an 'optionalSetSigner' callback + for _, curr := range msgs { + if cMsg, ok := curr.(CosmosMessage); ok { + if cMsg.SetSigner != nil { + cMsg.SetSigner(signerAccAddr) + } + } + } + } + + return +} + +func (cc *CosmosProvider) buildMessages( + ctx context.Context, + msgs []provider.RelayerMessage, + memo string, + gas uint64, + txSignerKey string, + feegranterKey string, + sequenceGuard *WalletState, +) ( + txBytes []byte, + sequence uint64, + fees sdk.Coins, + err error, +) { + done := cc.SetSDKContext() + defer done() + + cMsgs := CosmosMsgs(msgs...) + + txf, err := cc.PrepareFactory(cc.TxFactory(), txSignerKey) if err != nil { return nil, 0, sdk.Coins{}, err } @@ -356,73 +600,66 @@ func (cc *CosmosProvider) buildMessages(ctx context.Context, msgs []provider.Rel txf = txf.WithMemo(memo) } - sequence := txf.Sequence() - cc.updateNextAccountSequence(sequence) - if sequence < cc.nextAccountSeq { - sequence = cc.nextAccountSeq + sequence = txf.Sequence() + cc.updateNextAccountSequence(sequenceGuard, sequence) + if sequence < sequenceGuard.NextAccountSequence { + sequence = sequenceGuard.NextAccountSequence txf = txf.WithSequence(sequence) } - // TODO: Make this work with new CalculateGas method - // TODO: This is related to GRPC client stuff? - // https://github.com/cosmos/cosmos-sdk/blob/5725659684fc93790a63981c653feee33ecf3225/client/tx/tx.go#L297 - // If users pass gas adjustment, then calculate gas - _, adjusted, err := cc.CalculateGas(ctx, txf, CosmosMsgs(msgs...)...) - if err != nil { - return nil, 0, sdk.Coins{}, err - } + adjusted := gas - // Set the gas amount on the transaction factory - txf = txf.WithGas(adjusted) + if gas == 0 { + _, adjusted, err = cc.CalculateGas(ctx, txf, txSignerKey, cMsgs...) - var txb client.TxBuilder - // Build the transaction builder & retry on failures - if err := retry.Do(func() error { - txb, err = txf.BuildUnsignedTx(CosmosMsgs(msgs...)...) if err != nil { - return err + return nil, 0, sdk.Coins{}, err } - return nil - }, retry.Context(ctx), rtyAtt, rtyDel, rtyErr); err != nil { - return nil, 0, sdk.Coins{}, err } - done := cc.SetSDKContext() - - if err := retry.Do(func() error { - if err := tx.Sign(txf, cc.PCfg.Key, txb, false); err != nil { - return err + //Cannot feegrant your own TX + if txSignerKey != feegranterKey && feegranterKey != "" { + granterAddr, err := cc.GetKeyAddressForKey(feegranterKey) + if err != nil { + return nil, 0, sdk.Coins{}, err } - return nil - }, retry.Context(ctx), rtyAtt, rtyDel, rtyErr); err != nil { + + txf = txf.WithFeeGranter(granterAddr) + } + + // Set the gas amount on the transaction factory + txf = txf.WithGas(adjusted) + + // Build the transaction builder + txb, err := txf.BuildUnsignedTx(cMsgs...) + if err != nil { return nil, 0, sdk.Coins{}, err } - done() + if err = tx.Sign(txf, txSignerKey, txb, false); err != nil { + return nil, 0, sdk.Coins{}, err + } tx := txb.GetTx() - fees := tx.GetFee() + fees = tx.GetFee() - var txBytes []byte // Generate the transaction bytes - if err := retry.Do(func() error { - var err error - txBytes, err = cc.Cdc.TxConfig.TxEncoder()(tx) - if err != nil { - return err - } - return nil - }, retry.Context(ctx), rtyAtt, rtyDel, rtyErr); err != nil { + txBytes, err = cc.Cdc.TxConfig.TxEncoder()(tx) + if err != nil { return nil, 0, sdk.Coins{}, err } - return txBytes, sequence, fees, nil + return txBytes, txf.Sequence(), fees, nil } // handleAccountSequenceMismatchError will parse the error string, e.g.: // "account sequence mismatch, expected 10, got 9: incorrect account sequence" // and update the next account sequence with the expected value. -func (cc *CosmosProvider) handleAccountSequenceMismatchError(err error) { +func (cc *CosmosProvider) handleAccountSequenceMismatchError(sequenceGuard *WalletState, err error) { + if sequenceGuard == nil { + panic("sequence guard not configured") + } + sequences := numRegex.FindAllString(err.Error(), -1) if len(sequences) != 2 { return @@ -431,9 +668,24 @@ func (cc *CosmosProvider) handleAccountSequenceMismatchError(err error) { if err != nil { return } - cc.nextAccountSeq = nextSeq + sequenceGuard.NextAccountSequence = nextSeq } +// handleAccountSequenceMismatchError will parse the error string, e.g.: +// "account sequence mismatch, expected 10, got 9: incorrect account sequence" +// and update the next account sequence with the expected value. +// func (cc *CosmosProvider) handleAccountSequenceMismatchError(err error) { +// sequences := numRegex.FindAllString(err.Error(), -1) +// if len(sequences) != 2 { +// return +// } +// nextSeq, err := strconv.ParseUint(sequences[0], 10, 64) +// if err != nil { +// return +// } +// cc.nextAccountSeq = nextSeq +// } + // MsgCreateClient creates an sdk.Msg to update the client on src with consensus state from dst func (cc *CosmosProvider) MsgCreateClient( clientState ibcexported.ClientState, @@ -460,7 +712,9 @@ func (cc *CosmosProvider) MsgCreateClient( Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgUpdateClient(srcClientID string, dstHeader ibcexported.ClientMessage) (provider.RelayerMessage, error) { @@ -478,7 +732,9 @@ func (cc *CosmosProvider) MsgUpdateClient(srcClientID string, dstHeader ibcexpor ClientMessage: clientMsg, Signer: acc, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgUpgradeClient(srcClientId string, consRes *clienttypes.QueryConsensusStateResponse, clientRes *clienttypes.QueryClientStateResponse) (provider.RelayerMessage, error) { @@ -489,9 +745,14 @@ func (cc *CosmosProvider) MsgUpgradeClient(srcClientId string, consRes *clientty if acc, err = cc.Address(); err != nil { return nil, err } - return NewCosmosMessage(&clienttypes.MsgUpgradeClient{ClientId: srcClientId, ClientState: clientRes.ClientState, + + msgUpgradeClient := &clienttypes.MsgUpgradeClient{ClientId: srcClientId, ClientState: clientRes.ClientState, ConsensusState: consRes.ConsensusState, ProofUpgradeClient: consRes.GetProof(), - ProofUpgradeConsensusState: consRes.ConsensusState.Value, Signer: acc}), nil + ProofUpgradeConsensusState: consRes.ConsensusState.Value, Signer: acc} + + return NewCosmosMessage(msgUpgradeClient, func(signer string) { + msgUpgradeClient.Signer = signer + }), nil } // MsgTransfer creates a new transfer message @@ -518,7 +779,9 @@ func (cc *CosmosProvider) MsgTransfer( msg.TimeoutHeight = info.TimeoutHeight } - return NewCosmosMessage(msg), nil + msgTransfer := NewCosmosMessage(msg, nil).(CosmosMessage) + msgTransfer.FeegrantDisabled = true + return msgTransfer, nil } func (cc *CosmosProvider) ValidatePacket(msgTransfer provider.PacketInfo, latest provider.LatestBlock) error { @@ -584,7 +847,9 @@ func (cc *CosmosProvider) MsgRecvPacket( Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) PacketAcknowledgement( @@ -622,7 +887,9 @@ func (cc *CosmosProvider) MsgAcknowledgement( Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) PacketReceipt( @@ -675,7 +942,9 @@ func (cc *CosmosProvider) MsgTimeout(msgTransfer provider.PacketInfo, proof prov Signer: signer, } - return NewCosmosMessage(assembled), nil + return NewCosmosMessage(assembled, func(signer string) { + assembled.Signer = signer + }), nil } func (cc *CosmosProvider) MsgTimeoutOnClose(msgTransfer provider.PacketInfo, proof provider.PacketProof) (provider.RelayerMessage, error) { @@ -691,7 +960,9 @@ func (cc *CosmosProvider) MsgTimeoutOnClose(msgTransfer provider.PacketInfo, pro Signer: signer, } - return NewCosmosMessage(assembled), nil + return NewCosmosMessage(assembled, func(signer string) { + assembled.Signer = signer + }), nil } func (cc *CosmosProvider) MsgConnectionOpenInit(info provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { @@ -711,7 +982,9 @@ func (cc *CosmosProvider) MsgConnectionOpenInit(info provider.ConnectionInfo, pr Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) ConnectionHandshakeProof( @@ -773,7 +1046,9 @@ func (cc *CosmosProvider) MsgConnectionOpenTry(msgOpenInit provider.ConnectionIn Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgConnectionOpenAck(msgOpenTry provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { @@ -803,7 +1078,9 @@ func (cc *CosmosProvider) MsgConnectionOpenAck(msgOpenTry provider.ConnectionInf Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) ConnectionProof( @@ -834,7 +1111,9 @@ func (cc *CosmosProvider) MsgConnectionOpenConfirm(msgOpenAck provider.Connectio Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgChannelOpenInit(info provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -857,7 +1136,9 @@ func (cc *CosmosProvider) MsgChannelOpenInit(info provider.ChannelInfo, proof pr Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) ChannelProof( @@ -904,7 +1185,9 @@ func (cc *CosmosProvider) MsgChannelOpenTry(msgOpenInit provider.ChannelInfo, pr Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgChannelOpenAck(msgOpenTry provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -922,7 +1205,9 @@ func (cc *CosmosProvider) MsgChannelOpenAck(msgOpenTry provider.ChannelInfo, pro Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgChannelOpenConfirm(msgOpenAck provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -938,7 +1223,9 @@ func (cc *CosmosProvider) MsgChannelOpenConfirm(msgOpenAck provider.ChannelInfo, Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgChannelCloseInit(info provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -952,7 +1239,9 @@ func (cc *CosmosProvider) MsgChannelCloseInit(info provider.ChannelInfo, proof p Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgChannelCloseConfirm(msgCloseInit provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -968,7 +1257,9 @@ func (cc *CosmosProvider) MsgChannelCloseConfirm(msgCloseInit provider.ChannelIn Signer: signer, } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *CosmosProvider) MsgUpdateClientHeader(latestHeader provider.IBCHeader, trustedHeight clienttypes.Height, trustedHeader provider.IBCHeader) (ibcexported.ClientMessage, error) { @@ -1036,7 +1327,9 @@ func (cc *CosmosProvider) MsgSubmitQueryResponse(chainID string, queryID provide FromAddress: signer, } - return NewCosmosMessage(msg), nil + submitQueryRespMsg := NewCosmosMessage(msg, nil).(CosmosMessage) + submitQueryRespMsg.FeegrantDisabled = true + return submitQueryRespMsg, nil } func (cc *CosmosProvider) MsgSubmitMisbehaviour(clientID string, misbehaviour ibcexported.ClientMessage) (provider.RelayerMessage, error) { @@ -1050,7 +1343,9 @@ func (cc *CosmosProvider) MsgSubmitMisbehaviour(clientID string, misbehaviour ib return nil, err } - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } // RelayPacketFromSequence relays a packet with a given seq on src and returns recvPacket msgs, timeoutPacketmsgs and error @@ -1308,11 +1603,11 @@ func (cc *CosmosProvider) UpdateFeesSpent(chain, key, address string, fees sdk.C // MsgRegisterCounterpartyPayee creates an sdk.Msg to broadcast the counterparty address func (cc *CosmosProvider) MsgRegisterCounterpartyPayee(portID, channelID, relayerAddr, counterpartyPayee string) (provider.RelayerMessage, error) { msg := feetypes.NewMsgRegisterCounterpartyPayee(portID, channelID, relayerAddr, counterpartyPayee) - return NewCosmosMessage(msg), nil + return NewCosmosMessage(msg, nil), nil } // PrepareFactory mutates the tx factory with the appropriate account number, sequence number, and min gas settings. -func (cc *CosmosProvider) PrepareFactory(txf tx.Factory) (tx.Factory, error) { +func (cc *CosmosProvider) PrepareFactory(txf tx.Factory, signingKey string) (tx.Factory, error) { var ( err error from sdk.AccAddress @@ -1321,7 +1616,7 @@ func (cc *CosmosProvider) PrepareFactory(txf tx.Factory) (tx.Factory, error) { // Get key address and retry if fail if err = retry.Do(func() error { - from, err = cc.GetKeyAddress() + from, err = cc.GetKeyAddressForKey(signingKey) if err != nil { return err } @@ -1333,7 +1628,8 @@ func (cc *CosmosProvider) PrepareFactory(txf tx.Factory) (tx.Factory, error) { cliCtx := client.Context{}.WithClient(cc.RPCClient). WithInterfaceRegistry(cc.Cdc.InterfaceRegistry). WithChainID(cc.PCfg.ChainID). - WithCodec(cc.Cdc.Marshaler) + WithCodec(cc.Cdc.Marshaler). + WithFromAddress(from) // Set the account number and sequence on the transaction factory and retry if fail if err = retry.Do(func() error { @@ -1427,8 +1723,8 @@ func (cc *CosmosProvider) SetWithExtensionOptions(txf tx.Factory) (tx.Factory, e } // CalculateGas simulates a tx to generate the appropriate gas settings before broadcasting a tx. -func (cc *CosmosProvider) CalculateGas(ctx context.Context, txf tx.Factory, msgs ...sdk.Msg) (txtypes.SimulateResponse, uint64, error) { - keyInfo, err := cc.Keybase.Key(cc.PCfg.Key) +func (cc *CosmosProvider) CalculateGas(ctx context.Context, txf tx.Factory, signingKey string, msgs ...sdk.Msg) (txtypes.SimulateResponse, uint64, error) { + keyInfo, err := cc.Keybase.Key(signingKey) if err != nil { return txtypes.SimulateResponse{}, 0, err } diff --git a/relayer/chains/cosmos/tx_test.go b/relayer/chains/cosmos/tx_test.go index a582adc54..25bb02dd2 100644 --- a/relayer/chains/cosmos/tx_test.go +++ b/relayer/chains/cosmos/tx_test.go @@ -15,6 +15,18 @@ import ( "github.com/stretchr/testify/require" ) +type mockAccountSequenceMismatchError struct { + Expected uint64 + Actual uint64 +} + +// func TestHandleAccountSequenceMismatchError(t *testing.T) { +// p := &CosmosProvider{} +// ws := &WalletState{} +// p.handleAccountSequenceMismatchError(ws, mockAccountSequenceMismatchError{Actual: 9, Expected: 10}) +// require.Equal(t, ws.NextAccountSequence, uint64(10)) +// } + func TestCosmosProvider_AdjustEstimatedGas(t *testing.T) { testCases := []struct { name string @@ -75,21 +87,10 @@ func TestCosmosProvider_AdjustEstimatedGas(t *testing.T) { } } -type mockAccountSequenceMismatchError struct { - Expected uint64 - Actual uint64 -} - func (err mockAccountSequenceMismatchError) Error() string { return fmt.Sprintf("account sequence mismatch, expected %d, got %d: incorrect account sequence", err.Expected, err.Actual) } -func TestHandleAccountSequenceMismatchError(t *testing.T) { - p := &CosmosProvider{} - p.handleAccountSequenceMismatchError(mockAccountSequenceMismatchError{Actual: 9, Expected: 10}) - require.Equal(t, p.nextAccountSeq, uint64(10)) -} - type mockTxConfig struct { legacytx.StdTxConfig txBuilder *mockTxBuilder diff --git a/relayer/chains/penumbra/tx.go b/relayer/chains/penumbra/tx.go index 4ef4c8d30..dd90ac098 100644 --- a/relayer/chains/penumbra/tx.go +++ b/relayer/chains/penumbra/tx.go @@ -499,7 +499,9 @@ func (cc *PenumbraProvider) MsgUpdateClient(srcClientId string, dstHeader ibcexp Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) ConnectionOpenInit(srcClientId, dstClientId string, dstPrefix commitmenttypes.MerklePrefix, dstHeader ibcexported.ClientMessage) ([]provider.RelayerMessage, error) { @@ -532,7 +534,9 @@ func (cc *PenumbraProvider) ConnectionOpenInit(srcClientId, dstClientId string, Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ConnectionOpenTry(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, dstPrefix commitmenttypes.MerklePrefix, srcClientId, dstClientId, srcConnId, dstConnId string) ([]provider.RelayerMessage, error) { @@ -597,7 +601,9 @@ func (cc *PenumbraProvider) ConnectionOpenTry(ctx context.Context, dstQueryProvi Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ConnectionOpenAck(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, srcClientId, srcConnId, dstClientId, dstConnId string) ([]provider.RelayerMessage, error) { @@ -647,7 +653,9 @@ func (cc *PenumbraProvider) ConnectionOpenAck(ctx context.Context, dstQueryProvi Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ConnectionOpenConfirm(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, dstConnId, srcClientId, srcConnId string) ([]provider.RelayerMessage, error) { @@ -680,7 +688,9 @@ func (cc *PenumbraProvider) ConnectionOpenConfirm(ctx context.Context, dstQueryP Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ChannelOpenInit(srcClientId, srcConnId, srcPortId, srcVersion, dstPortId string, order chantypes.Order, dstHeader ibcexported.ClientMessage) ([]provider.RelayerMessage, error) { @@ -712,7 +722,9 @@ func (cc *PenumbraProvider) ChannelOpenInit(srcClientId, srcConnId, srcPortId, s Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ChannelOpenTry(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, srcPortId, dstPortId, srcChanId, dstChanId, srcVersion, srcConnectionId, srcClientId string) ([]provider.RelayerMessage, error) { @@ -765,7 +777,9 @@ func (cc *PenumbraProvider) ChannelOpenTry(ctx context.Context, dstQueryProvider Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ChannelOpenAck(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, srcClientId, srcPortId, srcChanId, dstChanId, dstPortId string) ([]provider.RelayerMessage, error) { @@ -802,7 +816,9 @@ func (cc *PenumbraProvider) ChannelOpenAck(ctx context.Context, dstQueryProvider Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ChannelOpenConfirm(ctx context.Context, dstQueryProvider provider.QueryProvider, dstHeader ibcexported.ClientMessage, srcClientId, srcPortId, srcChanId, dstPortId, dstChanId string) ([]provider.RelayerMessage, error) { @@ -836,7 +852,9 @@ func (cc *PenumbraProvider) ChannelOpenConfirm(ctx context.Context, dstQueryProv Signer: acc, } - return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg)}, nil + return []provider.RelayerMessage{updateMsg, cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + })}, nil } func (cc *PenumbraProvider) ChannelCloseInit(srcPortId, srcChanId string) (provider.RelayerMessage, error) { @@ -854,7 +872,9 @@ func (cc *PenumbraProvider) ChannelCloseInit(srcPortId, srcChanId string) (provi Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) ChannelCloseConfirm(ctx context.Context, dstQueryProvider provider.QueryProvider, dsth int64, dstChanId, dstPortId, srcPortId, srcChanId string) (provider.RelayerMessage, error) { @@ -879,7 +899,9 @@ func (cc *PenumbraProvider) ChannelCloseConfirm(ctx context.Context, dstQueryPro Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgUpgradeClient(srcClientId string, consRes *clienttypes.QueryConsensusStateResponse, clientRes *clienttypes.QueryClientStateResponse) (provider.RelayerMessage, error) { @@ -890,9 +912,14 @@ func (cc *PenumbraProvider) MsgUpgradeClient(srcClientId string, consRes *client if acc, err = cc.Address(); err != nil { return nil, err } - return cosmos.NewCosmosMessage(&clienttypes.MsgUpgradeClient{ClientId: srcClientId, ClientState: clientRes.ClientState, + + msgUpgradeClient := &clienttypes.MsgUpgradeClient{ClientId: srcClientId, ClientState: clientRes.ClientState, ConsensusState: consRes.ConsensusState, ProofUpgradeClient: consRes.GetProof(), - ProofUpgradeConsensusState: consRes.ConsensusState.Value, Signer: acc}), nil + ProofUpgradeConsensusState: consRes.ConsensusState.Value, Signer: acc} + + return cosmos.NewCosmosMessage(msgUpgradeClient, func(signer string) { + msgUpgradeClient.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgSubmitMisbehaviour(clientID string, misbehaviour ibcexported.ClientMessage) (provider.RelayerMessage, error) { @@ -960,7 +987,9 @@ func (cc *PenumbraProvider) MsgRelayAcknowledgement(ctx context.Context, dst pro Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } } @@ -988,7 +1017,9 @@ func (cc *PenumbraProvider) MsgTransfer( msg.TimeoutHeight = info.TimeoutHeight } - return cosmos.NewCosmosMessage(msg), nil + msgTransfer := cosmos.NewCosmosMessage(msg, nil).(cosmos.CosmosMessage) + msgTransfer.FeegrantDisabled = true + return msgTransfer, nil } // MsgRelayTimeout constructs the MsgTimeout which is to be sent to the sending chain. @@ -1067,7 +1098,9 @@ func (cc *PenumbraProvider) orderedChannelTimeoutMsg( Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) unorderedChannelTimeoutMsg( @@ -1106,7 +1139,9 @@ func (cc *PenumbraProvider) unorderedChannelTimeoutMsg( NextSequenceRecv: packet.Seq(), Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } // MsgRelayRecvPacket constructs the MsgRecvPacket which is to be sent to the receiving chain. @@ -1145,7 +1180,9 @@ func (cc *PenumbraProvider) MsgRelayRecvPacket(ctx context.Context, dst provider Signer: acc, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } } @@ -1200,7 +1237,9 @@ func (cc *PenumbraProvider) MsgRecvPacket(msgTransfer provider.PacketInfo, proof Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) PacketAcknowledgement(ctx context.Context, msgRecvPacket provider.PacketInfo, height uint64) (provider.PacketProof, error) { @@ -1228,7 +1267,9 @@ func (cc *PenumbraProvider) MsgAcknowledgement(msgRecvPacket provider.PacketInfo Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) PacketReceipt(ctx context.Context, msgTransfer provider.PacketInfo, height uint64) (provider.PacketProof, error) { @@ -1257,7 +1298,9 @@ func (cc *PenumbraProvider) MsgTimeout(msgTransfer provider.PacketInfo, proof pr Signer: signer, } - return cosmos.NewCosmosMessage(assembled), nil + return cosmos.NewCosmosMessage(assembled, func(signer string) { + assembled.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgTimeoutOnClose(msgTransfer provider.PacketInfo, proof provider.PacketProof) (provider.RelayerMessage, error) { @@ -1273,7 +1316,9 @@ func (cc *PenumbraProvider) MsgTimeoutOnClose(msgTransfer provider.PacketInfo, p Signer: signer, } - return cosmos.NewCosmosMessage(assembled), nil + return cosmos.NewCosmosMessage(assembled, func(signer string) { + assembled.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgConnectionOpenInit(info provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { @@ -1293,7 +1338,9 @@ func (cc *PenumbraProvider) MsgConnectionOpenInit(info provider.ConnectionInfo, Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) ConnectionHandshakeProof(ctx context.Context, msgOpenInit provider.ConnectionInfo, height uint64) (provider.ConnectionProof, error) { @@ -1351,7 +1398,9 @@ func (cc *PenumbraProvider) MsgConnectionOpenTry(msgOpenInit provider.Connection Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgConnectionOpenAck(msgOpenTry provider.ConnectionInfo, proof provider.ConnectionProof) (provider.RelayerMessage, error) { @@ -1381,7 +1430,9 @@ func (cc *PenumbraProvider) MsgConnectionOpenAck(msgOpenTry provider.ConnectionI Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } // NextSeqRecv queries for the appropriate Tendermint proof required to prove the next expected packet sequence number @@ -1428,7 +1479,9 @@ func (cc *PenumbraProvider) MsgConnectionOpenConfirm(msgOpenAck provider.Connect Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgChannelOpenInit(info provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -1451,7 +1504,9 @@ func (cc *PenumbraProvider) MsgChannelOpenInit(info provider.ChannelInfo, proof Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) ChannelProof(ctx context.Context, msg provider.ChannelInfo, height uint64) (provider.ChannelProof, error) { @@ -1494,7 +1549,9 @@ func (cc *PenumbraProvider) MsgChannelOpenTry(msgOpenInit provider.ChannelInfo, Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgChannelOpenAck(msgOpenTry provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -1512,7 +1569,9 @@ func (cc *PenumbraProvider) MsgChannelOpenAck(msgOpenTry provider.ChannelInfo, p Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgChannelOpenConfirm(msgOpenAck provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -1528,7 +1587,9 @@ func (cc *PenumbraProvider) MsgChannelOpenConfirm(msgOpenAck provider.ChannelInf Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgChannelCloseInit(info provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -1542,7 +1603,9 @@ func (cc *PenumbraProvider) MsgChannelCloseInit(info provider.ChannelInfo, proof Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgChannelCloseConfirm(msgCloseInit provider.ChannelInfo, proof provider.ChannelProof) (provider.RelayerMessage, error) { @@ -1558,7 +1621,9 @@ func (cc *PenumbraProvider) MsgChannelCloseConfirm(msgCloseInit provider.Channel Signer: signer, } - return cosmos.NewCosmosMessage(msg), nil + return cosmos.NewCosmosMessage(msg, func(signer string) { + msg.Signer = signer + }), nil } func (cc *PenumbraProvider) MsgUpdateClientHeader(latestHeader provider.IBCHeader, trustedHeight clienttypes.Height, trustedHeader provider.IBCHeader) (ibcexported.ClientMessage, error) { @@ -2231,7 +2296,7 @@ func (cc *PenumbraProvider) MsgSubmitQueryResponse(chainID string, queryID provi panic("implement me") } -func (cc *PenumbraProvider) SendMessagesToMempool(ctx context.Context, msgs []provider.RelayerMessage, memo string, asyncCtx context.Context, asyncCallback func(*provider.RelayerTxResponse, error)) error { +func (cc *PenumbraProvider) SendMessagesToMempool(ctx context.Context, msgs []provider.RelayerMessage, memo string, asyncCtx context.Context, asyncCallback []func(*provider.RelayerTxResponse, error)) error { sendRsp, err := cc.sendMessagesInner(ctx, msgs, memo) cc.log.Debug("Received response from sending messages", zap.Any("response", sendRsp), zap.Error(err)) return err diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index b17978fc4..d5c8f9db4 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -380,6 +380,15 @@ func (mp *messageProcessor) sendClientUpdate( dst.log.Debug("Client update broadcast completed") } +type PathProcessorMessageResp struct { + Response *provider.RelayerTxResponse + DestinationChain provider.ChainProvider + SuccessfulTx bool + Error error +} + +var PathProcMessageCollector chan *PathProcessorMessageResp + // sendBatchMessages will send a batch of messages, // then increment metrics counters for successful packet messages. func (mp *messageProcessor) sendBatchMessages( @@ -413,7 +422,7 @@ func (mp *messageProcessor) sendBatchMessages( dst.log.Debug("Will relay messages", fields...) - callback := func(rtr *provider.RelayerTxResponse, err error) { + callback := func(_ *provider.RelayerTxResponse, err error) { // only increment metrics counts for successful packets if err != nil || mp.metrics == nil { return @@ -434,8 +443,23 @@ func (mp *messageProcessor) sendBatchMessages( mp.metrics.IncPacketsRelayed(dst.info.PathName, dst.info.ChainID, channel, port, t.msg.eventType) } } + callbacks := []func(rtr *provider.RelayerTxResponse, err error){callback} + + //During testing, this adds a callback so our test case can inspect the TX results + if PathProcMessageCollector != nil { + testCallback := func(rtr *provider.RelayerTxResponse, err error) { + msgResult := &PathProcessorMessageResp{ + DestinationChain: dst.chainProvider, + Response: rtr, + SuccessfulTx: err == nil, + Error: err, + } + PathProcMessageCollector <- msgResult + } + callbacks = append(callbacks, testCallback) + } - if err := dst.chainProvider.SendMessagesToMempool(broadcastCtx, msgs, mp.memo, ctx, callback); err != nil { + if err := dst.chainProvider.SendMessagesToMempool(broadcastCtx, msgs, mp.memo, ctx, callbacks); err != nil { errFields := []zapcore.Field{ zap.String("path_name", src.info.PathName), zap.String("src_chain_id", src.info.ChainID), @@ -487,9 +511,9 @@ func (mp *messageProcessor) sendSingleMessage( dst.log.Debug(fmt.Sprintf("Will broadcast %s message", msgType), zap.Object("msg", tracker)) // Set callback for packet messages so that we increment prometheus metrics on successful relays. - var callback func(rtr *provider.RelayerTxResponse, err error) + callbacks := []func(rtr *provider.RelayerTxResponse, err error){} if t, ok := tracker.(packetMessageToTrack); ok { - callback = func(rtr *provider.RelayerTxResponse, err error) { + callback := func(_ *provider.RelayerTxResponse, err error) { // only increment metrics counts for successful packets if err != nil || mp.metrics == nil { return @@ -504,9 +528,25 @@ func (mp *messageProcessor) sendSingleMessage( } mp.metrics.IncPacketsRelayed(dst.info.PathName, dst.info.ChainID, channel, port, t.msg.eventType) } + + callbacks = append(callbacks, callback) + } + + //During testing, this adds a callback so our test case can inspect the TX results + if PathProcMessageCollector != nil { + testCallback := func(rtr *provider.RelayerTxResponse, err error) { + msgResult := &PathProcessorMessageResp{ + DestinationChain: dst.chainProvider, + Response: rtr, + SuccessfulTx: err == nil, + Error: err, + } + PathProcMessageCollector <- msgResult + } + callbacks = append(callbacks, testCallback) } - err := dst.chainProvider.SendMessagesToMempool(broadcastCtx, msgs, mp.memo, ctx, callback) + err := dst.chainProvider.SendMessagesToMempool(broadcastCtx, msgs, mp.memo, ctx, callbacks) if err != nil { errFields := []zapcore.Field{ zap.String("path_name", src.info.PathName), diff --git a/relayer/provider/provider.go b/relayer/provider/provider.go index a740dd845..a1c150e0a 100644 --- a/relayer/provider/provider.go +++ b/relayer/provider/provider.go @@ -391,7 +391,7 @@ type ChainProvider interface { memo string, asyncCtx context.Context, - asyncCallback func(*RelayerTxResponse, error), + asyncCallbacks []func(*RelayerTxResponse, error), ) error MsgRegisterCounterpartyPayee(portID, channelID, relayerAddr, counterpartyPayeeAddr string) (RelayerMessage, error) diff --git a/relayer/strategies.go b/relayer/strategies.go index 047478938..fd2856aad 100644 --- a/relayer/strategies.go +++ b/relayer/strategies.go @@ -8,6 +8,8 @@ import ( "sync" "time" + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/avast/retry-go/v4" "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" "github.com/cosmos/relayer/v2/relayer/chains/cosmos" @@ -46,6 +48,8 @@ func StartRelayer( initialBlockHistory uint64, metrics *processor.PrometheusMetrics, ) chan error { + //prevent incorrect bech32 address prefixed addresses when calling AccAddress.String() + sdk.SetAddrCacheEnabled(false) errorChan := make(chan error, 1) switch processorType { From 5236f6f5635c639b02d8949d30882d2f9ab31b64 Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Thu, 27 Jul 2023 14:05:04 -0700 Subject: [PATCH 08/37] Export Client Trusting Period to Prometheus metrics (#1246) * export client trusting period * update docs --- docs/advanced_usage.md | 40 +++++++++----------------- relayer/processor/message_processor.go | 1 + relayer/processor/metrics.go | 12 +++++++- 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index a0b518b07..1b6c37595 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -10,33 +10,19 @@ you can use `http://$IP:5183/relayer/metrics` as a target for your prometheus sc Exported metrics: -| **Exported Metric** | **Description** | **Type** | -|:----------------------------------:|:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------:|:--------:| -| cosmos_relayer_observed_packets | The total number of observed packets | Counter | -| cosmos_relayer_relayed_packets | The total number of relayed packets | Counter | -| cosmos_relayer_chain_latest_height | The current height of the chain | Gauge | -| cosmos_relayer_wallet_balance | The current balance for the relayer's wallet | Gauge | -| cosmos_relayer_fees_spent | The amount of fees spent from the relayer's wallet | Gauge | -| cosmos_relayer_tx_failure |
The total number of tx failures broken up into catagories .
Categories:
- "packet messages are redundant"
- "insufficient funds"
- "invalid coins"
- "out of gas"
- "incorrect account sequence"

"Tx Failure" is the the catch all bucket| Counter | -**Example metrics** - -``` -go_goroutines 29 -... -go_threads 39 -... -observed_packets{chain="cosmoshub-4",channel="channel-141",path="hubosmo",port="transfer",type="acknowledge_packet"} 57 -observed_packets{chain="cosmoshub-4",channel="channel-141",path="hubosmo",port="transfer",type="recv_packet"} 103 -observed_packets{chain="cosmoshub-4",channel="channel-141",path="hubosmo",port="transfer",type="send_packet"} 58 -observed_packets{chain="osmosis-1",channel="channel-0",path="hubosmo",port="transfer",type="acknowledge_packet"} 107 -observed_packets{chain="osmosis-1",channel="channel-0",path="hubosmo",port="transfer",type="recv_packet"} 60 -observed_packets{chain="osmosis-1",channel="channel-0",path="hubosmo",port="transfer",type="send_packet"} 102 -... -relayed_packets{chain="cosmoshub-4",channel="channel-141",path="hubosmo",port="transfer",type="acknowledge_packet"} 31 -relayed_packets{chain="cosmoshub-4",channel="channel-141",path="hubosmo",port="transfer",type="recv_packet"} 65 -relayed_packets{chain="osmosis-1",channel="channel-0",path="hubosmo",port="transfer",type="acknowledge_packet"} 36 -relayed_packets{chain="osmosis-1",channel="channel-0",path="hubosmo",port="transfer",type="recv_packet"} 35 -``` +| **Exported Metric** | **Description** | **Type** | +|:---------------------------------------------: |:----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: |:--------: | +| cosmos_relayer_observed_packets | The total number of observed packets | Counter | +| cosmos_relayer_relayed_packets | The total number of relayed packets | Counter | +| cosmos_relayer_chain_latest_height | The current height of the chain | Gauge | +| cosmos_relayer_wallet_balance | The current balance for the relayer's wallet | Gauge | +| cosmos_relayer_fees_spent | The amount of fees spent from the relayer's wallet | Gauge | +| cosmos_relayer_tx_failure |
The total number of tx failures broken up into categories:
- "packet messages are redundant"
- "insufficient funds"
- "invalid coins"
- "out of gas"


"Tx Failure" is the the catch all bucket | Counter | +| cosmos_relayer_block_query_errors_total | The total number of block query failures. The failures are separated into two categories:
- "RPC Client"
- "IBC Header" | Counter | +| cosmos_relayer_client_expiration_seconds | Seconds until the client expires | Gauge | +| cosmos_relayer_client_trusting_period_seconds | The trusting period (in seconds) of the client | Gauge | + + --- diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index d5c8f9db4..9b9ed250e 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -148,6 +148,7 @@ func (mp *messageProcessor) shouldUpdateClientNow(ctx context.Context, src, dst if mp.metrics != nil { timeToExpiration := dst.clientState.TrustingPeriod - time.Since(consensusHeightTime) mp.metrics.SetClientExpiration(src.info.PathName, dst.info.ChainID, dst.clientState.ClientID, fmt.Sprint(dst.clientState.TrustingPeriod.String()), timeToExpiration) + mp.metrics.SetClientTrustingPeriod(src.info.PathName, dst.info.ChainID, dst.info.ClientID, time.Duration(dst.clientState.TrustingPeriod)) } if shouldUpdateClientNow { diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index 6e522cfc2..0b40e3d1a 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -17,6 +17,7 @@ type PrometheusMetrics struct { TxFailureError *prometheus.CounterVec BlockQueryFailure *prometheus.CounterVec ClientExpiration *prometheus.GaugeVec + ClientTrustingPeriod *prometheus.GaugeVec } func (m *PrometheusMetrics) AddPacketsObserved(path, chain, channel, port, eventType string, count int) { @@ -43,6 +44,10 @@ func (m *PrometheusMetrics) SetClientExpiration(pathName, chain, clientID, trust m.ClientExpiration.WithLabelValues(pathName, chain, clientID, trustingPeriod).Set(timeToExpiration.Seconds()) } +func (m *PrometheusMetrics) SetClientTrustingPeriod(pathName, chain, clientID string, trustingPeriod time.Duration) { + m.ClientTrustingPeriod.WithLabelValues(pathName, chain, clientID).Set(trustingPeriod.Abs().Seconds()) +} + func (m *PrometheusMetrics) IncBlockQueryFailure(chain, err string) { m.BlockQueryFailure.WithLabelValues(chain, err).Inc() } @@ -58,6 +63,7 @@ func NewPrometheusMetrics() *PrometheusMetrics { blockQueryFailureLabels := []string{"chain", "type"} walletLabels := []string{"chain", "gas_price", "key", "address", "denom"} clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} + clientTrustingPeriodLables := []string{"path_name", "chain", "client_id"} registry := prometheus.NewRegistry() registerer := promauto.With(registry) return &PrometheusMetrics{ @@ -88,11 +94,15 @@ func NewPrometheusMetrics() *PrometheusMetrics { }, txFailureLabels), BlockQueryFailure: registerer.NewCounterVec(prometheus.CounterOpts{ Name: "cosmos_relayer_block_query_errors_total", - Help: "The total number of block query failures. The failures are separated into two catagories: 'RPC Client' and 'IBC Header'", + Help: "The total number of block query failures. The failures are separated into two categories: 'RPC Client' and 'IBC Header'", }, blockQueryFailureLabels), ClientExpiration: registerer.NewGaugeVec(prometheus.GaugeOpts{ Name: "cosmos_relayer_client_expiration_seconds", Help: "Seconds until the client expires", }, clientExpirationLables), + ClientTrustingPeriod: registerer.NewGaugeVec(prometheus.GaugeOpts{ + Name: "cosmos_relayer_client_trusting_period_seconds", + Help: "The trusting period (in seconds) of the client", + }, clientTrustingPeriodLables), } } From f054ac4658293d563bf29968af5b46331cea9712 Mon Sep 17 00:00:00 2001 From: mmsqe Date: Sat, 29 Jul 2023 10:50:10 +0800 Subject: [PATCH 09/37] separate feegrant test to avoid no space left on device (#1250) from scenarios test in ci --- .github/workflows/interchaintest.yml | 22 ++++++++++++++++++++++ Makefile | 3 +++ interchaintest/feegrant_test.go | 8 ++++---- 3 files changed, 29 insertions(+), 4 deletions(-) diff --git a/.github/workflows/interchaintest.yml b/.github/workflows/interchaintest.yml index 814b44289..cffb9647e 100644 --- a/.github/workflows/interchaintest.yml +++ b/.github/workflows/interchaintest.yml @@ -117,6 +117,28 @@ jobs: - name: interchaintest run: make interchaintest-fee-middleware + fee-grant: + runs-on: ubuntu-latest + steps: + - name: Set up Go 1.20 + uses: actions/setup-go@v1 + with: + go-version: 1.20 + id: go + + - name: checkout relayer + uses: actions/checkout@v2 + + - uses: actions/cache@v1 + with: + path: ~/go/pkg/mod + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} + restore-keys: | + ${{ runner.os }}-go- + + - name: interchaintest + run: make interchaintest-fee-grant + scenarios: runs-on: ubuntu-latest steps: diff --git a/Makefile b/Makefile index 66f67961d..20e9bbb2b 100644 --- a/Makefile +++ b/Makefile @@ -88,6 +88,9 @@ interchaintest-misbehaviour: interchaintest-fee-middleware: cd interchaintest && go test -race -v -run TestRelayerFeeMiddleware . +interchaintest-fee-grant: + cd interchaintest && go test -race -v -run TestRelayerFeeGrant . + interchaintest-scenario: ## Scenario tests are suitable for simple networks of 1 validator and no full nodes. They test specific functionality. cd interchaintest && go test -timeout 30m -race -v -run TestScenario ./... diff --git a/interchaintest/feegrant_test.go b/interchaintest/feegrant_test.go index 0d0dcd13a..d120c15b5 100644 --- a/interchaintest/feegrant_test.go +++ b/interchaintest/feegrant_test.go @@ -55,12 +55,12 @@ func genMnemonic(t *testing.T) string { return mn } -// TestScenarioFeegrantBasic Feegrant on a single chain -// Run this test with e.g. go test -timeout 300s -run ^TestScenarioFeegrantBasic$ github.com/cosmos/relayer/v2/ibctest. +// TestRelayerFeeGrant Feegrant on a single chain +// Run this test with e.g. go test -timeout 300s -run ^TestRelayerFeeGrant$ github.com/cosmos/relayer/v2/ibctest. // // Helpful to debug: -// docker ps -a --format {{.Names}} then e.g. docker logs gaia-1-val-0-TestScenarioFeegrantBasic 2>&1 -f -func TestScenarioFeegrantBasic(t *testing.T) { +// docker ps -a --format {{.Names}} then e.g. docker logs gaia-1-val-0-TestRelayerFeeGrant 2>&1 -f +func TestRelayerFeeGrant(t *testing.T) { ctx := context.Background() logger := zaptest.NewLogger(t) From 1301e1d991bdc19d5070ced484fb392e4954d75f Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Sat, 29 Jul 2023 07:13:12 -0700 Subject: [PATCH 10/37] Add extra client info when querying client expiration (#1247) * extra client info * cleanup print * remove extra comments * add alias * allow only one client * spelling * remainingTime --------- Co-authored-by: Justin Tieri <37750742+jtieri@users.noreply.github.com> --- cmd/query.go | 35 ++++++++++++------ relayer/query.go | 33 ++++++++++------- relayer/query_test.go | 83 ++++++++++++++++++++++++++++++++++++------- 3 files changed, 115 insertions(+), 36 deletions(-) diff --git a/cmd/query.go b/cmd/query.go index cd91bc2d7..15ccd743a 100644 --- a/cmd/query.go +++ b/cmd/query.go @@ -1070,9 +1070,10 @@ $ %s query unrelayed-acks demo-path channel-0`, func queryClientsExpiration(a *appState) *cobra.Command { cmd := &cobra.Command{ - Use: "clients-expiration path", - Short: "query for light clients expiration date", - Args: withUsage(cobra.ExactArgs(1)), + Use: "clients-expiration path", + Aliases: []string{"ce"}, + Short: "query for light clients expiration date", + Args: withUsage(cobra.ExactArgs(1)), Example: strings.TrimSpace(fmt.Sprintf(` $ %s query clients-expiration demo-path`, appName, @@ -1095,17 +1096,29 @@ $ %s query clients-expiration demo-path`, return err } - srcExpiration, err := relayer.QueryClientExpiration(cmd.Context(), c[src], c[dst]) - if err != nil { - return err + srcExpiration, srcClientInfo, errSrc := relayer.QueryClientExpiration(cmd.Context(), c[src], c[dst]) + if errSrc != nil && !strings.Contains(errSrc.Error(), "light client not found") { + return errSrc } - dstExpiration, err := relayer.QueryClientExpiration(cmd.Context(), c[dst], c[src]) - if err != nil { - return err + dstExpiration, dstClientInfo, errDst := relayer.QueryClientExpiration(cmd.Context(), c[dst], c[src]) + if errDst != nil && !strings.Contains(errDst.Error(), "light client not found") { + return errDst + } + + // if only the src light client is found, just print info for source light client + if errSrc == nil && errDst != nil { + fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[src], srcExpiration, srcClientInfo)) + return nil + } + + // if only the dst light client is found, just print info for destination light client + if errDst == nil && errSrc != nil { + fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[dst], dstExpiration, dstClientInfo)) + return nil } - fmt.Fprintf(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[src], srcExpiration)) - fmt.Fprintf(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[dst], dstExpiration)) + fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[src], srcExpiration, srcClientInfo)) + fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[dst], dstExpiration, dstClientInfo)) return nil }, diff --git a/relayer/query.go b/relayer/query.go index 24c40672a..08b2ec1b0 100644 --- a/relayer/query.go +++ b/relayer/query.go @@ -272,39 +272,48 @@ func QueryBalance(ctx context.Context, chain *Chain, address string, showDenoms return out, nil } -func QueryClientExpiration(ctx context.Context, src, dst *Chain) (time.Time, error) { +func QueryClientExpiration(ctx context.Context, src, dst *Chain) (time.Time, ClientStateInfo, error) { latestHeight, err := src.ChainProvider.QueryLatestHeight(ctx) if err != nil { - return time.Time{}, err + return time.Time{}, ClientStateInfo{}, err } clientStateRes, err := src.ChainProvider.QueryClientStateResponse(ctx, latestHeight, src.ClientID()) if err != nil { - return time.Time{}, err + return time.Time{}, ClientStateInfo{}, err } clientInfo, err := ClientInfoFromClientState(clientStateRes.ClientState) if err != nil { - return time.Time{}, err + return time.Time{}, ClientStateInfo{}, err } clientTime, err := dst.ChainProvider.BlockTime(ctx, int64(clientInfo.LatestHeight.GetRevisionHeight())) if err != nil { - return time.Time{}, err + return time.Time{}, ClientStateInfo{}, err } - return clientTime.Add(clientInfo.TrustingPeriod), nil + return clientTime.Add(clientInfo.TrustingPeriod), clientInfo, nil } -func SPrintClientExpiration(chain *Chain, expiration time.Time) string { +func SPrintClientExpiration(chain *Chain, expiration time.Time, clientInfo ClientStateInfo) string { now := time.Now() remainingTime := expiration.Sub(now) expirationFormatted := expiration.Format(time.RFC822) - if remainingTime < 0 { - return fmt.Sprintf("client %s (%s) is already expired (%s)\n", - chain.ClientID(), chain.ChainID(), expirationFormatted) + var status string + if remainingTime <= 0 { + status = "EXPIRED" + } else { + status = "GOOD" } - return fmt.Sprintf("client %s (%s) expires in %s (%s)\n", - chain.ClientID(), chain.ChainID(), remainingTime.Round(time.Second), expirationFormatted) + + return fmt.Sprintf(` + client: %s (%s) + HEALTH: %s + TIME: %s (%s) + LAST UPDATE HEIGHT: %d + TRUSTING PERIOD: %s + `, + chain.ClientID(), chain.ChainID(), status, expirationFormatted, remainingTime.Round(time.Second), clientInfo.LatestHeight.GetRevisionHeight(), clientInfo.TrustingPeriod.String()) } diff --git a/relayer/query_test.go b/relayer/query_test.go index fb67c60d1..39dc837b7 100644 --- a/relayer/query_test.go +++ b/relayer/query_test.go @@ -1,76 +1,124 @@ package relayer import ( - "github.com/cosmos/relayer/v2/relayer/chains/cosmos" "testing" "time" + "github.com/cosmos/relayer/v2/relayer/chains/cosmos" + + clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/exported" "github.com/stretchr/testify/require" ) func TestSPrintClientExpiration_PrintChainId(t *testing.T) { previousTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("expected-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, previousTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) require.Contains(t, expiration, "expected-chain-id") } func TestSPrintClientExpiration_PrintClientId(t *testing.T) { previousTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("test-chain-id", "expected-client-id") - expiration := SPrintClientExpiration(chain, previousTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) require.Contains(t, expiration, "expected-client-id") } -func TestSPrintClientExpiration_PrintIsAlreadyExpired_WhenTimeIsInPast(t *testing.T) { +func TestSPrintClientExpiration_PrintExpired_WhenTimeIsInPast(t *testing.T) { previousTime := time.Now().Add(-10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("test-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, previousTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) - require.Contains(t, expiration, "is already expired") + require.Contains(t, expiration, "EXPIRED") } func TestSPrintClientExpiration_PrintRFC822FormattedTime_WhenTimeIsInPast(t *testing.T) { pastTime := time.Now().Add(-10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) - chain := mockChain("test-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, pastTime) + chain := mockChain("expected-chain-id", "test-client-id") + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, pastTime, *clientStateInfo) require.Contains(t, expiration, pastTime.Format(time.RFC822)) } -func TestSPrintClientExpiration_PrintExpiresIn_WhenTimeIsInFuture(t *testing.T) { +func TestSPrintClientExpiration_PrintGood_WhenTimeIsInFuture(t *testing.T) { previousTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("test-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, previousTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) - require.Contains(t, expiration, "expires in") + require.Contains(t, expiration, "GOOD") } func TestSPrintClientExpiration_PrintRFC822FormattedTime_WhenTimeIsInFuture(t *testing.T) { futureTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("test-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, futureTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, futureTime, *clientStateInfo) require.Contains(t, expiration, futureTime.Format(time.RFC822)) } func TestSPrintClientExpiration_PrintRemainingTime_WhenTimeIsInFuture(t *testing.T) { futureTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) chain := mockChain("test-chain-id", "test-client-id") - expiration := SPrintClientExpiration(chain, futureTime) + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, futureTime, *clientStateInfo) require.Contains(t, expiration, "10h0m0s") } +func TestSPrintClientExpiration_TrustingPeriod(t *testing.T) { + previousTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) + + chain := mockChain("expected-chain-id", "test-client-id") + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) + + require.Contains(t, expiration, "1h0m0s") +} + +func TestSPrintClientExpiration_LastUpdateHeight(t *testing.T) { + previousTime := time.Now().Add(10 * time.Hour) + mockHeight := clienttypes.NewHeight(1, 100) + trustingPeriod := time.Duration(1 * time.Hour) + + chain := mockChain("expected-chain-id", "test-client-id") + clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) + expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) + + require.Contains(t, expiration, "100") +} + func mockChain(chainId string, clientId string) *Chain { return &Chain{ Chainid: chainId, @@ -85,3 +133,12 @@ func mockChain(chainId string, clientId string) *Chain { }, } } + +func mockClientStateInfo(chainID string, trustingPeriod time.Duration, latestHeight ibcexported.Height) *ClientStateInfo { + mockHeight := clienttypes.NewHeight(1, 100) + return &ClientStateInfo{ + ChainID: chainID, + TrustingPeriod: time.Duration(1 * time.Hour), + LatestHeight: mockHeight, + } +} From ab1c4fc1dfe9d82a0bd8227596b7b4045831856a Mon Sep 17 00:00:00 2001 From: Andrew Gouin Date: Mon, 31 Jul 2023 16:12:06 -0500 Subject: [PATCH 11/37] next seq ack handling (#1244) * next seq ack handling and chan order * use max msgs for ack flush * improve logs * fix check * don't override unless not chantypes.NONE * fix: Suppressing scary SDK error on redundant packets (#1214) Co-authored-by: Andrew Gouin * tidy logic * improve logic and order detection * shorten flushFailureRetry * check empty string * tidy logs. better account sequence regex. don't split up ordered channel batches --------- Co-authored-by: Joe Abbey Co-authored-by: jtieri --- .gitignore | 2 + go.work.sum | 1238 ----------------- .../chains/cosmos/cosmos_chain_processor.go | 16 +- relayer/chains/cosmos/message_handlers.go | 10 +- .../chains/cosmos/message_handlers_test.go | 10 +- relayer/chains/cosmos/query.go | 23 + relayer/chains/cosmos/tx.go | 23 +- relayer/chains/mock/mock_chain_processor.go | 2 +- relayer/chains/penumbra/message_handlers.go | 8 +- .../penumbra/penumbra_chain_processor.go | 5 +- relayer/chains/penumbra/query.go | 23 + relayer/processor/message_processor.go | 9 +- relayer/processor/path_end_runtime.go | 2 +- relayer/processor/path_processor.go | 16 +- relayer/processor/path_processor_internal.go | 239 +++- relayer/processor/types.go | 24 +- relayer/provider/provider.go | 1 + 17 files changed, 293 insertions(+), 1358 deletions(-) delete mode 100644 go.work.sum diff --git a/.gitignore b/.gitignore index 835dd0cc9..1af13e52e 100644 --- a/.gitignore +++ b/.gitignore @@ -21,3 +21,5 @@ dist/ # Don't commit the vendor directory if anyone runs 'go mod vendor'. /vendor + +go.work.sum diff --git a/go.work.sum b/go.work.sum deleted file mode 100644 index 4232792ab..000000000 --- a/go.work.sum +++ /dev/null @@ -1,1238 +0,0 @@ -4d63.com/gochecknoglobals v0.1.0 h1:zeZSRqj5yCg28tCkIV/z/lWbwvNm5qnKVS15PI8nhD0= -4d63.com/gochecknoglobals v0.1.0/go.mod h1:wfdC5ZjKSPr7CybKEcgJhUOgeAQW1+7WcyK8OvUilfo= -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512 h1:SRsZGA7aFnCZETmov57jwPrWuTmaZK6+4R4v5FUe1/c= -bazil.org/fuse v0.0.0-20200407214033-5883e5a4b512/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM= -cloud.google.com/go v0.0.0-20170206221025-ce650573d812/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go/accessapproval v1.5.0 h1:/nTivgnV/n1CaAeo+ekGexTYUsKEU9jUVkoY5359+3Q= -cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= -cloud.google.com/go/accessapproval v1.6.0 h1:x0cEHro/JFPd7eS4BlEWNTMecIj2HdXjOVB5BtvwER0= -cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accesscontextmanager v1.7.0 h1:MG60JgnEoawHJrbWw0jGdv6HLNSf6gQvYRiXpuzqgEA= -cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= -cloud.google.com/go/aiplatform v1.37.0 h1:zTw+suCVchgZyO+k847wjzdVjWmrAuehxdvcZvJwfGg= -cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= -cloud.google.com/go/analytics v0.19.0 h1:LqAo3tAh2FU9+w/r7vc3hBjU23Kv7GhO/PDIW7kIYgM= -cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= -cloud.google.com/go/apigateway v1.5.0 h1:ZI9mVO7x3E9RK/BURm2p1aw9YTBSCQe3klmyP1WxWEg= -cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= -cloud.google.com/go/apigeeconnect v1.5.0 h1:sWOmgDyAsi1AZ48XRHcATC0tsi9SkPT7DA/+VCfkaeA= -cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= -cloud.google.com/go/apigeeregistry v0.6.0 h1:E43RdhhCxdlV+I161gUY2rI4eOaMzHTA5kNkvRsFXvc= -cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= -cloud.google.com/go/apikeys v0.6.0 h1:B9CdHFZTFjVti89tmyXXrO+7vSNo2jvZuHG8zD5trdQ= -cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= -cloud.google.com/go/appengine v1.7.1 h1:aBGDKmRIaRRoWJ2tAoN0oVSHoWLhtO9aj/NvUyP4aYs= -cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= -cloud.google.com/go/area120 v0.7.1 h1:ugckkFh4XkHJMPhTIx0CyvdoBxmOpMe8rNs4Ok8GAag= -cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= -cloud.google.com/go/artifactregistry v1.13.0 h1:o1Q80vqEB6Qp8WLEH3b8FBLNUCrGQ4k5RFj0sn/sgO8= -cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= -cloud.google.com/go/asset v1.13.0 h1:YAsssO08BqZ6mncbb6FPlj9h6ACS7bJQUOlzciSfbNk= -cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= -cloud.google.com/go/assuredworkloads v1.10.0 h1:VLGnVFta+N4WM+ASHbhc14ZOItOabDLH1MSoDv+Xuag= -cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/automl v1.12.0 h1:50VugllC+U4IGl3tDNcZaWvApHBTrn/TvyHDJ0wM+Uw= -cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= -cloud.google.com/go/baremetalsolution v0.5.0 h1:2AipdYXL0VxMboelTTw8c1UJ7gYu35LZYUbuRv9Q28s= -cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= -cloud.google.com/go/batch v0.7.0 h1:YbMt0E6BtqeD5FvSv1d56jbVsWEzlGm55lYte+M6Mzs= -cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= -cloud.google.com/go/beyondcorp v0.5.0 h1:UkY2BTZkEUAVrgqnSdOJ4p3y9ZRBPEe1LkjgC8Bj/Pc= -cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= -cloud.google.com/go/bigquery v1.50.0 h1:RscMV6LbnAmhAzD893Lv9nXXy2WCaJmbxYPWDLbGqNQ= -cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= -cloud.google.com/go/billing v1.13.0 h1:JYj28UYF5w6VBAh0gQYlgHJ/OD1oA+JgW29YZQU+UHM= -cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= -cloud.google.com/go/binaryauthorization v1.5.0 h1:d3pMDBCCNivxt5a4eaV7FwL7cSH0H7RrEnFrTb1QKWs= -cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= -cloud.google.com/go/certificatemanager v1.6.0 h1:5C5UWeSt8Jkgp7OWn2rCkLmYurar/vIWIoSQ2+LaTOc= -cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= -cloud.google.com/go/channel v1.12.0 h1:GpcQY5UJKeOekYgsX3QXbzzAc/kRGtBq43fTmyKe6Uw= -cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= -cloud.google.com/go/cloudbuild v1.9.0 h1:GHQCjV4WlPPVU/j3Rlpc8vNIDwThhd1U9qSY/NPZdko= -cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= -cloud.google.com/go/clouddms v1.5.0 h1:E7v4TpDGUyEm1C/4KIrpVSOCTm0P6vWdHT0I4mostRA= -cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= -cloud.google.com/go/cloudtasks v1.10.0 h1:uK5k6abf4yligFgYFnG0ni8msai/dSv6mDmiBulU0hU= -cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/contactcenterinsights v1.6.0 h1:jXIpfcH/VYSE1SYcPzO0n1VVb+sAamiLOgCw45JbOQk= -cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= -cloud.google.com/go/container v1.15.0 h1:NKlY/wCDapfVZlbVVaeuu2UZZED5Dy1z4Zx1KhEzm8c= -cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= -cloud.google.com/go/containeranalysis v0.9.0 h1:EQ4FFxNaEAg8PqQCO7bVQfWz9NVwZCUKaM1b3ycfx3U= -cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= -cloud.google.com/go/datacatalog v1.13.0 h1:4H5IJiyUE0X6ShQBqgFFZvGGcrwGVndTwUSLP4c52gw= -cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= -cloud.google.com/go/dataflow v0.8.0 h1:eYyD9o/8Nm6EttsKZaEGD84xC17bNgSKCu0ZxwqUbpg= -cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= -cloud.google.com/go/dataform v0.7.0 h1:Dyk+fufup1FR6cbHjFpMuP4SfPiF3LI3JtoIIALoq48= -cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= -cloud.google.com/go/datafusion v1.6.0 h1:sZjRnS3TWkGsu1LjYPFD/fHeMLZNXDK6PDHi2s2s/bk= -cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= -cloud.google.com/go/datalabeling v0.7.0 h1:ch4qA2yvddGRUrlfwrNJCr79qLqhS9QBwofPHfFlDIk= -cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= -cloud.google.com/go/dataplex v1.6.0 h1:RvoZ5T7gySwm1CHzAw7yY1QwwqaGswunmqEssPxU/AM= -cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= -cloud.google.com/go/dataproc v1.12.0 h1:W47qHL3W4BPkAIbk4SWmIERwsWBaNnWm0P2sdx3YgGU= -cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= -cloud.google.com/go/dataqna v0.7.0 h1:yFzi/YU4YAdjyo7pXkBE2FeHbgz5OQQBVDdbErEHmVQ= -cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= -cloud.google.com/go/datastore v1.11.0 h1:iF6I/HaLs3Ado8uRKMvZRvF/ZLkWaWE9i8AiHzbC774= -cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= -cloud.google.com/go/datastream v1.7.0 h1:BBCBTnWMDwwEzQQmipUXxATa7Cm7CA/gKjKcR2w35T0= -cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= -cloud.google.com/go/deploy v1.8.0 h1:otshdKEbmsi1ELYeCKNYppwV0UH5xD05drSdBm7ouTk= -cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= -cloud.google.com/go/dialogflow v1.32.0 h1:uVlKKzp6G/VtSW0E7IH1Y5o0H48/UOCmqksG2riYCwQ= -cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= -cloud.google.com/go/dlp v1.9.0 h1:1JoJqezlgu6NWCroBxr4rOZnwNFILXr4cB9dMaSKO4A= -cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= -cloud.google.com/go/documentai v1.18.0 h1:KM3Xh0QQyyEdC8Gs2vhZfU+rt6OCPF0dwVwxKgLmWfI= -cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= -cloud.google.com/go/domains v0.8.0 h1:2ti/o9tlWL4N+wIuWUNH+LbfgpwxPr8J1sv9RHA4bYQ= -cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= -cloud.google.com/go/edgecontainer v1.0.0 h1:O0YVE5v+O0Q/ODXYsQHmHb+sYM8KNjGZw2pjX2Ws41c= -cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= -cloud.google.com/go/errorreporting v0.3.0 h1:kj1XEWMu8P0qlLhm3FwcaFsUvXChV/OraZwA70trRR0= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.5.0 h1:gIzEhCoOT7bi+6QZqZIzX1Erj4SswMPIteNvYVlu+pM= -cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= -cloud.google.com/go/eventarc v1.11.0 h1:fsJmNeqvqtk74FsaVDU6cH79lyZNCYP8Rrv7EhaB/PU= -cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= -cloud.google.com/go/filestore v1.6.0 h1:ckTEXN5towyTMu4q0uQ1Mde/JwTHur0gXs8oaIZnKfw= -cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= -cloud.google.com/go/firestore v1.9.0 h1:IBlRyxgGySXu5VuW0RgGFlTtLukSnNkpDiEOMkQkmpA= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/functions v1.13.0 h1:pPDqtsXG2g9HeOQLoquLbmvmb82Y4Ezdo1GXuotFoWg= -cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= -cloud.google.com/go/gaming v1.9.0 h1:7vEhFnZmd931Mo7sZ6pJy7uQPDxF7m7v8xtBheG08tc= -cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= -cloud.google.com/go/gkebackup v0.4.0 h1:za3QZvw6ujR0uyqkhomKKKNoXDyqYGPJies3voUK8DA= -cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= -cloud.google.com/go/gkeconnect v0.7.0 h1:gXYKciHS/Lgq0GJ5Kc9SzPA35NGc3yqu6SkjonpEr2Q= -cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= -cloud.google.com/go/gkehub v0.12.0 h1:TqCSPsEBQ6oZSJgEYZ3XT8x2gUadbvfwI32YB0kuHCs= -cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= -cloud.google.com/go/gkemulticloud v0.5.0 h1:8I84Q4vl02rJRsFiinBxl7WCozfdLlUVBQuSrqr9Wtk= -cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= -cloud.google.com/go/grafeas v0.2.0 h1:CYjC+xzdPvbV65gi6Dr4YowKcmLo045pm18L0DhdELM= -cloud.google.com/go/gsuiteaddons v1.5.0 h1:1mvhXqJzV0Vg5Fa95QwckljODJJfDFXV4pn+iL50zzA= -cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/iap v1.7.1 h1:PxVHFuMxmSZyfntKXHXhd8bo82WJ+LcATenq7HLdVnU= -cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= -cloud.google.com/go/ids v1.3.0 h1:fodnCDtOXuMmS8LTC2y3h8t24U8F3eKWfhi+3LY6Qf0= -cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= -cloud.google.com/go/iot v1.6.0 h1:39W5BFSarRNZfVG0eXI5LYux+OVQT8GkgpHCnrZL2vM= -cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= -cloud.google.com/go/kms v1.10.1 h1:7hm1bRqGCA1GBRQUrp831TwJ9TWhP+tvLuP497CQS2g= -cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= -cloud.google.com/go/language v1.9.0 h1:7Ulo2mDk9huBoBi8zCE3ONOoBrL6UXfAI71CLQ9GEIM= -cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= -cloud.google.com/go/lifesciences v0.8.0 h1:uWrMjWTsGjLZpCTWEAzYvyXj+7fhiZST45u9AgasasI= -cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= -cloud.google.com/go/logging v1.7.0 h1:CJYxlNNNNAMkHp9em/YEXcfJg+rPDg7YfwoRpMU+t5I= -cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= -cloud.google.com/go/managedidentities v1.5.0 h1:ZRQ4k21/jAhrHBVKl/AY7SjgzeJwG1iZa+mJ82P+VNg= -cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= -cloud.google.com/go/maps v0.7.0 h1:mv9YaczD4oZBZkM5XJl6fXQ984IkJNHPwkc8MUsdkBo= -cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= -cloud.google.com/go/mediatranslation v0.7.0 h1:anPxH+/WWt8Yc3EdoEJhPMBRF7EhIdz426A+tuoA0OU= -cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= -cloud.google.com/go/memcache v1.9.0 h1:8/VEmWCpnETCrBwS3z4MhT+tIdKgR1Z4Tr2tvYH32rg= -cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= -cloud.google.com/go/metastore v1.10.0 h1:QCFhZVe2289KDBQ7WxaHV2rAmPrmRAdLC6gbjUd3HPo= -cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= -cloud.google.com/go/monitoring v1.13.0 h1:2qsrgXGVoRXpP7otZ14eE1I568zAa92sJSDPyOJvwjM= -cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= -cloud.google.com/go/networkconnectivity v1.11.0 h1:ZD6b4Pk1jEtp/cx9nx0ZYcL3BKqDa+KixNDZ6Bjs1B8= -cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= -cloud.google.com/go/networkmanagement v1.6.0 h1:8KWEUNGcpSX9WwZXq7FtciuNGPdPdPN/ruDm769yAEM= -cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= -cloud.google.com/go/networksecurity v0.8.0 h1:sOc42Ig1K2LiKlzG71GUVloeSJ0J3mffEBYmvu+P0eo= -cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= -cloud.google.com/go/notebooks v1.8.0 h1:Kg2K3K7CbSXYJHZ1aGQpf1xi5x2GUvQWf2sFVuiZh8M= -cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= -cloud.google.com/go/optimization v1.3.1 h1:dj8O4VOJRB4CUwZXdmwNViH1OtI0WtWL867/lnYH248= -cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= -cloud.google.com/go/orchestration v1.6.0 h1:Vw+CEXo8M/FZ1rb4EjcLv0gJqqw89b7+g+C/EmniTb8= -cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= -cloud.google.com/go/orgpolicy v1.10.0 h1:XDriMWug7sd0kYT1QKofRpRHzjad0bK8Q8uA9q+XrU4= -cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= -cloud.google.com/go/osconfig v1.11.0 h1:PkSQx4OHit5xz2bNyr11KGcaFccL5oqglFPdTboyqwQ= -cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= -cloud.google.com/go/oslogin v1.9.0 h1:whP7vhpmc+ufZa90eVpkfbgzJRK/Xomjz+XCD4aGwWw= -cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= -cloud.google.com/go/phishingprotection v0.7.0 h1:l6tDkT7qAEV49MNEJkEJTB6vOO/onbSOcNtAT09HPuA= -cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= -cloud.google.com/go/policytroubleshooter v1.6.0 h1:yKAGC4p9O61ttZUswaq9GAn1SZnEzTd0vUYXD7ZBT7Y= -cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= -cloud.google.com/go/privatecatalog v0.8.0 h1:EPEJ1DpEGXLDnmc7mnCAqFmkwUJbIsaLAiLHVOkkwtc= -cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= -cloud.google.com/go/pubsub v1.30.0 h1:vCge8m7aUKBJYOgrZp7EsNDf6QMd2CAlXZqWTn3yq6s= -cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= -cloud.google.com/go/pubsublite v1.7.0 h1:cb9fsrtpINtETHiJ3ECeaVzrfIVhcGjhhJEjybHXHao= -cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= -cloud.google.com/go/recaptchaenterprise v1.3.1 h1:u6EznTGzIdsyOsvm+Xkw0aSuKFXQlyjGE9a4exk6iNQ= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.0 h1:6iOCujSNJ0YS7oNymI64hXsjGq60T4FK1zdLugxbzvU= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= -cloud.google.com/go/recommendationengine v0.7.0 h1:VibRFCwWXrFebEWKHfZAt2kta6pS7Tlimsnms0fjv7k= -cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= -cloud.google.com/go/recommender v1.9.0 h1:ZnFRY5R6zOVk2IDS1Jbv5Bw+DExCI5rFumsTnMXiu/A= -cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= -cloud.google.com/go/redis v1.11.0 h1:JoAd3SkeDt3rLFAAxEvw6wV4t+8y4ZzfZcZmddqphQ8= -cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= -cloud.google.com/go/resourcemanager v1.7.0 h1:NRM0p+RJkaQF9Ee9JMnUV9BQ2QBIOq/v8M+Pbv/wmCs= -cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= -cloud.google.com/go/resourcesettings v1.5.0 h1:8Dua37kQt27CCWHm4h/Q1XqCF6ByD7Ouu49xg95qJzI= -cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= -cloud.google.com/go/retail v1.12.0 h1:1Dda2OpFNzIb4qWgFZjYlpP7sxX3aLeypKG6A3H4Yys= -cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= -cloud.google.com/go/run v0.9.0 h1:ydJQo+k+MShYnBfhaRHSZYeD/SQKZzZLAROyfpeD9zw= -cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= -cloud.google.com/go/scheduler v1.9.0 h1:NpQAHtx3sulByTLe2dMwWmah8PWgeoieFPpJpArwFV0= -cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= -cloud.google.com/go/secretmanager v1.10.0 h1:pu03bha7ukxF8otyPKTFdDz+rr9sE3YauS5PliDXK60= -cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= -cloud.google.com/go/security v1.13.0 h1:PYvDxopRQBfYAXKAuDpFCKBvDOWPWzp9k/H5nB3ud3o= -cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= -cloud.google.com/go/securitycenter v1.19.0 h1:AF3c2s3awNTMoBtMX3oCUoOMmGlYxGOeuXSYHNBkf14= -cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= -cloud.google.com/go/servicecontrol v1.11.1 h1:d0uV7Qegtfaa7Z2ClDzr9HJmnbJW7jn0WhZ7wOX6hLE= -cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= -cloud.google.com/go/servicedirectory v1.9.0 h1:SJwk0XX2e26o25ObYUORXx6torSFiYgsGkWSkZgkoSU= -cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= -cloud.google.com/go/servicemanagement v1.8.0 h1:fopAQI/IAzlxnVeiKn/8WiV6zKndjFkvi+gzu+NjywY= -cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= -cloud.google.com/go/serviceusage v1.6.0 h1:rXyq+0+RSIm3HFypctp7WoXxIA563rn206CfMWdqXX4= -cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= -cloud.google.com/go/shell v1.6.0 h1:wT0Uw7ib7+AgZST9eCDygwTJn4+bHMDtZo5fh7kGWDU= -cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= -cloud.google.com/go/spanner v1.45.0 h1:7VdjZ8zj4sHbDw55atp5dfY6kn1j9sam9DRNpPQhqR4= -cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= -cloud.google.com/go/speech v1.15.0 h1:JEVoWGNnTF128kNty7T4aG4eqv2z86yiMJPT9Zjp+iw= -cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= -cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storagetransfer v1.8.0 h1:5T+PM+3ECU3EY2y9Brv0Sf3oka8pKmsCfpQ07+91G9o= -cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= -cloud.google.com/go/talent v1.5.0 h1:nI9sVZPjMKiO2q3Uu0KhTDVov3Xrlpt63fghP9XjyEM= -cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= -cloud.google.com/go/texttospeech v1.6.0 h1:H4g1ULStsbVtalbZGktyzXzw6jP26RjVGYx9RaYjBzc= -cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= -cloud.google.com/go/tpu v1.5.0 h1:/34T6CbSi+kTv5E19Q9zbU/ix8IviInZpzwz3rsFE+A= -cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= -cloud.google.com/go/trace v1.9.0 h1:olxC0QHC59zgJVALtgqfD9tGk0lfeCP5/AGXL3Px/no= -cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= -cloud.google.com/go/translate v1.7.0 h1:GvLP4oQ4uPdChBmBaUSa/SaZxCdyWELtlAaKzpHsXdA= -cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/video v1.15.0 h1:upIbnGI0ZgACm58HPjAeBMleW3sl5cT84AbYQ8PWOgM= -cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/videointelligence v1.10.0 h1:Uh5BdoET8XXqXX2uXIahGb+wTKbLkGH7s4GXR58RrG8= -cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= -cloud.google.com/go/vision v1.2.0 h1:/CsSTkbmO9HC8iQpxbK8ATms3OQaX3YQUeTMGCxlaK4= -cloud.google.com/go/vision/v2 v2.7.0 h1:8C8RXUJoflCI4yVdqhTy9tRyygSHmp60aP363z23HKg= -cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= -cloud.google.com/go/vmmigration v1.6.0 h1:Azs5WKtfOC8pxvkyrDvt7J0/4DYBch0cVbuFfCCFt5k= -cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= -cloud.google.com/go/vmwareengine v0.3.0 h1:b0NBu7S294l0gmtrT0nOJneMYgZapr5x9tVWvgDoVEM= -cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= -cloud.google.com/go/vpcaccess v1.6.0 h1:FOe6CuiQD3BhHJWt7E8QlbBcaIzVRddupwJlp7eqmn4= -cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= -cloud.google.com/go/webrisk v1.8.0 h1:IY+L2+UwxcVm2zayMAtBhZleecdIFLiC+QJMzgb0kT0= -cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= -cloud.google.com/go/websecurityscanner v1.5.0 h1:AHC1xmaNMOZtNqxI9Rmm87IJEyPaRkOxeI0gpAacXGk= -cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= -cloud.google.com/go/workflows v1.10.0 h1:FfGp9w0cYnaKZJhUOMqCOJCYT/WlvYBfTQhFWV3sRKI= -cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9 h1:VpgP7xuJadIUuKccphEpTJnWhS2jkQyMt6Y7pJCD7fY= -github.com/Abirdcfly/dupword v0.0.7 h1:z14n0yytA3wNO2gpCD/jVtp/acEXPGmYu0esewpBt6Q= -github.com/Abirdcfly/dupword v0.0.7/go.mod h1:K/4M1kj+Zh39d2aotRwypvasonOyAMH1c/IZJzE0dmk= -github.com/AndreasBriese/bbloom v0.0.0-20190825152654-46b345b51c96 h1:cTp8I5+VIoKjsnZuH8vjyaysT/ses3EvZeaV/1UkF2M= -github.com/Antonboom/errname v0.1.7 h1:mBBDKvEYwPl4WFFNwec1CZO096G6vzK9vvDQzAwkako= -github.com/Antonboom/errname v0.1.7/go.mod h1:g0ONh16msHIPgJSGsecu1G/dcF2hlYR/0SddnIAGavU= -github.com/Antonboom/nilnil v0.1.1 h1:PHhrh5ANKFWRBh7TdYmyyq2gyT2lotnvFvvFbylF81Q= -github.com/Antonboom/nilnil v0.1.1/go.mod h1:L1jBqoWM7AOeTD+tSquifKSesRHs4ZdaxvZR+xdJEaI= -github.com/Azure/azure-sdk-for-go/sdk/azcore v0.21.1 h1:qoVeMsc9/fh/yhxVaA0obYjVH/oI/ihrOoMwsLS9KSA= -github.com/Azure/azure-sdk-for-go/sdk/internal v0.8.3 h1:E+m3SkZCN0Bf5q7YdTs5lSm2CYY3CK4spn5OmUIiQtk= -github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v0.3.0 h1:Px2UA+2RvSSvv+RvJNuUB6n7rs5Wsel4dXLe90Um2n4= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= -github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802 h1:1BDTz0u9nC3//pOCMdNH+CiXJVYJh5UQNCOBG7jbELc= -github.com/CosmWasm/wasmd v0.40.0-rc.1 h1:prIM2vP1jNh0zgs9seua5BgKdayBgp3FiHtwxFcZSGs= -github.com/CosmWasm/wasmvm v1.2.3 h1:OKYlobwmVGbl0eSn0mXoAAjE5hIuXnQCLPjbNd91sVY= -github.com/DataDog/datadog-go v3.2.0+incompatible h1:qSG2N4FghB1He/r2mFrWKCaL7dXCilEuNEeAn20fdD4= -github.com/DataDog/zstd v1.4.5 h1:EndNeuB0l9syBZhut0wns3gV1hL8zX8LIu6ZiVHWLIQ= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24 h1:sHglBQTwgx+rWPdisA5ynNEsoARbiCBOyGcJM4/OzsM= -github.com/Djarvur/go-err113 v0.0.0-20210108212216-aea10b59be24/go.mod h1:4UJr5HIiMZrwgkSPdsjy2uOQExX/WEILpIrO9UPGuXs= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0 h1:+r1rSv4gvYn0wmRjC8X7IAzX8QezqtFV9m0MUHFJgts= -github.com/GaijinEntertainment/go-exhaustruct/v2 v2.3.0/go.mod h1:b3g59n2Y+T5xmcxJL+UEG2f8cQploZm1mR/v6BW0mU0= -github.com/HdrHistogram/hdrhistogram-go v1.1.2 h1:5IcZpTvzydCQeHzK4Ef/D5rrSqwxob0t8PQPMybUNFM= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible h1:1G1pk05UrOh0NlF1oeaaix1x8XzrfjIDK47TY0Zehcw= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.2.0 h1:3MEsd0SM6jqZojhjLWWeBY+Kcjy9i6MQAeY7YgDP83g= -github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= -github.com/OpenPeeDeeP/depguard v1.1.1 h1:TSUznLjvp/4IUP+OQ0t/4jF4QUyxIcVX8YnghZdunyA= -github.com/OpenPeeDeeP/depguard v1.1.1/go.mod h1:JtAMzWkmFEzDPyAd+W0NHl1lvpQKTvT9jnRVsohBKpc= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4 h1:ra2OtmuW0AE5csawV4YXMNGNQQXvLRps3z2Z59OPO+I= -github.com/ProtonMail/go-crypto v0.0.0-20221026131551-cf6655e29de4/go.mod h1:UBYPn8k0D56RtnR8RFQMjmh4KrZzWJ5o7Z9SYjossQ8= -github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s= -github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= -github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= -github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5 h1:rFw4nCn9iMW+Vajsk51NtYIcwSTkXr+JGrMd36kTDJw= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/alecthomas/kingpin/v2 v2.3.1 h1:ANLJcKmQm4nIaog7xdr/id6FM6zm5hHnfZrvtKPxqGg= -github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAuRjVTiNNhvNRfY2Wxp9nhfyel4rklc= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= -github.com/alexkohler/prealloc v1.0.0 h1:Hbq0/3fJPQhNkN0dR95AVrr6R7tou91y0uHG5pOcUuw= -github.com/alexkohler/prealloc v1.0.0/go.mod h1:VetnK3dIgFBBKmg0YnD9F9x6Icjd+9cvfHR56wJVlKE= -github.com/alingse/asasalint v0.0.11 h1:SFwnQXJ49Kx/1GghOFz1XGqHYKp21Kq1nHad/0WQRnw= -github.com/alingse/asasalint v0.0.11/go.mod h1:nCaoMhw7a9kSJObvQyVzNTPBDbNpdocqrSP7t/cW5+I= -github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/antihax/optional v1.0.0 h1:xK2lYat7ZLaVVcIuj82J8kIro4V6kDe0AUDFboUCwcg= -github.com/apache/arrow/go/v11 v11.0.0 h1:hqauxvFQxww+0mEU/2XHG6LT7eZternCZq+A5Yly2uM= -github.com/apache/thrift v0.16.0 h1:qEy6UW60iVOlUy+b9ZR0d5WzUWYGOo4HfopoyBaNmoY= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e h1:QEF07wC0T1rKkctt1RINW/+RMTVmiwxETico2l3gxJA= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA= -github.com/armon/go-metrics v0.4.0/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310 h1:BUAU3CGlLvorLI26FmByPp2eC2qla6E1Tw+scpcg/to= -github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw= -github.com/ashanbrown/forbidigo v1.3.0 h1:VkYIwb/xxdireGAdJNZoo24O4lmnEWkactplBlWTShc= -github.com/ashanbrown/forbidigo v1.3.0/go.mod h1:vVW7PEdqEFqapJe95xHkTfB1+XvZXBFg8t0sG2FIxmI= -github.com/ashanbrown/makezero v1.1.1 h1:iCQ87C0V0vSyO+M9E/FZYbu65auqH0lnsOkf5FcB28s= -github.com/ashanbrown/makezero v1.1.1/go.mod h1:i1bJLCRSCHOcOa9Y6MyF2FTfMZMFdHvxKHxgO5Z1axI= -github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= -github.com/aws/aws-lambda-go v1.13.3 h1:SuCy7H3NLyp+1Mrfp+m80jcbi9KYWAs9/BXwppwRDzY= -github.com/aws/aws-sdk-go-v2 v1.9.1 h1:ZbovGV/qo40nrOJ4q8G33AGICzaPI45FHQWJ9650pF4= -github.com/aws/aws-sdk-go-v2/config v1.1.1 h1:ZAoq32boMzcaTW9bcUacBswAmHTbvlvDJICgHFZuECo= -github.com/aws/aws-sdk-go-v2/credentials v1.1.1 h1:NbvWIM1Mx6sNPTxowHgS2ewXCRp+NGTzUYb/96FZJbY= -github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.0.2 h1:EtEU7WRaWliitZh2nmuxEXrN0Cb8EgPUFGIoTMeqbzI= -github.com/aws/aws-sdk-go-v2/service/cloudwatch v1.8.1 h1:w/fPGB0t5rWwA43mux4e9ozFSH5zF1moQemlA131PWc= -github.com/aws/aws-sdk-go-v2/service/internal/presigned-url v1.0.2 h1:4AH9fFjUlVktQMznF+YN33aWNXaR4VgDXyP28qokJC0= -github.com/aws/aws-sdk-go-v2/service/route53 v1.1.1 h1:cKr6St+CtC3/dl/rEBJvlk7A/IN5D5F02GNkGzfbtVU= -github.com/aws/aws-sdk-go-v2/service/sso v1.1.1 h1:37QubsarExl5ZuCBlnRP+7l1tNwZPBSTqpTBrPH98RU= -github.com/aws/aws-sdk-go-v2/service/sts v1.1.1 h1:TJoIfnIFubCX0ACVeJ0w46HEH5MwjwYN4iFhuYIhfIY= -github.com/aws/smithy-go v1.8.0 h1:AEwwwXQZtUwP5Mz506FeXXrKBe0jA8gVM+1gEcSRooc= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/bkielbasa/cyclop v1.2.0 h1:7Jmnh0yL2DjKfw28p86YTd/B4lRGcNuu12sKE35sM7A= -github.com/bkielbasa/cyclop v1.2.0/go.mod h1:qOI0yy6A7dYC4Zgsa72Ppm9kONl0RoIlPbzot9mhmeI= -github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= -github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ089M= -github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= -github.com/bombsimon/wsl/v3 v3.3.0 h1:Mka/+kRLoQJq7g2rggtgQsjuI/K5Efd87WX96EWFxjM= -github.com/bombsimon/wsl/v3 v3.3.0/go.mod h1:st10JtZYLE4D5sC7b8xV4zTKZwAQjCH/Hy2Pm1FNZIc= -github.com/bradleyfalzon/ghinstallation/v2 v2.0.4 h1:tXKVfhE7FcSkhkv0UwkLvPDeZ4kz6OXd0PKPlFqf81M= -github.com/breml/bidichk v0.2.3 h1:qe6ggxpTfA8E75hdjWPZ581sY3a2lnl0IRxLQFelECI= -github.com/breml/bidichk v0.2.3/go.mod h1:8u2C6DnAy0g2cEq+k/A2+tr9O1s+vHGxWn0LTc70T2A= -github.com/breml/errchkjson v0.3.0 h1:YdDqhfqMT+I1vIxPSas44P+9Z9HzJwCeAzjB8PxP1xw= -github.com/breml/errchkjson v0.3.0/go.mod h1:9Cogkyv9gcT8HREpzi3TiqBxCqDzo8awa92zSDFcofU= -github.com/btcsuite/btcd/btcec/v2 v2.2.1/go.mod h1:9/CSmJxmuvqzX9Wh2fXMWToLOHhPd11lSPuIupwTkI8= -github.com/btcsuite/btcd/btcutil v1.1.2/go.mod h1:UR7dsSJzJUfMmFiiLlIrMq1lS9jh9EdCV7FStZSnpi0= -github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= -github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= -github.com/btcsuite/goleveldb v1.0.0 h1:Tvd0BfvqX9o823q1j2UZ/epQo09eJh6dTcRp79ilIN4= -github.com/btcsuite/snappy-go v1.0.0 h1:ZxaA6lo2EpxGddsA8JwWOcxlzRybb444sgmeJQMJGQE= -github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= -github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk= -github.com/bufbuild/buf v1.7.0 h1:uWRjhIXcrWkzIkA5TqXGyJbF51VW54QJsQZ3nwaes5Q= -github.com/bufbuild/buf v1.7.0/go.mod h1:Go40fMAF46PnPLC7jJgTQhAI95pmC0+VtxFKVC0qLq0= -github.com/bufbuild/connect-go v1.0.0 h1:htSflKUT8y1jxhoPhPYTZMrsY3ipUXjjrbcZR5O2cVo= -github.com/bufbuild/connect-go v1.0.0/go.mod h1:9iNvh/NOsfhNBUH5CtvXeVUskQO1xsrEviH7ZArwZ3I= -github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= -github.com/butuzov/ireturn v0.1.1 h1:QvrO2QF2+/Cx1WA/vETCIYBKtRjc30vesdoPUNo1EbY= -github.com/butuzov/ireturn v0.1.1/go.mod h1:Wh6Zl3IMtTpaIKbmwzqi6olnM9ptYQxxVacMsOEFPoc= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/casbin/casbin/v2 v2.37.0 h1:/poEwPSovi4bTOcP752/CsTQiRz2xycyVKFG7GUhbDw= -github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/cp v0.1.0 h1:SE+dxFebS7Iik5LK0tsi1k9ZCxEaFX4AjQmoyA+1dJk= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/charithe/durationcheck v0.0.9 h1:mPP4ucLrf/rKZiIG/a9IPXHGlh8p4CzgpyTy6EEutYk= -github.com/charithe/durationcheck v0.0.9/go.mod h1:SSbRIBVfMjCi/kEB6K65XEA83D6prSM8ap1UCpNKtgg= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375 h1:E7LT642ysztPWE0dfz43cWOvMiF42DyTRC+eZIaO4yI= -github.com/chavacava/garif v0.0.0-20220630083739-93517212f375/go.mod h1:4m1Rv7xfuwWPNKXlThldNuJvutYM6J95wNuuVmn55To= -github.com/checkpoint-restore/go-criu/v5 v5.3.0 h1:wpFFOoomK3389ue2lAb0Boag6XPht5QYpipxmSNL4d8= -github.com/cheekybits/genny v1.0.0 h1:uGGa4nei+j20rOSeDeP5Of12XVm7TGUd4dJA9RDitfE= -github.com/cheggaaa/pb v1.0.27 h1:wIkZHkNfC7R6GI5w7l/PdAdzXzlrbcI3p8OAlnkTsnc= -github.com/cilium/ebpf v0.7.0 h1:1k/q3ATgxSXRdrmPfH8d7YK0GfqVsEKZAX9dQZvs56k= -github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible h1:C29Ae4G5GtYyYMm1aztcyj/J5ckgJm2zwdDajFbx1NY= -github.com/circonus-labs/circonusllhist v0.1.3 h1:TJH+oke8D16535+jHExHj4nQvzlZrj7ug5D7I/orNUA= -github.com/clbanning/mxj v1.8.4 h1:HuhwZtbyvyOw+3Z1AowPkU87JkJUSv751ELWaiTpj8I= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec h1:EdRZT3IeKQmfCSrgo8SZ8V3MEnskuJP0wCYNpe+aiXo= -github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= -github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/cloudflare-go v0.14.0 h1:gFqGlGl/5f9UGXAaKapCGUfaTCgRKKnzu2VvzMZlOFA= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe h1:QQ3GSy+MqSHxm/d8nCtnAiZdYFd45cYZPs8vOOIYKfk= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195 h1:58f1tJ1ra+zFINPlwLWvQsR9CzAKt2e+EWV2yX9oXQ4= -github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa h1:OaNxuTZr7kxeODyLWsRMC+OD03aFUH+mW6r2d+MWa5Y= -github.com/cockroachdb/errors v1.9.1 h1:yFVvsI0VxmRShfawbt/laCIDy/mtTqqnvoNgiy5bEV8= -github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= -github.com/cockroachdb/pebble v0.0.0-20220817183557-09c6e030a677 h1:qbb/AE938DFhOajUYh9+OXELpSF9KZw2ZivtmW6eX1Q= -github.com/cockroachdb/redact v1.1.3 h1:AKZds10rFSIj7qADf0g46UixK8NNLwWTNdCIGS5wfSQ= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w= -github.com/cometbft/cometbft v0.37.1/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= -github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= -github.com/consensys/gnark-crypto v0.4.1-0.20210426202927-39ac3d4b3f1f h1:C43yEtQ6NIf4ftFXD/V55gnGFgPbMQobd//YlnLjUJ8= -github.com/containerd/aufs v1.0.0 h1:2oeJiwX5HstO7shSrPZjrohJZLzK36wvpdmzDRkL/LY= -github.com/containerd/btrfs v1.0.0 h1:osn1exbzdub9L5SouXO5swW4ea/xVdJZ3wokxN5GrnA= -github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= -github.com/containerd/console v1.0.3 h1:lIr7SlA5PxZyMV30bDW0MGbiOPXwc63yRuCP0ARubLw= -github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= -github.com/containerd/fifo v1.0.0 h1:6PirWBr9/L7GDamKr+XM0IeUFXu5mf3M/BPpH9gaLBU= -github.com/containerd/go-cni v1.1.6 h1:el5WPymG5nRRLQF1EfB97FWob4Tdc8INg8RZMaXWZlo= -github.com/containerd/go-runc v1.0.0 h1:oU+lLv1ULm5taqgV/CJivypVODI4SUz1znWjv3nNYS0= -github.com/containerd/imgcrypt v1.1.4 h1:iKTstFebwy3Ak5UF0RHSeuCTahC5OIrPJa6vjMAM81s= -github.com/containerd/nri v0.1.0 h1:6QioHRlThlKh2RkRTR4kIT3PKAcrLo3gIWnjkM4dQmQ= -github.com/containerd/ttrpc v1.1.0 h1:GbtyLRxb0gOLR0TYQWt3O6B0NvT8tMdorEHqIQo/lWI= -github.com/containerd/typeurl v1.0.2 h1:Chlt8zIieDbzQFzXzAeBEF92KhExuE4p9p92/QmY7aY= -github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s= -github.com/containerd/zfs v1.0.0 h1:cXLJbx+4Jj7rNsTiqVfm6i+RNLx6FFA2fMmDlEf+Wm8= -github.com/containernetworking/cni v1.1.1 h1:ky20T7c0MvKvbMOwS/FrlbNwjEoqJEUUYfsL4b0mc4k= -github.com/containernetworking/plugins v1.1.1 h1:+AGfFigZ5TiQH00vhR8qPeSatj53eNGz0C1d3wVYlHE= -github.com/containers/ocicrypt v1.1.3 h1:uMxn2wTb4nDR7GqG3rnZSfpJXqWURfzZ7nKydzIeKpA= -github.com/coreos/etcd v3.3.10+incompatible h1:jFneRYjIvLMLhDLCzuTuU4rSJUjRplcJQ7pD7MnhC04= -github.com/coreos/go-etcd v2.0.0+incompatible h1:bXhRBIXoTm9BYHS3gE0TtQuyNZyeEMux2sDi4oo5YOo= -github.com/coreos/go-semver v0.3.0 h1:wkHLiw0WNATZnSG7epLsujiMCgPAc9xhjJ4tgnAxmfM= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7 h1:u9SHYsPQNyt5tgDm3YN7+9dYrpK96E5wFilTFWIDZOM= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf h1:CAKfRE2YtTUIjjh1bkBtyYFaUT/WmOqsJjgtihT0vMI= -github.com/cosmos/cosmos-db v0.0.0-20221226095112-f3c38ecb5e32 h1:zlCp9n3uwQieELltZWHRmwPmPaZ8+XoL2Sj+A2YJlr8= -github.com/cosmos/cosmos-sdk v0.47.2/go.mod h1:zYzgI8w8hhotXTSoGbbSOAKfpJTx4wOy4XgbaKhtRtc= -github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a h1:2humuGPw3O5riJVFq/E2FRjF57UrO97W1qJcGVmK+6k= -github.com/cosmos/cosmos-sdk/db v1.0.0-beta.1.0.20220726092710-f848e4300a8a/go.mod h1:c8IO23vgNxueCCJlSI9awQtcxsvc+buzaeThB85qfBU= -github.com/cosmos/gogoproto v1.4.1/go.mod h1:Ac9lzL4vFpBMcptJROQ6dQ4M3pOEK5Z/l0Q9p+LoCr4= -github.com/cosmos/gogoproto v1.4.8/go.mod h1:hnb0DIEWTv+wdNzNcqus5xCQXq5+CXauq1FJuurRfVY= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= -github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= -github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= -github.com/cpuguy83/go-md2man v1.0.10 h1:BSKMNlYxDvnunlTymqtgONjNnaRV1sTpcovwwjF22jk= -github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w= -github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= -github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cristalhq/acmd v0.8.1/go.mod h1:LG5oa43pE/BbxtfMoImHCQN++0Su7dzipdgBjMCBVDQ= -github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= -github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= -github.com/cyphar/filepath-securejoin v0.2.3 h1:YX6ebbZCZP7VkM3scTTokDgBL2TY741X51MTk3ycuNI= -github.com/daixiang0/gci v0.8.1 h1:T4xpSC+hmsi4CSyuYfIJdMZAr9o7xZmHpQVygMghGZ4= -github.com/daixiang0/gci v0.8.1/go.mod h1:EpVfrztufwVgQRXjnX4zuNinEpLj5OmMjtu/+MB0V0c= -github.com/davidlazar/go-crypto v0.0.0-20200604182044-b73af7476f6c h1:pFUpOrbxDR6AkioZ1ySsx5yxlDQZ8stG2b88gTPxgJU= -github.com/decred/dcrd/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= -github.com/deepmap/oapi-codegen v1.8.2 h1:SegyeYGcdi0jLLrpbCMoJxnUUn8GBXHsvr4rbzjuhfU= -github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= -github.com/denis-tingaikin/go-header v0.4.3/go.mod h1:0wOCWuN71D5qIgE2nz9KrKmuYBAC2Mra5RassOIQ2/c= -github.com/dgraph-io/badger v1.6.2 h1:mNw0qs90GVgGGWylh0umH5iag1j6n/PeJtNvL6KY/x8= -github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM= -github.com/dlclark/regexp2 v1.4.1-0.20201116162257-a2a8dda75c91 h1:Izz0+t1Z5nI16/II7vuEo/nHjodOg0p7+OiDpjX5t1E= -github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/docker v20.10.24+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= -github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= -github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= -github.com/dop251/goja v0.0.0-20220405120441-9037c2b61cbf h1:Yt+4K30SdjOkRoRRm3vYNQgR+/ZIy0RmeUDZo7Y8zeQ= -github.com/eapache/go-resiliency v1.1.0 h1:1NtRmCAqadE2FN4ZcN6g90TP3uk8cg9rn9eNK2197aU= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 h1:YEetp8/yCZMuEPMUDHG0CW/brkkEp8mzqk2+ODEitlw= -github.com/eapache/queue v1.1.0 h1:YOEu7KNc61ntiQlcEeUIoDTJ2o8mQznoNvUhiigpIqc= -github.com/edsrzf/mmap-go v1.0.0 h1:CEBF7HpRnUCSJgGUb5h1Gm7e3VkmVDrR8lvWVLtrOFw= -github.com/elastic/gosigar v0.14.2 h1:Dg80n8cr90OZ7x+bAax/QjoW/XqTI11RmA79ZwIm9/4= -github.com/emicklei/go-restful v2.9.5+incompatible h1:spTtZBk5DYEvbxMVutUuTyh1Ao2r4iyvLdACqsl/Ljk= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= -github.com/envoyproxy/go-control-plane v0.11.0 h1:jtLewhRR2vMRNnq2ZZUoCjUlgut+Y0+sDDWPOfwOi1o= -github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= -github.com/envoyproxy/protoc-gen-validate v0.10.0 h1:oIfnZFdC0YhpNNEX+SuIqko4cqqVZeN9IGTrhZje83Y= -github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/esimonov/ifshort v1.0.4 h1:6SID4yGWfRae/M7hkVDVVyppy8q/v9OuxNdmjLQStBA= -github.com/esimonov/ifshort v1.0.4/go.mod h1:Pe8zjlRrJ80+q2CxHLfEOfTwxCZ4O+MuhcHcfgNWTk0= -github.com/ettle/strcase v0.1.1 h1:htFueZyVeE1XNnMEfbqp5r67qAN/4r6ya1ysq8Q+Zcw= -github.com/ettle/strcase v0.1.1/go.mod h1:hzDLsPC7/lwKyBOywSHEP89nt2pDgdy+No1NBA9o9VY= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c h1:8ISkoahWXwZR41ois5lSJBSVw4D0OV19Ht/JSTzvSv0= -github.com/facebookgo/ensure v0.0.0-20200202191622-63f1cf65ac4c/go.mod h1:Yg+htXGokKKdzcwhuNDwVvN+uBxDGXJ7G/VN1d8fa64= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052 h1:JWuenKqqX8nojtoVVWjGfOF9635RETekkoH6Cc9SX0A= -github.com/facebookgo/stack v0.0.0-20160209184415-751773369052/go.mod h1:UbMTZqLaRiH3MsBH8va0n7s1pQYcu3uTb8G4tygF4Zg= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4 h1:7HZCaLC5+BZpmbhCOZJ293Lz68O7PYrF2EzeiFMwCLk= -github.com/facebookgo/subset v0.0.0-20200203212716-c811ad88dec4/go.mod h1:5tD+neXqOorC30/tWg0LCSkrqj/AR6gu8yY8/fpw1q0= -github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= -github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w= -github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= -github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4= -github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= -github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= -github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= -github.com/fjl/gencodec v0.0.0-20220412091415-8bb9e558978c h1:CndMRAH4JIwxbW8KYq6Q+cGWcGHz0FjGR3QqcInWcW0= -github.com/fjl/memsize v0.0.0-20190710130421-bcb5799ab5e5 h1:FtmdgXiUlNeRsoNMFlKLDt+S+6hbjVMEW6RGQ7aUf7c= -github.com/flynn/noise v1.0.0 h1:DlTHqmzmvcEiKj+4RYo/imoswx/4r6iBlCMfVtrMXpQ= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= -github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db h1:gb2Z18BhTPJPpLQWj4T+rfKHYCHxRHCtRxhKKjRidVw= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8 h1:a9ENSRDFBUPkJ5lCgVZh26+ZbGyoVJG7yb5SSzF5H54= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= -github.com/fzipp/gocyclo v0.6.0/go.mod h1:rXPyn8fnlpa0R2csP/31uerbiVBugk5whMdlyaLkLoA= -github.com/garslo/gogen v0.0.0-20170306192744-1d203ffc1f61 h1:IZqZOB2fydHte3kUgxrzK5E1fW7RQGeDwE8F/ZZnUYc= -github.com/gballet/go-libpcsclite v0.0.0-20190607065134-2772fd86a8ff h1:tY80oXqGNY4FhTFhk+o9oFHGINQ/+vhlm8HFzi6znCI= -github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= -github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= -github.com/getsentry/sentry-go v0.17.0 h1:UustVWnOoDFHBS7IJUB2QK/nB5pap748ZEp0swnQJak= -github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= -github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/go-chi/chi/v5 v5.0.7 h1:rDTPXLDHGATaeHvVlLcR4Qe0zftYethFucbjVQ1PxU8= -github.com/go-chi/chi/v5 v5.0.7/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= -github.com/go-critic/go-critic v0.6.5 h1:fDaR/5GWURljXwF8Eh31T2GZNz9X4jeboS912mWF8Uo= -github.com/go-critic/go-critic v0.6.5/go.mod h1:ezfP/Lh7MA6dBNn4c6ab5ALv3sKnZVLx37tr00uuaOY= -github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= -github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.4.0 h1:Vaw7LaSTRJOUric7pe4vnzBSgyuf2KrLsu2Y4ZpQBDE= -github.com/go-git/go-billy/v5 v5.4.0/go.mod h1:vjbugF6Fz7JIflbVpl1hJsGjSHNltrSw45YK/ukIvQg= -github.com/go-git/go-git-fixtures/v4 v4.3.1/go.mod h1:8LHG1a3SRW71ettAD/jW13h8c6AqjVSeL11RAdgaqpo= -github.com/go-git/go-git/v5 v5.5.2 h1:v8lgZa5k9ylUw+OR/roJHTxR4QItsNFI5nKtAXFuynw= -github.com/go-git/go-git/v5 v5.5.2/go.mod h1:BE5hUJ5yaV2YMxhmaP4l6RBQ08kMxKSPD4BlxtH7OjI= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1 h1:QbL/5oDUmRBzO9/Z7Seo6zf912W/a6Sr4Eu0G/3Jho0= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4 h1:WtGNWLvXpe6ZudgnXrq0barxBImvnnJoMEhXAzcbM0I= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= -github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= -github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= -github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= -github.com/go-sourcemap/sourcemap v2.1.3+incompatible h1:W1iEw64niKVGogNgBN3ePyLFfuisuzeidWPMPWmECqU= -github.com/go-sql-driver/mysql v1.4.0 h1:7LxgVwFb2hIQtMm87NdgAVfXjnt4OePseqT1tKx+opk= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0 h1:p104kn46Q8WdvHunIJ9dAyjPVtrBPhSr3KT2yUst43I= -github.com/go-toolsmith/astcast v1.0.0 h1:JojxlmI6STnFVG9yOImLeGREv8W2ocNUM+iOhR6jE7g= -github.com/go-toolsmith/astcast v1.0.0/go.mod h1:mt2OdQTeAQcY4DQgPSArJjHCcOwlX+Wl/kwN+LbLGQ4= -github.com/go-toolsmith/astcopy v1.0.2 h1:YnWf5Rnh1hUudj11kei53kI57quN/VH6Hp1n+erozn0= -github.com/go-toolsmith/astcopy v1.0.2/go.mod h1:4TcEdbElGc9twQEYpVo/aieIXfHhiuLh4aLAck6dO7Y= -github.com/go-toolsmith/astequal v1.0.0/go.mod h1:H+xSiq0+LtiDC11+h1G32h7Of5O3CYFJ99GVbS5lDKY= -github.com/go-toolsmith/astequal v1.0.2/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astequal v1.0.3 h1:+LVdyRatFS+XO78SGV4I3TCEA0AC7fKEGma+fH+674o= -github.com/go-toolsmith/astequal v1.0.3/go.mod h1:9Ai4UglvtR+4up+bAD4+hCj7iTo4m/OXVTSLnCyTAx4= -github.com/go-toolsmith/astfmt v1.0.0 h1:A0vDDXt+vsvLEdbMFJAUBI/uTbRw1ffOPnxsILnFL6k= -github.com/go-toolsmith/astfmt v1.0.0/go.mod h1:cnWmsOAuq4jJY6Ct5YWlVLmcmLMn1JUPuQIHCY7CJDw= -github.com/go-toolsmith/astp v1.0.0 h1:alXE75TXgcmupDsMK1fRAy0YUzLzqPVvBKoyWV+KPXg= -github.com/go-toolsmith/astp v1.0.0/go.mod h1:RSyrtpVlfTFGDYRbrjyWP1pYu//tSFcvdYrA8meBmLI= -github.com/go-toolsmith/pkgload v1.0.2-0.20220101231613-e814995d17c5/go.mod h1:3NAwwmD4uY/yggRxoEjk/S00MIV3A+H7rrE3i87eYxM= -github.com/go-toolsmith/strparse v1.0.0 h1:Vcw78DnpCAKlM20kSbAyO4mPfJn/lyYA4BJUDxe2Jb4= -github.com/go-toolsmith/strparse v1.0.0/go.mod h1:YI2nUKP9YGZnL/L1/DLFBfixrcjslWct4wyljWhSRy8= -github.com/go-toolsmith/typep v1.0.2 h1:8xdsa1+FSIH/RhEkgnD1j2CJOy5mNllW1Q9tRiYwvlk= -github.com/go-toolsmith/typep v1.0.2/go.mod h1:JSQCQMUPdRlMZFswiq3TGpNp1GMktqkR2Ns5AIQkATU= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b h1:khEcpUM4yFcxg4/FHQWkvVRmgijNXRfzkIDHh23ggEo= -github.com/go-xmlfmt/xmlfmt v0.0.0-20191208150333-d5b6f63a941b/go.mod h1:aUCEOzzezBEjDBbFBoSiya/gduyIiWYRP6CnSFIV8AM= -github.com/go-zookeeper/zk v1.0.2 h1:4mx0EYENAdX/B/rbunjlt5+4RTA/a9SMHBRuSKdGxPM= -github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= -github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= -github.com/godbus/dbus/v5 v5.1.0 h1:4KLkAxT3aOY8Li4FRJe/KvhoNFFxo0m6fNuFUO8QJUk= -github.com/godbus/dbus/v5 v5.1.0/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/gofrs/uuid v4.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= -github.com/golang-jwt/jwt/v4 v4.3.0 h1:kHL1vqdqWNfATmA0FNMdmZNMyZI1U6O31X4rlIPoBog= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= -github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2 h1:23T5iq8rbUYlhpt5DB4XJkc6BU31uODLD1o1gKvZmD0= -github.com/golangci/check v0.0.0-20180506172741-cfe4005ccda2/go.mod h1:k9Qvh+8juN+UKMCS/3jFtGICgW8O96FVaZsaxdzDkR4= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a h1:w8hkcTqaFpzKqonE9uMCefW1WDie15eSP/4MssdenaM= -github.com/golangci/dupl v0.0.0-20180902072040-3e9179ac440a/go.mod h1:ryS0uhF+x9jgbj/N71xsEqODy9BN81/GonCZiOzirOk= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe h1:6RGUuS7EGotKx6J5HIP8ZtyMdiDscjMLfRBSPuzVVeo= -github.com/golangci/go-misc v0.0.0-20220329215616-d24fe342adfe/go.mod h1:gjqyPShc/m8pEMpk0a3SeagVb0kaqvhscv+i9jI5ZhQ= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2 h1:amWTbTGqOZ71ruzrdA+Nx5WA3tV1N0goTspwmKCQvBY= -github.com/golangci/gofmt v0.0.0-20220901101216-f2edd75033f2/go.mod h1:9wOXstvyDRshQ9LggQuzBCGysxs3b6Uo/1MvYCR2NMs= -github.com/golangci/golangci-lint v1.50.1 h1:C829clMcZXEORakZlwpk7M4iDw2XiwxxKaG504SZ9zY= -github.com/golangci/golangci-lint v1.50.1/go.mod h1:AQjHBopYS//oB8xs0y0M/dtxdKHkdhl0RvmjUct0/4w= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0 h1:MfyDlzVjl1hoaPzPD4Gpb/QgoRfSBR0jdhwGyAWwMSA= -github.com/golangci/lint-1 v0.0.0-20191013205115-297bf364a8e0/go.mod h1:66R6K6P6VWk9I95jvqGxkqJxVWGFy9XlDwLwVz1RCFg= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca h1:kNY3/svz5T29MYHubXix4aDDuE3RWHkPvopM/EDv/MA= -github.com/golangci/maligned v0.0.0-20180506175553-b1d89398deca/go.mod h1:tvlJhZqDe4LMs4ZHD0oMUlt9G2LWuDGoisJTBzLMV9o= -github.com/golangci/misspell v0.3.5 h1:pLzmVdl3VxTOncgzHcvLOKirdvcx/TydsClUQXTehjo= -github.com/golangci/misspell v0.3.5/go.mod h1:dEbvlSfYbMQDtrpRMQU675gSDLDNa8sCPPChZ7PhiVA= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6 h1:DIPQnGy2Gv2FSA4B/hh8Q7xx3B7AIDk3DAMeHclH1vQ= -github.com/golangci/revgrep v0.0.0-20220804021717-745bb2f7c2e6/go.mod h1:0AKcRCkMoKvUvlf89F6O7H2LYdhr1zBh736mBItOdRs= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 h1:zwtduBRr5SSWhqsYNgcuWO2kFlpdOZbP0+yRjmvPGys= -github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4/go.mod h1:Izgrg8RkN3rCIMLGE9CyYmU9pY2Jer6DgANEnZ/L/cQ= -github.com/google/flatbuffers v2.0.8+incompatible h1:ivUb1cGomAB101ZM1T0nOiWz9pSrTMoa9+EiY7igmkM= -github.com/google/go-github/v41 v41.0.0 h1:HseJrM2JFf2vfiZJ8anY2hqBjdfY1Vlj/K27ueww4gg= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gopacket v1.1.19 h1:ves8RnFZPGiFnTS0uPQStjwru6uO6h+nlr9j6fL7kF8= -github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/go-type-adapters v1.0.0 h1:9XdMn+d/G57qq1s8dNc5IesGCXHf6V2HZ2JwRxfA2tA= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8 h1:tlyzajkF3030q6M8SvmJSemC9DTHL/xaMa18b65+JM4= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8 h1:PVRE9d4AQKmbelZ7emNig1+NT27DUmKZn5qXxfio54U= -github.com/gordonklaus/ineffassign v0.0.0-20210914165742-4cc7213b9bc8/go.mod h1:Qcp2HIAYhR7mNUVSIxZww3Guk4it82ghYcEXIAk+QT0= -github.com/gorilla/context v1.1.1 h1:AWwleXJkX/nhcU9bZSnZoi3h/qGYqQAGhq6zZe/aQW8= -github.com/gostaticanalysis/analysisutil v0.0.0-20190318220348-4088753ea4d3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.0.3/go.mod h1:eEOZF4jCKGi+aprrirO9e7WKB3beBRtWgqGunKl6pKE= -github.com/gostaticanalysis/analysisutil v0.1.0/go.mod h1:dMhHRU9KTiDcuLGdy87/2gTR8WruwYZrKdRq9m1O6uw= -github.com/gostaticanalysis/analysisutil v0.7.1 h1:ZMCjoue3DtDWQ5WyU16YbjbQEQ3VuzwxALrpYd+HeKk= -github.com/gostaticanalysis/analysisutil v0.7.1/go.mod h1:v21E3hY37WKMGSnbsw2S/ojApNWb6C1//mXO48CXbVc= -github.com/gostaticanalysis/comment v1.3.0/go.mod h1:xMicKDx7XRXYdVwY9f9wQpDJVnqWxw9wCauCMKp+IBI= -github.com/gostaticanalysis/comment v1.4.1/go.mod h1:ih6ZxzTHLdadaiSnF5WY3dxUoXfXAlTaRzuaNDlSado= -github.com/gostaticanalysis/comment v1.4.2 h1:hlnx5+S2fY9Zo9ePo4AhgYsYHbM2+eAv8m/s1JiCd6Q= -github.com/gostaticanalysis/comment v1.4.2/go.mod h1:KLUTGDv6HOCotCH8h2erHKmpci2ZoR8VPu34YA2uzdM= -github.com/gostaticanalysis/forcetypeassert v0.1.0 h1:6eUflI3DiGusXGK6X7cCcIgVCpZ2CiZ1Q7jl6ZxNV70= -github.com/gostaticanalysis/forcetypeassert v0.1.0/go.mod h1:qZEedyP/sY1lTGV1uJ3VhWZ2mqag3IkWsDHVbplHXak= -github.com/gostaticanalysis/nilerr v0.1.1 h1:ThE+hJP0fEp4zWLkWHWcRyI2Od0p7DlgYG3Uqrmrcpk= -github.com/gostaticanalysis/nilerr v0.1.1/go.mod h1:wZYb6YI5YAxxq0i1+VJbY0s2YONW0HU0GPE3+5PWN4A= -github.com/gostaticanalysis/testutil v0.3.1-0.20210208050101-bfb5c8eec0e4/go.mod h1:D+FIZ+7OahH3ePw/izIEeH5I06eKs1IKI4Xr64/Am3M= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible h1:AQwinXlbQR2HvPjQZOmDhRqsv5mZf+Jb1RnSLxcqZcI= -github.com/gotestyourself/gotestyourself v2.2.0+incompatible/go.mod h1:zZKM6oeNM8k+FRljX1mnzVYeS8wiGgQyvST1/GafPbY= -github.com/graph-gophers/graphql-go v1.3.0 h1:Eb9x/q6MFpCLz7jBCiP/WTxjSDrYLR1QY41SORZyNJ0= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 h1:Ovs26xHkKqVztRpIrF/92BcuyuQ/YW4NSIpoGtfXNho= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3 h1:lLT7ZLSzGLI08vc9cpd+tYmNWjdKDqyr/2L+f6U12Fk= -github.com/hashicorp/consul/api v1.20.0 h1:9IHTjNVSZ7MIwjlW3N3a7iGiykCMDpxZu8jsxFJh0yc= -github.com/hashicorp/consul/api v1.20.0/go.mod h1:nR64eD44KQ59Of/ECwt2vUmIK2DKsDzAwTmwmLl8Wpo= -github.com/hashicorp/consul/sdk v0.3.0 h1:UOxjlb4xVNF93jak1mzzoBatyFju9nrkxpVwIp/QqxQ= -github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= -github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-bexpr v0.1.10 h1:9kuI5PFotCboP3dkDYFr/wi0gg0QVbSNz5oFRpxn4uE= -github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= -github.com/hashicorp/go-hclog v1.2.0 h1:La19f8d7WIlm4ogzNHB0JGqs5AUDAZ2UfCY4sJXcJdM= -github.com/hashicorp/go-hclog v1.2.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ= -github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4= -github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= -github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= -github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= -github.com/hashicorp/go-retryablehttp v0.5.3 h1:QlWt0KvWT0lq8MFppF9tsJGF+ynG7ztc2KIPhzRGk7s= -github.com/hashicorp/go-retryablehttp v0.7.0/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY= -github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc= -github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8= -github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs= -github.com/hashicorp/go-syslog v1.0.0 h1:KaodqZuhUoZereWVIYmpUgZysurB1kBLX2j0MwMrUAE= -github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.1/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1 h1:sNCoNyDEvN1xa+X0baata4RdcpKwcMS6DH+xwfqPgjw= -github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= -github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= -github.com/hashicorp/mdns v1.0.0 h1:WhIgCr5a7AaVH6jPUwjtRuuE7/RDufnUvzIr48smyxs= -github.com/hashicorp/mdns v1.0.4/go.mod h1:mtBihi+LeNXGtG8L9dX59gAEa12BDtBQSp4v/YAJqrc= -github.com/hashicorp/memberlist v0.1.3 h1:EmmoJme1matNzb+hMpDuR/0sbJSUisxyqBGG676r31M= -github.com/hashicorp/memberlist v0.5.0/go.mod h1:yvyXLpo0QaGE59Y7hDTsTzDD25JYBZ4mHgHUZ8lrOI0= -github.com/hashicorp/serf v0.10.1 h1:Z1H2J60yRKvfDYAOZLd2MU0ND4AH/WDz7xYHDWQsIPY= -github.com/hashicorp/serf v0.10.1/go.mod h1:yL2t6BqATOLGc5HF7qbFkTfXoPIY0WZdWHfEvMqbG+4= -github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM= -github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= -github.com/hudl/fargo v1.4.0 h1:ZDDILMbB37UlAVLlWcJ2Iz1XuahZZTDZfdCKeclfq2s= -github.com/huin/goupnp v1.0.3 h1:N8No57ls+MnjlB+JPiCVSOyy/ot7MJTqlo7rn+NYSqQ= -github.com/iancoleman/strcase v0.2.0 h1:05I4QRnGpI0m37iZQRuskXh+w77mr6Z41lwQzuHLwW0= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639 h1:mV02weKRL81bEnm8A0HT1/CAelMQDBuQIfLw8n+d6xI= -github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= -github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= -github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/influxdata/influxdb v1.8.3 h1:WEypI1BQFTT4teLM+1qkEcvUi0dAvopAI/ir0vAiBg8= -github.com/influxdata/influxdb-client-go/v2 v2.4.0 h1:HGBfZYStlx3Kqvsv1h2pJixbCl/jhnFtxpKFAv9Tu5k= -github.com/influxdata/influxdb1-client v0.0.0-20200827194710-b269163b24ab h1:HqW4xhhynfjrtEiiSGcQUd6vrK23iMam1FO8rI7mwig= -github.com/influxdata/line-protocol v0.0.0-20210311194329-9aa0e372d097 h1:vilfsDSy7TDxedi9gyBkMvAirat/oRcL0lFdJBf6tdM= -github.com/informalsystems/tm-load-test v1.3.0 h1:FGjKy7vBw6mXNakt+wmNWKggQZRsKkEYpaFk/zR64VA= -github.com/informalsystems/tm-load-test v1.3.0/go.mod h1:OQ5AQ9TbT5hKWBNIwsMjn6Bf4O0U4b1kRc+0qZlQJKw= -github.com/intel/goresctrl v0.2.0 h1:JyZjdMQu9Kl/wLXe9xA6s1X+tF6BWsQPFGJMEeCfWzE= -github.com/ipfs/go-datastore v0.5.1 h1:WkRhLuISI+XPD0uk3OskB0fYFSyqK8Ob5ZYew9Qa1nQ= -github.com/ipfs/go-ds-badger v0.3.0 h1:xREL3V0EH9S219kFFueOYJJTcjgNSZ2HY1iSvN7U1Ro= -github.com/ipfs/go-ds-leveldb v0.5.0 h1:s++MEBbD3ZKc9/8/njrn4flZLnCuY9I79v94gBUNumo= -github.com/ipfs/go-log/v2 v2.5.1 h1:1XdUzF7048prq4aBjDQQ4SL5RxftpRGdXhNRwKSAlcY= -github.com/jackpal/go-nat-pmp v1.0.2 h1:KzKSgb7qkJvOUTqYl9/Hg/me3pWgBmERKrTGD7BdWus= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jbenet/go-temp-err-catcher v0.1.0 h1:zpb3ZH6wIE8Shj2sKS+khgRvf7T7RABoLk/+KKHggpk= -github.com/jbenet/goprocess v0.1.4 h1:DRGOFReOMqqDNXwW70QkacFW0YN9QnwLV0Vqk+3oU0o= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a h1:d4+I1YEKVmWZrgkt6jpXBnLgV2ZjO0YxEtLDdfIZfH4= -github.com/jdxcode/netrc v0.0.0-20210204082910-926c7f70242a/go.mod h1:Zi/ZFkEqFHTm7qkjyNJjaWH4LQA9LQhGJyF0lTYGpxw= -github.com/jedisct1/go-minisign v0.0.0-20190909160543-45766022959e h1:UvSe12bq+Uj2hWd8aOlwPmoZ+CITRFrdit+sDGfAg8U= -github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= -github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= -github.com/jgautheron/goconst v1.5.1 h1:HxVbL1MhydKs8R8n/HE5NPvzfaYmQJA3o879lE4+WcM= -github.com/jgautheron/goconst v1.5.1/go.mod h1:aAosetZ5zaeC/2EfMeRswtxUFBpe2Hr7HzkgX4fanO4= -github.com/jhump/gopoet v0.0.0-20190322174617-17282ff210b3/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/gopoet v0.1.0/go.mod h1:me9yfT6IJSlOL3FCfrg+L6yzUEZ+5jW6WHt4Sk+UPUI= -github.com/jhump/goprotoc v0.5.0/go.mod h1:VrbvcYrQOrTi3i0Vf+m+oqQWk9l72mjkJCYo7UvLHRQ= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f h1:BNuUg9k2EiJmlMwjoef3e8vZLHplbVw6DrjGFjLL+Yo= -github.com/jhump/protocompile v0.0.0-20220216033700-d705409f108f/go.mod h1:qr2b5kx4HbFS7/g4uYO5qv9ei8303JMsC7ESbYiqr2Q= -github.com/jhump/protoreflect v1.11.0/go.mod h1:U7aMIjN0NWq9swDP7xDdoMfRHb35uiuTd3Z9nFXJf5E= -github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b/go.mod h1:JytZfP5d0r8pVNLZvai7U/MCuTWITgrI4tTg7puQFKI= -github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= -github.com/jingyugao/rowserrcheck v1.1.1 h1:zibz55j/MJtLsjP1OF4bSdgXxwL1b+Vn7Tjzq7gFzUs= -github.com/jingyugao/rowserrcheck v1.1.1/go.mod h1:4yvlZSDb3IyDTUZJUmpZfm2Hwok+Dtp+nu2qOq+er9c= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af h1:KA9BjwUk7KlCh6S9EAGWBt1oExIUv9WyNCiRz5amv48= -github.com/jirfag/go-printf-func-name v0.0.0-20200119135958-7558a9eaa5af/go.mod h1:HEWGJkRDzjJY2sqdDwxccsGicWEf9BQOZsq2tV+xzM0= -github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks= -github.com/jonboulle/clockwork v0.1.0 h1:VKV+ZcuP6l3yW9doeqz6ziZGgcynBVQO+obU0+0hcPo= -github.com/jpillora/backoff v1.0.0 h1:uvFg412JmmHBHw7iwprIxkPMI+sGQ4kzOWsMeHnm2EA= -github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o= -github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= -github.com/julienschmidt/httprouter v1.3.0 h1:U0609e9tgbseu3rBINet9P48AI/D3oJs4dN7jwJOQ1U= -github.com/julz/importas v0.1.0 h1:F78HnrsjY3cR7j0etXy5+TU1Zuy7Xt08X/1aJnH5xXY= -github.com/julz/importas v0.1.0/go.mod h1:oSFU2R4XK/P7kNBrnL/FEQlDGN1/6WoxXEjSSXO0DV0= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/karalabe/usb v0.0.2 h1:M6QQBNxF+CQ8OFvxrT90BA0qBOXymndZnk5q235mFc4= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.6.2 h1:uGQ9xI8/pgc9iOoCe7kWQgRE6SBTrCGmTSf0LrEtY7c= -github.com/kisielk/errcheck v1.6.2/go.mod h1:nXw/i/MfnvRHqXa7XXmQMUB0oNFGuBrNI8d8NLy0LPw= -github.com/kisielk/gotool v1.0.0 h1:AV2c/EiW3KqPNT9ZKl07ehoAGi4C5/01Cfbblndcapg= -github.com/kkHAIKE/contextcheck v1.1.3 h1:l4pNvrb8JSwRd51ojtcOxOeHJzHek+MtOyXbaR0uvmw= -github.com/kkHAIKE/contextcheck v1.1.3/go.mod h1:PG/cwd6c0705/LM0KTr1acO2gORUxkSVWyLJOFW5qoo= -github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= -github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4= -github.com/klauspost/pgzip v1.2.5 h1:qnWYvvKqedOF2ulHpMG72XQol4ILEJ8k2wwRl/Km8oE= -github.com/klauspost/pgzip v1.2.5/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= -github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8= -github.com/koron/go-ssdp v0.0.3 h1:JivLMY45N76b4p/vsWGOKewBQu6uf39y8l+AQ7sDKx8= -github.com/kr/fs v0.1.0 h1:Jskdu9ieNAYnjxsi0LbQp1ulIKZV1LAFgK1tWhpZgl8= -github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515 h1:T+h1c/A9Gawja4Y9mFVWj2vyii2bbUNDw3kt9VxK2EY= -github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= -github.com/kr/pty v1.1.1 h1:VkoXIwSboBpnk99O/KFauAEILuNHv5DVFKZMBN/gUgw= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kulti/thelper v0.6.3 h1:ElhKf+AlItIu+xGnI990no4cE2+XaSu1ULymV2Yulxs= -github.com/kulti/thelper v0.6.3/go.mod h1:DsqKShOvP40epevkFrvIwkCMNYxMeTNjdWL4dqWHZ6I= -github.com/kunwardeep/paralleltest v1.0.6 h1:FCKYMF1OF2+RveWlABsdnmsvJrei5aoyZoaGS+Ugg8g= -github.com/kunwardeep/paralleltest v1.0.6/go.mod h1:Y0Y0XISdZM5IKm3TREQMZ6iteqn1YuwCsJO/0kL9Zes= -github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= -github.com/kyoh86/exportloopref v0.1.8 h1:5Ry/at+eFdkX9Vsdw3qU4YkvGtzuVfzT4X7S77LoN/M= -github.com/kyoh86/exportloopref v0.1.8/go.mod h1:1tUcJeiioIs7VWe5gcOObrux3lb66+sBqGZrRkMwPgg= -github.com/ldez/gomoddirectives v0.2.3 h1:y7MBaisZVDYmKvt9/l1mjNCiSA1BVn34U0ObUcJwlhA= -github.com/ldez/gomoddirectives v0.2.3/go.mod h1:cpgBogWITnCfRq2qGoDkKMEVSaarhdBr6g8G04uz6d0= -github.com/ldez/tagliatelle v0.3.1 h1:3BqVVlReVUZwafJUwQ+oxbx2BEX2vUG4Yu/NOfMiKiM= -github.com/ldez/tagliatelle v0.3.1/go.mod h1:8s6WJQwEYHbKZDsp/LjArytKOG8qaMrKQQ3mFukHs88= -github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= -github.com/leonklingele/grouper v1.1.0 h1:tC2y/ygPbMFSBOs3DcyaEMKnnwH7eYKzohOtRrf0SAg= -github.com/leonklingele/grouper v1.1.0/go.mod h1:uk3I3uDfi9B6PeUjsCKi6ndcf63Uy7snXgR4yDYQVDY= -github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/libp2p/go-cidranger v1.1.0 h1:ewPN8EZ0dd1LSnrtuwd4709PXVcITVeuwbag38yPW7c= -github.com/libp2p/go-flow-metrics v0.1.0 h1:0iPhMI8PskQwzh57jB9WxIuIOQ0r+15PChFGkx3Q3WM= -github.com/libp2p/go-libp2p-asn-util v0.2.0 h1:rg3+Os8jbnO5DxkC7K/Utdi+DkY3q/d1/1q+8WeNAsw= -github.com/libp2p/go-libp2p-testing v0.11.0 h1:+R7FRl/U3Y00neyBSM2qgDzqz3HkWH24U9nMlascHL4= -github.com/libp2p/go-mplex v0.7.0 h1:BDhFZdlk5tbr0oyFq/xv/NPGfjbnrsDam1EvutpBDbY= -github.com/libp2p/go-msgio v0.2.0 h1:W6shmB+FeynDrUVl2dgFQvzfBZcXiyqY4VmpQLu9FqU= -github.com/libp2p/go-nat v0.1.0 h1:MfVsH6DLcpa04Xr+p8hmVRG4juse0s3J8HyNWYHffXg= -github.com/libp2p/go-netroute v0.2.0 h1:0FpsbsvuSnAhXFnCY0VLFbJOzaK0VnP0r1QT/o4nWRE= -github.com/libp2p/go-reuseport v0.2.0 h1:18PRvIMlpY6ZK85nIAicSBuXXvrYoSw3dsBAR7zc560= -github.com/libp2p/go-yamux/v3 v3.1.2 h1:lNEy28MBk1HavUAlzKgShp+F6mn/ea1nDYWftZhFW9Q= -github.com/libp2p/zeroconf/v2 v2.2.0 h1:Cup06Jv6u81HLhIj1KasuNM/RHHrJ8T7wOTS4+Tv53Q= -github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743 h1:143Bb8f8DuGWck/xpNUOckBVYfFbBTnLevfRZ1aVVqo= -github.com/lightstep/lightstep-tracer-go v0.18.1 h1:vi1F1IQ8N7hNWytK9DpJsUfQhGuNSc19z330K6vl4zk= -github.com/lucas-clemente/quic-go v0.28.1 h1:Uo0lvVxWg5la9gflIF9lwa39ONq85Xq2D91YNEIslzU= -github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= -github.com/lufeee/execinquery v1.2.1 h1:hf0Ems4SHcUGBxpGN7Jz78z1ppVkP/837ZlETPCEtOM= -github.com/lufeee/execinquery v1.2.1/go.mod h1:EC7DrEKView09ocscGHC+apXMIaorh4xqSxS/dy8SbM= -github.com/lyft/protoc-gen-star/v2 v2.0.1 h1:keaAo8hRuAT0O3DfJ/wM3rufbAjGeJ1lAtWZHDjKGB0= -github.com/lyft/protoc-gen-validate v0.0.13 h1:KNt/RhmQTOLr7Aj8PsJ7mTronaFyx80mRTT9qF261dA= -github.com/magiconair/properties v1.8.6/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60= -github.com/maratori/testableexamples v1.0.0 h1:dU5alXRrD8WKSjOUnmJZuzdxWOEQ57+7s93SLMxb2vI= -github.com/maratori/testableexamples v1.0.0/go.mod h1:4rhjL1n20TUTT4vdh3RDqSizKLyXp7K2u6HgraZCGzE= -github.com/maratori/testpackage v1.1.0 h1:GJY4wlzQhuBusMF1oahQCBtUV/AQ/k69IZ68vxaac2Q= -github.com/maratori/testpackage v1.1.0/go.mod h1:PeAhzU8qkCwdGEMTEupsHJNlQu2gZopMC6RjbhmHeDc= -github.com/marten-seemann/qtls-go1-16 v0.1.5 h1:o9JrYPPco/Nukd/HpOHMHZoBDXQqoNtUCmny98/1uqQ= -github.com/marten-seemann/qtls-go1-17 v0.1.2 h1:JADBlm0LYiVbuSySCHeY863dNkcpMmDR7s0bLKJeYlQ= -github.com/marten-seemann/qtls-go1-18 v0.1.2 h1:JH6jmzbduz0ITVQ7ShevK10Av5+jBEKAHMntXmIV7kM= -github.com/marten-seemann/qtls-go1-19 v0.1.0 h1:rLFKD/9mp/uq1SYGYuVZhm83wkmU95pK5df3GufyYYU= -github.com/marten-seemann/tcp v0.0.0-20210406111302-dfbc87cc63fd h1:br0buuQ854V8u83wA0rVZ8ttrq5CpaPZdvrK0LP2lOk= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951 h1:pWxk9e//NbPwfxat7RXkts09K+dEBJWakUWwICVqYbA= -github.com/matoous/godox v0.0.0-20210227103229-6504466cf951/go.mod h1:1BELzlh859Sh1c6+90blK8lbYy0kwQf1bYlBhBysy1s= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= -github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84= -github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE= -github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= -github.com/mbilski/exhaustivestruct v1.2.0 h1:wCBmUnSYufAHO6J4AVWY6ff+oxWxsVFrwgOdMUQePUo= -github.com/mbilski/exhaustivestruct v1.2.0/go.mod h1:OeTBVxQWoEmB2J2JCHmXWPJ0aksxSUOUy+nvtVEfzXc= -github.com/mgechev/revive v1.2.4 h1:+2Hd/S8oO2H0Ikq2+egtNwQsVhAeELHjxjIUFX5ajLI= -github.com/mgechev/revive v1.2.4/go.mod h1:iAWlQishqCuj4yhV24FTnKSXGpbAA+0SckXB8GQMX/Q= -github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso= -github.com/miekg/dns v1.1.41/go.mod h1:p6aan82bvRIyn+zDIv9xYNUpwa73JcSh9BKwknJysuI= -github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= -github.com/miekg/pkcs11 v1.1.1 h1:Ugu9pdy6vAYku5DEpVWVFPYnzV+bxB+iRdbuFSu7TvU= -github.com/mikioh/tcpinfo v0.0.0-20190314235526-30a79bb1804b h1:z78hV3sbSMAUoyUMM0I83AUIT6Hu17AWfgjzIbtrYFc= -github.com/mikioh/tcpopt v0.0.0-20190314235656-172688c1accc h1:PTfri+PuQmWDqERdnNMiD9ZejrlswWrCpBEZgWOiTrc= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI= -github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible h1:aKW/4cBs+yK6gpqU3K/oIwk9Q/XICqd3zOX/UFuvqmk= -github.com/mitchellh/cli v1.0.0 h1:iGBIsUe3+HZ/AD/Vd7DErOt5sU9fa8Uj7A2s1aggv1Y= -github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI= -github.com/mitchellh/gox v0.4.0 h1:lfGJxY7ToLJQjHHwi0EX6uYBdK78egf954SQl13PQJc= -github.com/mitchellh/iochan v1.0.0 h1:C+X3KsSTLFVBr/tK1eYN/vs4rJcvsiLU338UhYPJWeY= -github.com/mitchellh/pointerstructure v1.2.0 h1:O+i9nHnXS3l/9Wu7r4NrEdwA2VFTicjUEN1uBnDo34A= -github.com/moby/buildkit v0.10.4 h1:FvC+buO8isGpUFZ1abdSLdGHZVqg9sqI4BbFL8tlzP4= -github.com/moby/buildkit v0.10.4/go.mod h1:Yajz9vt1Zw5q9Pp4pdb3TCSUXJBIroIQGQ3TTs/sLug= -github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= -github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= -github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI= -github.com/moby/sys/signal v0.6.0 h1:aDpY94H8VlhTGa9sNYUFCFsMZIUh5wm0B6XkIoJj/iY= -github.com/moby/sys/symlink v0.2.0 h1:tk1rOM+Ljp0nFmfOIBtlV3rTDlWOwFRhjEeAhZB0nZc= -github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= -github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= -github.com/moricho/tparallel v0.2.1 h1:95FytivzT6rYzdJLdtfn6m1bfFJylOJK41+lgv/EHf4= -github.com/moricho/tparallel v0.2.1/go.mod h1:fXEIZxG2vdfl0ZF8b42f5a78EhjjD5mX8qUplsoSU4k= -github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= -github.com/mrunalp/fileutils v0.5.0 h1:NKzVxiH7eSk+OQ4M+ZYW1K6h27RUV3MI6NUTsHhU6Z4= -github.com/multiformats/go-multiaddr-dns v0.3.1 h1:QgQgR+LQVt3NPTjbrLLpsaT2ufAA2y0Mkk+QRVJbW3A= -github.com/multiformats/go-multiaddr-fmt v0.1.0 h1:WLEFClPycPkp4fnIzoFoV9FVd49/eQsuaL3/CWe167E= -github.com/multiformats/go-multistream v0.3.3 h1:d5PZpjwRgVlbwfdTDjife7XszfZd8KYWfROYFlGcR8o= -github.com/mwitkow/grpc-proxy v0.0.0-20181017164139-0f1106ef9c76 h1:0xuRacu/Zr+jX+KyLLPPktbwXqyOvnOPUQmMLzX1jxU= -github.com/nakabonne/nestif v0.3.1 h1:wm28nZjhQY5HyYPx+weN3Q65k6ilSBxDb8v5S81B81U= -github.com/nakabonne/nestif v0.3.1/go.mod h1:9EtoZochLn5iUprVDmDjqGKPofoUEBL8U4Ngq6aY7OE= -github.com/naoina/go-stringutil v0.1.0 h1:rCUeRUHjBjGTSHl0VC00jUPLz8/F9dDzYI70Hzifhks= -github.com/naoina/toml v0.1.2-0.20170918210437-9fafd6967416 h1:shk/vn9oCoOTmwcouEdwIeOtOGA/ELRUw/GwvxwfT+0= -github.com/nats-io/jwt v0.3.2 h1:+RB5hMpXUUA2dfxuhBTEkMOrYmM+gKIZYS1KjSostMI= -github.com/nats-io/jwt/v2 v2.0.3 h1:i/O6cmIsjpcQyWDYNcq2JyZ3/VTF8SJ4JWluI5OhpvI= -github.com/nats-io/nats-server/v2 v2.5.0 h1:wsnVaaXH9VRSg+A2MVg5Q727/CqxnmPLGFQ3YZYKTQg= -github.com/nats-io/nats.go v1.12.1 h1:+0ndxwUPz3CmQ2vjbXdkC1fo3FdiOQDim4gl3Mge8Qo= -github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8= -github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354 h1:4kuARK6Y6FxaNu/BnU2OAaLF86eTVhP2hjTB6iMvItA= -github.com/nbutton23/zxcvbn-go v0.0.0-20210217022336-fa2cb2858354/go.mod h1:KSVJerMDfblTH7p5MZaTt+8zaT2iEk3AkVb9PQdZuE8= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/nishanths/exhaustive v0.8.3 h1:pw5O09vwg8ZaditDp/nQRqVnrMczSJDxRDJMowvhsrM= -github.com/nishanths/exhaustive v0.8.3/go.mod h1:qj+zJJUgJ76tR92+25+03oYUhzF4R7/2Wk7fGTfCHmg= -github.com/nishanths/predeclared v0.2.2 h1:V2EPdZPliZymNAn79T8RkNApBjMmVKh5XRpLm/w98Vk= -github.com/nishanths/predeclared v0.2.2/go.mod h1:RROzoN6TnGQupbC+lqggsOlcgysk3LMK/HI84Mp280c= -github.com/oklog/oklog v0.3.2 h1:wVfs8F+in6nTBMkA7CbRw+zZMIB7nNM825cM1wuzoTk= -github.com/oklog/run v1.0.0 h1:Ru7dDtJNOyC66gQ5dQmaCa0qIsAUFY3sFpK1Xk8igrw= -github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo/v2 v2.1.3 h1:e/3Cwtogj0HA+25nMP1jCMDIf8RtRYbGwGGuBIFztkc= -github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= -github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88= -github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417 h1:3snG66yBm59tKhhSPQrQ/0bCrv1LQbKt40LnUPiUxdc= -github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 h1:lM6RxxfUMrYL/f8bWEUqdXrANWtrL7Nndbm9iFN0DlU= -github.com/opentracing/basictracer-go v1.0.0 h1:YyUAhaEfjoWXclZVJ9sGoNct7j4TVk7lZWlQw5UXuoo= -github.com/opentracing/opentracing-go v1.2.0 h1:uEJPy/1a5RIPAJ0Ov+OIO8OxWu77jEv+1B0VhjKrZUs= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5 h1:ZCnq+JUrvXcDVhX/xRolRBZifmabN1HcS1wrPSvxhrU= -github.com/openzipkin/zipkin-go v0.2.5 h1:UwtQQx2pyPIgWYHRg+epgdx1/HnBQTgN3/oIYEJTQzU= -github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= -github.com/otiai10/copy v1.2.0/go.mod h1:rrF5dJ5F0t/EWSYODDu4j9/vEeYHMkc8jt0zJChqQWw= -github.com/otiai10/curr v0.0.0-20150429015615-9b4961190c95/go.mod h1:9qAhocn7zKJG+0mI8eUu6xqkFDYS2kb2saOteoSB3cE= -github.com/otiai10/curr v1.0.0/go.mod h1:LskTG5wDwr8Rs+nNQ+1LlxRjAtTZZjtJW4rMXl6j4vs= -github.com/otiai10/mint v1.3.0/go.mod h1:F5AjcsTsWUqX+Na9fpHb52P8pcRX2CI6A3ctIT91xUo= -github.com/otiai10/mint v1.3.1/go.mod h1:/yxELlJQ0ufhjUwhshSj+wFjZ78CnZ48/1wtmBH1OTc= -github.com/pact-foundation/pact-go v1.0.4 h1:OYkFijGHoZAYbOIb1LWXrwKQbMMRUv1oQ89blD2Mh2Q= -github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0= -github.com/pborman/uuid v1.2.0 h1:J7Q5mO4ysT1dv8hyrUGHb9+ooztCXu1D8MY8DZYsu3g= -github.com/pelletier/go-toml/v2 v2.0.5/go.mod h1:OMHamSCAODeSsVrwwvcJOaoN0LIUIaFVNZzmWyNfXas= -github.com/pelletier/go-toml/v2 v2.0.7/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= -github.com/performancecopilot/speed v3.0.0+incompatible h1:2WnRzIquHa5QxaJKShDkLM+sc0JPuwhXzK8OYOyt3Vg= -github.com/performancecopilot/speed/v4 v4.0.0 h1:VxEDCmdkfbQYDlcr/GC9YoN9PQ6p8ulk9xVsepYy9ZY= -github.com/peterh/liner v1.1.1-0.20190123174540-a2c9a5303de7 h1:oYW+YCJ1pachXTQmzR3rNLYGGz4g/UgFcjb28p/viDM= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d h1:CdDQnGF8Nq9ocOS/xlSptM1N3BbrA6/kmaep5ggwaIA= -github.com/phayes/checkstyle v0.0.0-20170904204023-bfd46e6a821d/go.mod h1:3OzsM7FXDQlpCiw2j81fOmAwQLnZnLGXVKUzeKQXIAw= -github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I= -github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= -github.com/pjbgf/sha1cd v0.2.3 h1:uKQP/7QOzNtKYH7UTohZLcjF5/55EnTw0jO/Ru4jZwI= -github.com/pjbgf/sha1cd v0.2.3/go.mod h1:HOK9QrgzdHpbc2Kzip0Q1yi3M2MFGPADtR6HjG65m5M= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= -github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -github.com/pkg/profile v1.6.0 h1:hUDfIISABYI59DyeB3OTay/HxSRwTQ8rB/H83k6r5dM= -github.com/pkg/profile v1.6.0/go.mod h1:qBsxPvzyUincmltOk6iyRVxHYg4adc0OFOv72ZdLa18= -github.com/pkg/sftp v1.13.1 h1:I2qBYMChEhIjOgazfJmV3/mZM256btk6wkCDRmW7JYs= -github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3 h1:hUmXhbljNFtrH5hzV9kiRoddZ5nfPTq3K0Sb2hYYiqE= -github.com/pointlander/compress v1.1.1-0.20190518213731-ff44bd196cc3/go.mod h1:q5NXNGzqj5uPnVuhGkZfmgHqNUhf15VLi6L9kW0VEc0= -github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4 h1:RHHRCZeaNyBXdYPMjZNH8/XHDBH38TZzw8izrW7dmBE= -github.com/pointlander/jetset v1.0.1-0.20190518214125-eee7eff80bd4/go.mod h1:RdR1j20Aj5pB6+fw6Y9Ur7lMHpegTEjY1vc19hEZL40= -github.com/pointlander/peg v1.0.1 h1:mgA/GQE8TeS9MdkU6Xn6iEzBmQUQCNuWD7rHCK6Mjs0= -github.com/pointlander/peg v1.0.1/go.mod h1:5hsGDQR2oZI4QoWz0/Kdg3VSVEC31iJw/b7WjqCBGRI= -github.com/polyfloyd/go-errorlint v1.0.5 h1:AHB5JRCjlmelh9RrLxT9sgzpalIwwq4hqE8EkwIwKdY= -github.com/polyfloyd/go-errorlint v1.0.5/go.mod h1:APVvOesVSAnne5SClsPxPdfvZTVDojXh1/G3qb5wjGI= -github.com/posener/complete v1.1.1 h1:ccV59UEOTzVDnDUEFdT95ZzHVZ+5+158q8+SJb2QV5w= -github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/quasilyte/go-ruleguard v0.3.1-0.20210203134552-1b5a410e1cc8/go.mod h1:KsAh3x0e7Fkpgs+Q9pNLS5XpFSvYCEVl5gP9Pp1xp30= -github.com/quasilyte/go-ruleguard v0.3.18 h1:sd+abO1PEI9fkYennwzHn9kl3nqP6M5vE7FiOzZ+5CE= -github.com/quasilyte/go-ruleguard v0.3.18/go.mod h1:lOIzcYlgxrQ2sGJ735EHXmf/e9MJ516j16K/Ifcttvs= -github.com/quasilyte/go-ruleguard/dsl v0.3.0/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/dsl v0.3.21/go.mod h1:KeCP03KrjuSO0H1kTuZQCWlQPulDV6YMIXmpQss17rU= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20201231183845-9e62ed36efe1/go.mod h1:7JTjp89EGyU1d6XfBiXihJNG37wB2VRkd125Q1u7Plc= -github.com/quasilyte/go-ruleguard/rules v0.0.0-20211022131956-028d6511ab71/go.mod h1:4cgAphtvu7Ftv7vOT2ZOYhC6CvBxZixcasr8qIOTA50= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f h1:6Gtn2i04RD0gVyYf2/IUMTIs+qYleBt4zxDqkLTcu4U= -github.com/quasilyte/gogrep v0.0.0-20220828223005-86e4605de09f/go.mod h1:Cm9lpz9NZjEoL1tgZ2OgeUKPIxL1meE7eo60Z6Sk+Ng= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95 h1:L8QM9bvf68pVdQ3bCFZMDmnt9yqcMBro1pC7F+IPYMY= -github.com/quasilyte/regex/syntax v0.0.0-20200407221936-30656e2c4a95/go.mod h1:rlzQ04UMyJXu/aOvhd8qT+hvDrFpiwqp8MRXDY9szc0= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4lu7Gd+PU1fV2/qnDNfzT635KRSObncs= -github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= -github.com/raulk/go-watchdog v1.3.0 h1:oUmdlHxdkXRJlwfG0O9omj8ukerm8MEQavSiDTEtBsk= -github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 h1:xe+mmCnDN82KhC010l3NfYlA8ZbOuzbXAzSYBa6wbMc= -github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rjeczalik/notify v0.9.1 h1:CLCKso/QK1snAlnhNR/CNvNiFU2saUtjV0bx3EwNeCE= -github.com/rogpeppe/fastuuid v1.2.0 h1:Ppwyp6VYCF1nvBTXL3trRso7mXMlRrw9ooo375wvi2s= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.3.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/xid v1.4.0 h1:qd7wPTDkN6KQx2VmMBLrpHkiyQwgFXRnkOLacUiaSNY= -github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U= -github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= -github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= -github.com/ryancurrah/gomodguard v1.2.4 h1:CpMSDKan0LtNGGhPrvupAoLeObRFjND8/tU1rEOtBp4= -github.com/ryancurrah/gomodguard v1.2.4/go.mod h1:+Kem4VjWwvFpUJRJSwa16s1tBJe+vbv02+naTow2f6M= -github.com/ryanrolds/sqlclosecheck v0.3.0 h1:AZx+Bixh8zdUBxUA1NxbxVAS78vTPq4rCb8OUZI9xFw= -github.com/ryanrolds/sqlclosecheck v0.3.0/go.mod h1:1gREqxyTGR3lVtpngyFo3hZAgk0KCtEdgEkHwDbigdA= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f h1:UFr9zpz4xgTnIE5yIMtWAMngCdZ9p/+q6lTbgelo80M= -github.com/sagikazarmark/crypt v0.10.0 h1:96E1qrToLBU6fGzo+PRRz7KGOc9FkYFiPnR3/zf8Smg= -github.com/sagikazarmark/crypt v0.10.0/go.mod h1:gwTNHQVoOS3xp9Xvz5LLR+1AauC5M6880z5NWzdhOyQ= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da h1:p3Vo3i64TCLY7gIfzeQaUJ+kppEO5WQG3cL8iE8tGHU= -github.com/sanposhiho/wastedassign/v2 v2.0.6 h1:+6/hQIHKNJAUixEj6EmOngGIisyeI+T3335lYTyxRoA= -github.com/sanposhiho/wastedassign/v2 v2.0.6/go.mod h1:KyZ0MWTwxxBmfwn33zh3k1dmsbF2ud9pAAGfoLfjhtI= -github.com/sashamelentyev/interfacebloat v1.1.0 h1:xdRdJp0irL086OyW1H/RTZTr1h/tMEOsumirXcOJqAw= -github.com/sashamelentyev/interfacebloat v1.1.0/go.mod h1:+Y9yU5YdTkrNvoX0xHc84dxiN1iBi9+G8zZIhPVoNjQ= -github.com/sashamelentyev/usestdlibvars v1.20.0 h1:K6CXjqqtSYSsuyRDDC7Sjn6vTMLiSJa4ZmDkiokoqtw= -github.com/sashamelentyev/usestdlibvars v1.20.0/go.mod h1:0GaP+ecfZMXShS0A94CJn6aEuPRILv8h/VuWI9n1ygg= -github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= -github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646 h1:RpforrEYXWkmGwJHIGnLZ3tTWStkjVVstwzNGqxX2Ds= -github.com/securego/gosec/v2 v2.13.1 h1:7mU32qn2dyC81MH9L2kefnQyRMUarfDER3iQyMHcjYM= -github.com/securego/gosec/v2 v2.13.1/go.mod h1:EO1sImBMBWFjOTFzMWfTRrZW6M15gm60ljzrmy/wtHo= -github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= -github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c h1:W65qqJCIOVP4jpqPQ0YvHYKwcMEMVWIzWC5iNQQfBTU= -github.com/shazow/go-diff v0.0.0-20160112020656-b6b7b6733b8c/go.mod h1:/PevMnwAxekIXwN8qQyfc5gl2NlkB3CQlkizAbOkeBs= -github.com/shurcooL/go v0.0.0-20180423040247-9e1955d9fb6e/go.mod h1:TDJrrUr11Vxrven61rcy3hJMUqaf/CLWYhHNPmT14Lk= -github.com/shurcooL/go-goon v0.0.0-20170922171312-37c2f522c041/go.mod h1:N5mDOmsrJOB+vfqUK+7DmDyjhSLIIBnXo9lvZJj3MWQ= -github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5IYyJwS/kOiWx8mHo= -github.com/sivchari/containedctx v1.0.2 h1:0hLQKpgC53OVF1VT7CeoFHk9YKstur1XOgfYIc1yrHI= -github.com/sivchari/containedctx v1.0.2/go.mod h1:PwZOeqm4/DLoJOqMSIJs3aKqXRX4YO+uXww087KZ7Bw= -github.com/sivchari/nosnakecase v1.7.0 h1:7QkpWIRMe8x25gckkFd2A5Pi6Ymo0qgr4JrhGt95do8= -github.com/sivchari/nosnakecase v1.7.0/go.mod h1:CwDzrzPea40/GB6uynrNLiorAlgFRvRbFSgJx2Gs+QY= -github.com/sivchari/tenv v1.7.0 h1:d4laZMBK6jpe5PWepxlV9S+LC0yXqvYHiq8E6ceoVVE= -github.com/sivchari/tenv v1.7.0/go.mod h1:64yStXKSOxDfX47NlhVwND4dHwfZDdbp2Lyl018Icvg= -github.com/skeema/knownhosts v1.1.0 h1:Wvr9V0MxhjRbl3f9nMnKnFfiWTJmtECJ9Njkea3ysW0= -github.com/skeema/knownhosts v1.1.0/go.mod h1:sKFq3RD6/TKZkSWn8boUbDC7Qkgcv+8XXijpFO6roag= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM= -github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa h1:YJfZp12Z3AFhSBeXOlv4BO55RMwPn2NoQeDsrdWnBtY= -github.com/snikch/goodman v0.0.0-20171125024755-10e37e294daa/go.mod h1:oJyF+mSPHbB5mVY2iO9KV3pTt/QbIkGaO8gQ2WrDbP4= -github.com/soheilhy/cmux v0.1.4 h1:0HKaf1o97UwFjHH9o5XsHUOF+tqmdA7KEzXLpiyaw0E= -github.com/sonatard/noctx v0.0.1 h1:VC1Qhl6Oxx9vvWo3UDgrGXYCeKCe3Wbw7qAWL6FrmTY= -github.com/sonatard/noctx v0.0.1/go.mod h1:9D2D/EoULe8Yy2joDHJj7bv3sZoq9AaSb8B4lqBjiZI= -github.com/sony/gobreaker v0.4.1 h1:oMnRNZXX5j85zso6xCPRNPtmAycat+WcoKbklScLDgQ= -github.com/sourcegraph/go-diff v0.6.1 h1:hmA1LzxW0n1c3Q4YbrFgg4P99GSnebYa3x8gr0HZqLQ= -github.com/sourcegraph/go-diff v0.6.1/go.mod h1:iBszgVvyxdc8SFZ7gm69go2KDdt3ag071iBaWPF6cjs= -github.com/spf13/afero v1.8.2/go.mod h1:CtAatgMJh6bJEIs48Ay/FOnkljP3WeGUG0MC1RfAqwo= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/cast v1.5.0/go.mod h1:SpXXQ5YoyJw6s3/6cMTQuxvgRl3PCJiyaX9p6b155UU= -github.com/spf13/cobra v1.6.1/go.mod h1:IOw/AERYS7UzyrGinqmz6HLUo219MORXGxhbaJUqzrY= -github.com/spf13/viper v1.13.0/go.mod h1:Icm2xNL3/8uyh/wFuB1jI7TiTNKp8632Nwegu+zgdYw= -github.com/spf13/viper v1.14.0/go.mod h1:WT//axPky3FdvXHzGw33dNdXXXfFQqmEalje+egj8As= -github.com/ssgreg/nlreturn/v2 v2.2.1 h1:X4XDI7jstt3ySqGU86YGAURbxw3oTDPK9sPEi6YEwQ0= -github.com/ssgreg/nlreturn/v2 v2.2.1/go.mod h1:E/iiPB78hV7Szg2YfRgyIrk1AD6JVMTRkkxBiELzh2I= -github.com/status-im/keycard-go v0.0.0-20190316090335-8537d3370df4 h1:Gb2Tyox57NRNuZ2d3rmvB3pcmbu7O1RS3m8WRx7ilrg= -github.com/stbenjam/no-sprintf-host-port v0.1.1 h1:tYugd/yrm1O0dV+ThCbaKZh195Dfm07ysF0U6JQXczc= -github.com/stbenjam/no-sprintf-host-port v0.1.1/go.mod h1:TLhvtIvONRzdmkFiio4O8LHsN9N74I+PhRquPsxpL0I= -github.com/stefanberger/go-pkcs11uri v0.0.0-20201008174630-78d3cae3a980 h1:lIOOHPEbXzO3vnmx2gok1Tfs31Q8GQqKLc8vVqyQq/I= -github.com/streadway/amqp v1.0.0 h1:kuuDrUJFZL1QYL9hUNuCxNObNzB0bV/ZG5jV3RWAQgo= -github.com/streadway/handy v0.0.0-20200128134331-0f66f006fb2e h1:mOtuXaRAbVZsxAHVdPR3IjfmN8T1h2iczJLynhLybf8= -github.com/stretchr/objx v0.3.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.1.4/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.7.5/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/supranational/blst v0.3.8-0.20220526154634-513d2456b344 h1:m+8fKfQwCAy1QjzINvKe/pYtLjo2dl59x2w9YSEJxuY= -github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= -github.com/syndtr/goleveldb v1.0.1-0.20200815110645-5c35d600f0ca/go.mod h1:u2MKkTVTVJWe5D1rCvame8WqhBd88EuIwODJZ1VHCPM= -github.com/tchap/go-patricia v2.2.6+incompatible h1:JvoDL7JSoIP2HDE8AbDH3zC8QBPxmzYe32HHy5yQ+Ck= -github.com/tdakkota/asciicheck v0.1.1 h1:PKzG7JUTUmVspQTDqtkX9eSiLGossXTybutHwTXuO0A= -github.com/tdakkota/asciicheck v0.1.1/go.mod h1:yHp0ai0Z9gUljN3o0xMhYJnH/IcvkdTBOX2fmJ93JEM= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c h1:g+WoO5jjkqGAzHWCjJB1zZfXPIAaDpzXIEJ0eS6B5Ok= -github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c/go.mod h1:ahpPrc7HpcfEWDQRZEmnXMzHY03mLDYMCxeDzy46i+8= -github.com/tendermint/tendermint v0.37.0-rc2 h1:2n1em+jfbhSv6QnBj8F6KHCpbIzZCB8KgcjidJUQNlY= -github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= -github.com/tenntenn/modver v1.0.1/go.mod h1:bePIyQPb7UeioSRkw3Q0XeMhYZSMx9B8ePqg6SAMGH0= -github.com/tenntenn/text/transform v0.0.0-20200319021203-7eef512accb3/go.mod h1:ON8b8w4BN/kE1EOhwT0o+d62W65a6aPw1nouo9LMgyY= -github.com/tetafro/godot v1.4.11 h1:BVoBIqAf/2QdbFmSwAWnaIqDivZdOV0ZRwEm6jivLKw= -github.com/tetafro/godot v1.4.11/go.mod h1:LR3CJpxDVGlYOWn3ZZg1PgNZdTUvzsZWu8xaEohUpn8= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144 h1:kl4KhGNsJIbDHS9/4U9yQo1UcPQM0kOMJHn29EoH/Ro= -github.com/timakin/bodyclose v0.0.0-20210704033933-f49887972144/go.mod h1:Qimiffbc6q9tBWlVV6x0P9sat/ao1xEkREYPPj9hphk= -github.com/timonwong/loggercheck v0.9.3 h1:ecACo9fNiHxX4/Bc02rW2+kaJIAMAes7qJ7JKxt0EZI= -github.com/timonwong/loggercheck v0.9.3/go.mod h1:wUqnk9yAOIKtGA39l1KLE9Iz0QiTocu/YZoOf+OzFdw= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8 h1:ndzgwNDnKIqyCvHTXaCqh9KlOWKvBry6nuXMJmonVsE= -github.com/tomarrell/wrapcheck/v2 v2.7.0 h1:J/F8DbSKJC83bAvC6FoZaRjZiZ/iKoueSdrEkmGeacA= -github.com/tomarrell/wrapcheck/v2 v2.7.0/go.mod h1:ao7l5p0aOlUNJKI0qVwB4Yjlqutd0IvAB9Rdwyilxvg= -github.com/tommy-muehle/go-mnd/v2 v2.5.1 h1:NowYhSdyE/1zwK9QCLeRb6USWdoif80Ie+v+yU8u1Zw= -github.com/tommy-muehle/go-mnd/v2 v2.5.1/go.mod h1:WsUAkMJMYww6l/ufffCD3m+P7LEvr8TnZn9lwVDlgzw= -github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926 h1:G3dpKMzFDjgEh2q1Z7zUUtKa8ViPtH+ocF0bE0g00O8= -github.com/ugorji/go v1.2.7/go.mod h1:nF9osbDWLy6bDVv/Rtoh6QgnvNDpmCalQV5urGCCS6M= -github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= -github.com/ultraware/funlen v0.0.3 h1:5ylVWm8wsNwH5aWo9438pwvsK0QiqVuUrt9bn7S/iLA= -github.com/ultraware/funlen v0.0.3/go.mod h1:Dp4UiAus7Wdb9KUZsYWZEWiRzGuM2kXM1lPbfaF6xhA= -github.com/ultraware/whitespace v0.0.5 h1:hh+/cpIcopyMYbZNVov9iSxvJU3OYQg78Sfaqzi/CzI= -github.com/ultraware/whitespace v0.0.5/go.mod h1:aVMh/gQve5Maj9hQ/hg+F75lr/X5A89uZnzAmWSineA= -github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo= -github.com/urfave/cli/v2 v2.10.2 h1:x3p8awjp/2arX+Nl/G2040AZpOCHS/eMJJ1/a+mye4Y= -github.com/uudashr/gocognit v1.0.6 h1:2Cgi6MweCsdB6kpcVQp7EW4U23iBFQWfTXiWlyp842Y= -github.com/uudashr/gocognit v1.0.6/go.mod h1:nAIUuVBnYU7pcninia3BHOvQkpQCeO76Uscky5BOwcY= -github.com/vektra/mockery/v2 v2.14.0 h1:KZ1p5Hrn8tiY+LErRMr14HHle6khxo+JKOXLBW/yfqs= -github.com/vektra/mockery/v2 v2.14.0/go.mod h1:bnD1T8tExSgPD1ripLkDbr60JA9VtQeu12P3wgLZd7M= -github.com/vishvananda/netlink v1.1.1-0.20210330154013-f5de75959ad5 h1:+UB2BJA852UkGH42H+Oee69djmxS3ANzl2b/JtT1YiA= -github.com/vishvananda/netns v0.0.0-20210104183010-2eb08e3e575f h1:p4VB7kIXpOQvVn1ZaTIVp+3vuYAXFe3OJEvjbUYJLaA= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= -github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xhit/go-str2duration v1.2.0 h1:BcV5u025cITWxEQKGWr1URRzrcXtu7uk8+luz3Yuhwc= -github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2 h1:eY9dn8+vbi4tKz5Qo6v2eYzo7kUS51QINcR5jNpbZS8= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77 h1:ESFSdwYZvkeru3RtdrYueztKhOBCSAAzS4Gf+k0tEow= -github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= -github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= -github.com/yagipy/maintidx v1.0.0/go.mod h1:0qNf/I/CCZXSMhsRsrEPDZ+DkekpKLXAJfsTACwgXLk= -github.com/yeya24/promlinter v0.2.0 h1:xFKDQ82orCU5jQujdaD8stOHiv8UN68BSdn2a8u8Y3o= -github.com/yeya24/promlinter v0.2.0/go.mod h1:u54lkmBOZrpEbQQ6gox2zWKKLKu2SGe+2KOiextY+IA= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.13 h1:fVcFKWvrslecOb/tg+Cc05dkeYx540o0FuFt3nUVDoE= -github.com/zeebo/xxh3 v1.0.2 h1:xZmwmqxHZA8AI603jOQ0tMqmBr9lPeFwGg6d+xy9DC0= -github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= -gitlab.com/bosi/decorder v0.2.3 h1:gX4/RgK16ijY8V+BRQHAySfQAb354T7/xQpDB2n10P0= -gitlab.com/bosi/decorder v0.2.3/go.mod h1:9K1RB5+VPNQYtXtTDAzd2OEftsZb1oV0IrJrzChSdGE= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738 h1:VcrIfasaLFkyjk6KNlXQSzO+B0fZcnECiDrKJsfxka0= -go.etcd.io/etcd/api/v3 v3.5.9 h1:4wSsluwyTbGGmyjJktOf3wFQoTBIURXHnq9n/G/JQHs= -go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= -go.etcd.io/etcd/client/pkg/v3 v3.5.9 h1:oidDC4+YEuSIQbsR94rY9gur91UPL6DnxDCIYd2IGsE= -go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= -go.etcd.io/etcd/client/v2 v2.305.7 h1:AELPkjNR3/igjbO7CjyF1fPuVPjrblliiKj+Y6xSGOU= -go.etcd.io/etcd/client/v2 v2.305.7/go.mod h1:GQGT5Z3TBuAQGvgPfhR7VPySu/SudxmEkRq9BgzFU6s= -go.etcd.io/etcd/client/v3 v3.5.9 h1:r5xghnU7CwbUxD/fbUtRyJGaYNfDun8sp/gTr1hew6E= -go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= -go.etcd.io/gofail v0.1.0 h1:XItAMIhOojXFQMgrxjnd2EIIHun/d5qL0Pf7FzVTkFg= -go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= -go.mozilla.org/pkcs7 v0.0.0-20200128120323-432b2356ecb1 h1:A/5uWzF44DlIgdm/PQFwfMkW0JX+cIcQi/SwLAmZP5M= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3 h1:syAz40OyelLZo42+3U68Phisvrx4qh+4wpdZw7eUUdY= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.36.3/go.mod h1:Dts42MGkzZne2yCru741+bFiTMWkIj/LLRizad7b9tw= -go.opentelemetry.io/otel v1.11.0 h1:kfToEGMDq6TrVrJ9Vht84Y8y9enykSZzDDZglV0kIEk= -go.opentelemetry.io/otel v1.11.0/go.mod h1:H2KtuEphyMvlhZ+F7tg9GRhAOe60moNx61Ex+WmiKkk= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.3.0 h1:R/OBkMoGgfy2fLhs2QhkCI1w4HLEQX92GCcJB6SSdNk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.3.0 h1:giGm8w67Ja7amYNfYMdme7xSp2pIxThWopw8+QP51Yk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.3.0 h1:VQbUHoJqytHHSJ1OZodPH9tvZZSVzUHjPHpkO85sT6k= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.3.0 h1:Ydage/P0fRrSPpZeCVxzjqGcI6iVmG2xb43+IR8cjqM= -go.opentelemetry.io/otel/sdk v1.3.0 h1:3278edCoH89MEJ0Ky8WQXVmDQv3FX4ZJ3Pp+9fJreAI= -go.opentelemetry.io/otel/trace v1.11.0 h1:20U/Vj42SX+mASlXLmSGBg6jpI1jQtv682lZtTAOVFI= -go.opentelemetry.io/otel/trace v1.11.0/go.mod h1:nyYjis9jy0gytE9LXGU+/m1sHTKbRY0fX0hulNNDP1U= -go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= -go.uber.org/atomic v1.9.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee h1:0mgffUl7nfd+FpvXMVz4IDEaUSmT1ysygQC7qYo7sG4= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= -go.uber.org/zap v1.23.0/go.mod h1:D+nX8jyLsMHMYrln8A0rJjFt/T/9/bGgIhAqxv5URuY= -golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220525230936-793ad666bf5e/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220826181053-bd7e27e6170d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.5.0/go.mod h1:NK/OQwhpMQP3MwtdjgLlYHnH9ebylxKWv3e0fK+mkQU= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp v0.0.0-20230131160201-f062dba9d201/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= -golang.org/x/exp/typeparams v0.0.0-20220428152302-39d4317da171/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91 h1:Ic/qN6TEifvObMGQy72k0n1LlJr7DjWWEi+MOsDOiSk= -golang.org/x/exp/typeparams v0.0.0-20220827204233-334a2380cb91/go.mod h1:AbB0pIl9nAr9wVwH+Z2ZpaocVmF5I4GyWCDIsVjR0bk= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b h1:+qEpEAPhDZ1o0x3tHzZTQDArnOixOzGD9HUJfcg0mb4= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 h1:VLliZ0d+/avPrXXH+OakdXhpJuEoBZuwh1m2j7U6Iug= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028 h1:4+4C/Iv2U4fMZBiMCc98MG1In4gJY5YRhtpDNeDeHWs= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220826154423-83b083e8dc8b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210303074136-134d130e1a04/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210616045830-e2b7044e8c71/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220702020025-31831981b65f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220825204002-c680a09ffe64/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20220722155259-a9ba230a4035/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/time v0.1.0/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/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190307163923-6a08e3108db3/go.mod h1:25r3+/G6/xytQM8iWZKq3Hn0kr0rgFKPUNVEL/dr3z4= -golang.org/x/tools v0.0.0-20190311215038-5c2858a9cfe5/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190321232350-e250d351ecad/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190322203728-c1a832b0ad89/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190910044552-dd2b5c81c578/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190916130336-e45ffcd953cc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20200117220505-0cba7a3a9ee9/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200324003944-a576cf524670/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200329025819-fd4102a86c65/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200622203043-20e05c1c8ffa/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200624225443-88f3c62a19ff/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200724022722-7017fd6b1305/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200812195022-5ae4c3c160a0/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200820010801-b793a1359eac/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200831203904-5a2aa26beb65/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201001104356-43ebab892c4c/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201002184944-ecd9fd270d5d/go.mod h1:z6u4i615ZeAfBE4XtMziQW1fSVJXACjjbWkB/mvPzlU= -golang.org/x/tools v0.0.0-20201023174141-c8cfbd0f21e6/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201230224404-63754364767c/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.1-0.20210205202024-ef80cdb6ec6d/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.1-0.20210302220138-2ac05c832e1a/go.mod h1:9bzcO0MWcOuT0tm1iBGzDVPshzfwoVvREIui8C+MHqU= -golang.org/x/tools v0.1.9-0.20211228192929-ee1ca4ffc4da/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= -golang.org/x/tools v0.1.11/go.mod h1:SgwaegtQh8clINPpECJMqnxLv9I09HLqnW3RMqW0CA4= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.8.2 h1:CCXrcPKiGGotvnN6jfUsKk4rRqm7q09/YbKb5xCEvtM= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= -google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0 h1:M1YKkFIboKNieVO5DLUEVzQfGwJD30Nv2jfUgzb5UcE= -google.golang.org/protobuf v1.27.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.2-0.20220831092852-f930b1dc76e8/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.2-0.20230222093303-bc1253ad3743/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -gopkg.in/alecthomas/kingpin.v2 v2.2.6 h1:jMFz6MfLP0/4fUyZle81rXUoxOBFi19VUFKVDOQfozc= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.27 h1:kJdccidYzt3CaHD1crCFTS1hxyhSi059NhOFUf03YFo= -gopkg.in/errgo.v2 v2.1.0 h1:0vLT13EuvQ0hNvakwLuFZ/jYrLp5F3kcWHXdRggjCE8= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= -gopkg.in/gcfg.v1 v1.2.3 h1:m8OOJ4ccYHnx2f4gQwpno8nAX5OGOh7RLaaz0pj3Ogs= -gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= -gopkg.in/resty.v1 v1.12.0 h1:CuXP0Pjfw9rOuY6EP+UvtNvt5DSqHpIxILZKT/quCZI= -gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.2.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= -gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= -honnef.co/go/tools v0.3.3 h1:oDx7VAwstgpYpb3wv0oxiZlxY+foCpRAwY7Vk6XpAgA= -honnef.co/go/tools v0.3.3/go.mod h1:jzwdWgg7Jdq75wlfblQxO4neNaFFSvgc1tD5Wv8U0Yw= -k8s.io/api v0.22.5 h1:xk7C+rMjF/EGELiD560jdmwzrB788mfcHiNbMQLIVI8= -k8s.io/apimachinery v0.22.5 h1:cIPwldOYm1Slq9VLBRPtEYpyhjIm1C6aAMAoENuvN9s= -k8s.io/apiserver v0.22.5 h1:71krQxCUz218ecb+nPhfDsNB6QgP1/4EMvi1a2uYBlg= -k8s.io/client-go v0.22.5 h1:I8Zn/UqIdi2r02aZmhaJ1hqMxcpfJ3t5VqvHtctHYFo= -k8s.io/component-base v0.22.5 h1:U0eHqZm7mAFE42hFwYhY6ze/MmVaW00JpMrzVsQmzYE= -k8s.io/cri-api v0.23.1 h1:0DHL/hpTf4Fp+QkUXFefWcp1fhjXr9OlNdY9X99c+O8= -k8s.io/klog/v2 v2.30.0 h1:bUO6drIvCIsvZ/XFgfxoGFQU/a4Qkh0iAlvUR7vlHJw= -k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b h1:wxEMGetGMur3J1xuGLQY7GEQYg9bZxKn3tKo5k/eYcs= -mvdan.cc/gofumpt v0.4.0 h1:JVf4NN1mIpHogBj7ABpgOyZc65/UUOkKQFkoURsz4MM= -mvdan.cc/gofumpt v0.4.0/go.mod h1:PljLOHDeZqgS8opHRKLzp2It2VBuSdteAgqUfzMTxlQ= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= -mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= -mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b/go.mod h1:2odslEg/xrtNQqCYg2/jCoyKnw3vv5biOc3JnIcYfL4= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442 h1:seuXWbRB1qPrS3NQnHmFKLJLtskWyueeIzmLXghMGgk= -mvdan.cc/unparam v0.0.0-20220706161116-678bad134442/go.mod h1:F/Cxw/6mVrNKqrR2YjFf5CaW0Bw4RL8RfbEf4GRggJk= -rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY= -rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4= -sigs.k8s.io/structured-merge-diff/v4 v4.1.2 h1:Hr/htKFmJEbtMgS/UD0N+gtgctAqz81t3nu+sPzynno= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0 h1:ucqkfpjg9WzSUubAO62csmucvxl4/JeW3F4I4909XkM= diff --git a/relayer/chains/cosmos/cosmos_chain_processor.go b/relayer/chains/cosmos/cosmos_chain_processor.go index c582cc731..ad2d56c6c 100644 --- a/relayer/chains/cosmos/cosmos_chain_processor.go +++ b/relayer/chains/cosmos/cosmos_chain_processor.go @@ -71,6 +71,7 @@ func NewCosmosChainProcessor(log *zap.Logger, provider *CosmosProvider, metrics const ( queryTimeout = 5 * time.Second + queryStateTimeout = 60 * time.Second blockResultsQueryTimeout = 2 * time.Minute latestHeightQueryRetryDelay = 1 * time.Second latestHeightQueryRetries = 5 @@ -279,7 +280,7 @@ func (ccp *CosmosChainProcessor) Run(ctx context.Context, initialBlockHistory ui // initializeConnectionState will bootstrap the connectionStateCache with the open connection state. func (ccp *CosmosChainProcessor) initializeConnectionState(ctx context.Context) error { - ctx, cancel := context.WithTimeout(ctx, queryTimeout) + ctx, cancel := context.WithTimeout(ctx, queryStateTimeout) defer cancel() connections, err := ccp.chainProvider.QueryConnections(ctx) if err != nil { @@ -299,7 +300,7 @@ func (ccp *CosmosChainProcessor) initializeConnectionState(ctx context.Context) // initializeChannelState will bootstrap the channelStateCache with the open channel state. func (ccp *CosmosChainProcessor) initializeChannelState(ctx context.Context) error { - ctx, cancel := context.WithTimeout(ctx, queryTimeout) + ctx, cancel := context.WithTimeout(ctx, queryStateTimeout) defer cancel() channels, err := ccp.chainProvider.QueryChannels(ctx) if err != nil { @@ -315,12 +316,13 @@ func (ccp *CosmosChainProcessor) initializeChannelState(ctx context.Context) err continue } ccp.channelConnections[ch.ChannelId] = ch.ConnectionHops[0] - ccp.channelStateCache[processor.ChannelKey{ + k := processor.ChannelKey{ ChannelID: ch.ChannelId, PortID: ch.PortId, CounterpartyChannelID: ch.Counterparty.ChannelId, CounterpartyPortID: ch.Counterparty.PortId, - }] = ch.State == chantypes.OPEN + } + ccp.channelStateCache.SetOpen(k, ch.State == chantypes.OPEN, ch.Ordering) } return nil } @@ -402,11 +404,11 @@ func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *qu }) if err := eg.Wait(); err != nil { - ccp.log.Warn( - "Could not query block data. Consider checking if your RPC node is online, and that transaction indexing is enabled.", + ccp.log.Debug( + "Error querying block data", zap.Int64("height", i), + zap.Error(err), ) - ccp.log.Debug("Error querying block data", zap.Error(err)) persistence.retriesAtLatestQueriedBlock++ if persistence.retriesAtLatestQueriedBlock >= blockMaxRetries { diff --git a/relayer/chains/cosmos/message_handlers.go b/relayer/chains/cosmos/message_handlers.go index 1e6a811c0..029ddd652 100644 --- a/relayer/chains/cosmos/message_handlers.go +++ b/relayer/chains/cosmos/message_handlers.go @@ -40,7 +40,7 @@ func (ccp *CosmosChainProcessor) handlePacketMessage(eventType string, pi provid } if eventType == chantypes.EventTypeTimeoutPacket && pi.ChannelOrder == chantypes.ORDERED.String() { - ccp.channelStateCache[k] = false + ccp.channelStateCache.SetOpen(k, false, chantypes.ORDERED) } if !c.PacketFlow.ShouldRetainSequence(ccp.pathProcessors, k, ccp.chainProvider.ChainId(), eventType, pi.Sequence) { @@ -78,19 +78,19 @@ func (ccp *CosmosChainProcessor) handleChannelMessage(eventType string, ci provi } } if !found { - ccp.channelStateCache[channelKey] = false + ccp.channelStateCache.SetOpen(channelKey, false, ci.Order) } } else { switch eventType { case chantypes.EventTypeChannelOpenTry: - ccp.channelStateCache[channelKey] = false + ccp.channelStateCache.SetOpen(channelKey, false, ci.Order) case chantypes.EventTypeChannelOpenAck, chantypes.EventTypeChannelOpenConfirm: - ccp.channelStateCache[channelKey] = true + ccp.channelStateCache.SetOpen(channelKey, true, ci.Order) ccp.logChannelOpenMessage(eventType, ci) case chantypes.EventTypeChannelCloseConfirm: for k := range ccp.channelStateCache { if k.PortID == ci.PortID && k.ChannelID == ci.ChannelID { - ccp.channelStateCache[k] = false + ccp.channelStateCache.SetOpen(channelKey, false, ci.Order) break } } diff --git a/relayer/chains/cosmos/message_handlers_test.go b/relayer/chains/cosmos/message_handlers_test.go index 10ebc9771..8038b3e5e 100644 --- a/relayer/chains/cosmos/message_handlers_test.go +++ b/relayer/chains/cosmos/message_handlers_test.go @@ -128,7 +128,7 @@ func TestChannelStateCache(t *testing.T) { // The channel state is not open, but the entry should exist in the channelStateCache. // MsgInitKey returns the ChannelKey with an empty counterparty channel ID. - require.False(t, ccp.channelStateCache[k.MsgInitKey()]) + require.False(t, ccp.channelStateCache[k.MsgInitKey()].Open) // Observe MsgChannelOpenAck, which does have counterparty channel ID. ccp.handleChannelMessage(chantypes.EventTypeChannelOpenAck, msgOpenAck, c) @@ -139,7 +139,7 @@ func TestChannelStateCache(t *testing.T) { // The fully populated ChannelKey should now be the only entry for this channel. // The channel now open. - require.True(t, ccp.channelStateCache[k]) + require.True(t, ccp.channelStateCache[k].Open) }) t.Run("handshake already occurred", func(t *testing.T) { @@ -156,7 +156,7 @@ func TestChannelStateCache(t *testing.T) { // Initialize channelStateCache with populated channel ID and counterparty channel ID. // This emulates initializeChannelState after a recent channel handshake has completed - ccp.channelStateCache[k] = true + ccp.channelStateCache.SetOpen(k, true, chantypes.NONE) // Observe MsgChannelOpenInit, which does not have counterparty channel ID. ccp.handleChannelMessage(chantypes.EventTypeChannelOpenInit, msgOpenInit, c) @@ -166,7 +166,7 @@ func TestChannelStateCache(t *testing.T) { // The fully populated ChannelKey should still be the only entry for this channel. // The channel is still marked open since it was open during initializeChannelState. - require.True(t, ccp.channelStateCache[k]) + require.True(t, ccp.channelStateCache[k].Open) // Observe MsgChannelOpenAck, which does have counterparty channel ID. ccp.handleChannelMessage(chantypes.EventTypeChannelOpenAck, msgOpenAck, c) @@ -175,6 +175,6 @@ func TestChannelStateCache(t *testing.T) { require.Len(t, ccp.channelStateCache, 1) // The fully populated ChannelKey should still be the only entry for this channel. - require.True(t, ccp.channelStateCache[k]) + require.True(t, ccp.channelStateCache[k].Open) }) } diff --git a/relayer/chains/cosmos/query.go b/relayer/chains/cosmos/query.go index 766ad06dc..dfc040214 100644 --- a/relayer/chains/cosmos/query.go +++ b/relayer/chains/cosmos/query.go @@ -1096,6 +1096,29 @@ func (cc *CosmosProvider) QueryNextSeqRecv(ctx context.Context, height int64, ch }, nil } +// QueryNextSeqAck returns the next seqAck for a configured channel +func (cc *CosmosProvider) QueryNextSeqAck(ctx context.Context, height int64, channelid, portid string) (recvRes *chantypes.QueryNextSequenceReceiveResponse, err error) { + key := host.NextSequenceAckKey(portid, channelid) + + value, proofBz, proofHeight, err := cc.QueryTendermintProof(ctx, height, key) + if err != nil { + return nil, err + } + + // check if next sequence receive exists + if len(value) == 0 { + return nil, sdkerrors.Wrapf(chantypes.ErrChannelNotFound, "portID (%s), channelID (%s)", portid, channelid) + } + + sequence := binary.BigEndian.Uint64(value) + + return &chantypes.QueryNextSequenceReceiveResponse{ + NextSequenceReceive: sequence, + Proof: proofBz, + ProofHeight: proofHeight, + }, nil +} + // QueryPacketCommitment returns the packet commitment proof at a given height func (cc *CosmosProvider) QueryPacketCommitment(ctx context.Context, height int64, channelid, portid string, seq uint64) (comRes *chantypes.QueryPacketCommitmentResponse, err error) { key := host.PacketCommitmentKey(portid, channelid, seq) diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index 48eeb6a9d..a9da07179 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -55,7 +55,7 @@ var ( rtyAtt = retry.Attempts(rtyAttNum) rtyDel = retry.Delay(time.Millisecond * 400) rtyErr = retry.LastErrorOnly(true) - numRegex = regexp.MustCompile("[0-9]+") + accountSeqRegex = regexp.MustCompile("account sequence mismatch, expected ([0-9]+), got ([0-9]+)") defaultBroadcastWaitTimeout = 10 * time.Minute errUnknown = "unknown" ) @@ -660,32 +660,17 @@ func (cc *CosmosProvider) handleAccountSequenceMismatchError(sequenceGuard *Wall panic("sequence guard not configured") } - sequences := numRegex.FindAllString(err.Error(), -1) - if len(sequences) != 2 { + matches := accountSeqRegex.FindStringSubmatch(err.Error()) + if len(matches) == 0 { return } - nextSeq, err := strconv.ParseUint(sequences[0], 10, 64) + nextSeq, err := strconv.ParseUint(matches[1], 10, 64) if err != nil { return } sequenceGuard.NextAccountSequence = nextSeq } -// handleAccountSequenceMismatchError will parse the error string, e.g.: -// "account sequence mismatch, expected 10, got 9: incorrect account sequence" -// and update the next account sequence with the expected value. -// func (cc *CosmosProvider) handleAccountSequenceMismatchError(err error) { -// sequences := numRegex.FindAllString(err.Error(), -1) -// if len(sequences) != 2 { -// return -// } -// nextSeq, err := strconv.ParseUint(sequences[0], 10, 64) -// if err != nil { -// return -// } -// cc.nextAccountSeq = nextSeq -// } - // MsgCreateClient creates an sdk.Msg to update the client on src with consensus state from dst func (cc *CosmosProvider) MsgCreateClient( clientState ibcexported.ClientState, diff --git a/relayer/chains/mock/mock_chain_processor.go b/relayer/chains/mock/mock_chain_processor.go index 4faf1fe3c..85ec8e769 100644 --- a/relayer/chains/mock/mock_chain_processor.go +++ b/relayer/chains/mock/mock_chain_processor.go @@ -170,7 +170,7 @@ func (mcp *MockChainProcessor) queryCycle(ctx context.Context, persistence *quer // mocking all channels open for channelKey := range ibcMessagesCache.PacketFlow { - channelStateCache[channelKey] = true + channelStateCache.SetOpen(channelKey, true, chantypes.NONE) } // now pass foundMessages to the path processors diff --git a/relayer/chains/penumbra/message_handlers.go b/relayer/chains/penumbra/message_handlers.go index 69f3b3538..22b570eb6 100644 --- a/relayer/chains/penumbra/message_handlers.go +++ b/relayer/chains/penumbra/message_handlers.go @@ -63,18 +63,18 @@ func (pcp *PenumbraChainProcessor) handleChannelMessage(eventType string, ci pro } } if !found { - pcp.channelStateCache[channelKey] = false + pcp.channelStateCache.SetOpen(channelKey, false, ci.Order) } } else { switch eventType { case chantypes.EventTypeChannelOpenTry: - pcp.channelStateCache[channelKey] = false + pcp.channelStateCache.SetOpen(channelKey, false, ci.Order) case chantypes.EventTypeChannelOpenAck, chantypes.EventTypeChannelOpenConfirm: - pcp.channelStateCache[channelKey] = true + pcp.channelStateCache.SetOpen(channelKey, true, ci.Order) case chantypes.EventTypeChannelCloseConfirm: for k := range pcp.channelStateCache { if k.PortID == ci.PortID && k.ChannelID == ci.ChannelID { - pcp.channelStateCache[k] = false + pcp.channelStateCache.SetOpen(channelKey, false, ci.Order) break } } diff --git a/relayer/chains/penumbra/penumbra_chain_processor.go b/relayer/chains/penumbra/penumbra_chain_processor.go index b140b87f5..2f741d589 100644 --- a/relayer/chains/penumbra/penumbra_chain_processor.go +++ b/relayer/chains/penumbra/penumbra_chain_processor.go @@ -257,12 +257,13 @@ func (pcp *PenumbraChainProcessor) initializeChannelState(ctx context.Context) e continue } pcp.channelConnections[ch.ChannelId] = ch.ConnectionHops[0] - pcp.channelStateCache[processor.ChannelKey{ + k := processor.ChannelKey{ ChannelID: ch.ChannelId, PortID: ch.PortId, CounterpartyChannelID: ch.Counterparty.ChannelId, CounterpartyPortID: ch.Counterparty.PortId, - }] = ch.State == chantypes.OPEN + } + pcp.channelStateCache.SetOpen(k, ch.State == chantypes.OPEN, ch.Ordering) } return nil } diff --git a/relayer/chains/penumbra/query.go b/relayer/chains/penumbra/query.go index da651ef93..ce1f08ed6 100644 --- a/relayer/chains/penumbra/query.go +++ b/relayer/chains/penumbra/query.go @@ -702,6 +702,29 @@ func (cc *PenumbraProvider) QueryNextSeqRecv(ctx context.Context, height int64, }, nil } +// QueryNextSeqAck returns the next seqAck for a configured channel +func (cc *PenumbraProvider) QueryNextSeqAck(ctx context.Context, height int64, channelid, portid string) (recvRes *chantypes.QueryNextSequenceReceiveResponse, err error) { + key := host.NextSequenceAckKey(portid, channelid) + + value, proofBz, proofHeight, err := cc.QueryTendermintProof(ctx, height, key) + if err != nil { + return nil, err + } + + // check if next sequence receive exists + if len(value) == 0 { + return nil, sdkerrors.Wrapf(chantypes.ErrChannelNotFound, "portID (%s), channelID (%s)", portid, channelid) + } + + sequence := binary.BigEndian.Uint64(value) + + return &chantypes.QueryNextSequenceReceiveResponse{ + NextSequenceReceive: sequence, + Proof: proofBz, + ProofHeight: proofHeight, + }, nil +} + // QueryPacketCommitment returns the packet commitment proof at a given height func (cc *PenumbraProvider) QueryPacketCommitment(ctx context.Context, height int64, channelid, portid string, seq uint64) (comRes *chantypes.QueryPacketCommitmentResponse, err error) { key := host.PacketCommitmentKey(portid, channelid, seq) diff --git a/relayer/processor/message_processor.go b/relayer/processor/message_processor.go index 9b9ed250e..c73bab303 100644 --- a/relayer/processor/message_processor.go +++ b/relayer/processor/message_processor.go @@ -313,11 +313,18 @@ func (mp *messageProcessor) trackAndSendMessages( var batch []messageToTrack for _, t := range mp.trackers() { + retries := dst.trackProcessingMessage(t) if t.assembledMsg() == nil { continue } - if broadcastBatch && retries == 0 { + + ordered := false + if m, ok := t.(packetMessageToTrack); ok && m.msg.info.ChannelOrder == chantypes.ORDERED.String() { + ordered = true + } + + if broadcastBatch && (retries == 0 || ordered) { batch = append(batch, t) continue } diff --git a/relayer/processor/path_end_runtime.go b/relayer/processor/path_end_runtime.go index 031ea60bb..f1b732af7 100644 --- a/relayer/processor/path_end_runtime.go +++ b/relayer/processor/path_end_runtime.go @@ -442,7 +442,7 @@ func (pathEnd *pathEndRuntime) shouldSendPacketMessage(message packetIBCMessage, ) return false } - if !pathEnd.channelStateCache[k] { + if !pathEnd.channelStateCache[k].Open { // channel is not open, do not send pathEnd.log.Warn("Refusing to relay packet message because channel is not open", zap.String("event_type", eventType), diff --git a/relayer/processor/path_processor.go b/relayer/processor/path_processor.go index d41296a4f..5b0b2c76e 100644 --- a/relayer/processor/path_processor.go +++ b/relayer/processor/path_processor.go @@ -30,7 +30,7 @@ const ( interchainQueryTimeout = 60 * time.Second // Amount of time between flushes if the previous flush failed. - flushFailureRetry = 15 * time.Second + flushFailureRetry = 5 * time.Second // If message assembly fails from either proof query failure on the source // or assembling the message for the destination, how many blocks should pass @@ -186,12 +186,12 @@ func (pp *PathProcessor) OnConnectionMessage(chainID string, eventType string, o func (pp *PathProcessor) channelPairs() []channelPair { // Channel keys are from pathEnd1's perspective - channels := make(map[ChannelKey]bool) - for k, open := range pp.pathEnd1.channelStateCache { - channels[k] = open + channels := make(map[ChannelKey]ChannelState) + for k, cs := range pp.pathEnd1.channelStateCache { + channels[k] = cs } - for k, open := range pp.pathEnd2.channelStateCache { - channels[k.Counterparty()] = open + for k, cs := range pp.pathEnd2.channelStateCache { + channels[k.Counterparty()] = cs } pairs := make([]channelPair, len(channels)) i := 0 @@ -457,8 +457,8 @@ func (pp *PathProcessor) handleLocalhostData(cacheData ChainProcessorCacheData) } } - channelStateCache1 := make(map[ChannelKey]bool) - channelStateCache2 := make(map[ChannelKey]bool) + channelStateCache1 := make(map[ChannelKey]ChannelState) + channelStateCache2 := make(map[ChannelKey]ChannelState) // split up data and send lower channel-id data to pathEnd2 and higher channel-id data to pathEnd1. for k, v := range cacheData.ChannelStateCache { diff --git a/relayer/processor/path_processor_internal.go b/relayer/processor/path_processor_internal.go index 7a1aa2037..58bbcc4a5 100644 --- a/relayer/processor/path_processor_internal.go +++ b/relayer/processor/path_processor_internal.go @@ -19,9 +19,8 @@ import ( // i.e. a MsgConnectionOpenInit or a MsgChannelOpenInit should be broadcasted to start // the handshake if this key exists in the relevant cache. const ( - preInitKey = "pre_init" - preCloseKey = "pre_close" - maxPacketsPerFlush = 10 + preInitKey = "pre_init" + preCloseKey = "pre_close" ) // getMessagesToSend returns only the lowest sequence message (if it should be sent) for ordered channels, @@ -35,21 +34,27 @@ func (pp *PathProcessor) getMessagesToSend( return } - if msgs[0].info.ChannelOrder == chantypes.ORDERED.String() { + ordered := false + + // channelStateCache most likely has the ordering information. + if cs, ok := src.channelStateCache[packetInfoChannelKey(msgs[0].info)]; ok && cs.Order == chantypes.ORDERED { + ordered = true + } + + // if packet info has the order defined, use that. + if msgs[0].info.ChannelOrder != "" && msgs[0].info.ChannelOrder != chantypes.NONE.String() { + ordered = msgs[0].info.ChannelOrder == chantypes.ORDERED.String() + } + + if ordered { eventMessages := make(map[string][]packetIBCMessage) + lowestSeq := make(map[string]uint64) for _, m := range msgs { eventMessages[m.eventType] = append(eventMessages[m.eventType], m) - } - - for e, m := range eventMessages { - m := m - sort.SliceStable(m, func(i, j int) bool { - return m[i].info.Sequence < m[j].info.Sequence - }) - - if e == chantypes.EventTypeRecvPacket { - dstChan, dstPort := m[0].info.DestChannel, m[0].info.DestPort + switch m.eventType { + case chantypes.EventTypeRecvPacket: + dstChan, dstPort := m.info.DestChannel, m.info.DestPort res, err := dst.chainProvider.QueryNextSeqRecv(ctx, 0, dstChan, dstPort) if err != nil { dst.log.Error("Failed to query next sequence recv", @@ -59,38 +64,104 @@ func (pp *PathProcessor) getMessagesToSend( ) return } - - if m[0].info.Sequence != res.NextSequenceReceive { - dst.log.Error("Unexpected next sequence recv", - zap.String("channel_id", m[0].info.DestChannel), - zap.String("port_id", m[0].info.DestChannel), - zap.Uint64("expected", res.NextSequenceReceive), - zap.Uint64("actual", m[0].info.Sequence), + lowestSeq[chantypes.EventTypeRecvPacket] = res.NextSequenceReceive + case chantypes.EventTypeAcknowledgePacket: + srcChan, srcPort := m.info.SourceChannel, m.info.SourcePort + res, err := src.chainProvider.QueryNextSeqAck(ctx, 0, srcChan, srcPort) + if err != nil { + src.log.Error("Failed to query next sequence ack", + zap.String("channel_id", srcChan), + zap.String("port_id", srcPort), + zap.Error(err), ) return } + lowestSeq[chantypes.EventTypeAcknowledgePacket] = res.NextSequenceReceive } + } - for i, msg := range m { - // only handle consecutive sequences on ordered channels - if i > 0 && msg.info.Sequence-1 != m[i-1].info.Sequence { - dst.log.Error("Packets are not consecutive", - zap.String("channel_id", m[0].info.DestChannel), - zap.String("port_id", m[0].info.DestChannel), - zap.Uint64("seq", msg.info.Sequence), - zap.Uint64("prior_seq", m[i-1].info.Sequence), - ) - break + for e, m := range eventMessages { + m := m + sort.SliceStable(m, func(i, j int) bool { + return m[i].info.Sequence < m[j].info.Sequence + }) + + foundFirst := false + MsgLoop: + for _, msg := range m { + if e == chantypes.EventTypeRecvPacket || e == chantypes.EventTypeAcknowledgePacket { + if msg.info.Sequence < lowestSeq[e] { + // TODO prune these from caches + continue MsgLoop + } else if msg.info.Sequence > lowestSeq[e] && !foundFirst { + switch e { + case chantypes.EventTypeRecvPacket: + dst.log.Debug("Not yet ready to relay this recv sequence", + zap.String("channel_id", msg.info.DestChannel), + zap.String("port_id", msg.info.DestPort), + zap.Uint64("expected", lowestSeq[e]), + zap.Uint64("actual", msg.info.Sequence), + ) + case chantypes.EventTypeAcknowledgePacket: + src.log.Debug("Not yet ready to relay this ack sequence", + zap.String("channel_id", msg.info.SourceChannel), + zap.String("port_id", msg.info.SourcePort), + zap.Uint64("expected", lowestSeq[e]), + zap.Uint64("actual", msg.info.Sequence), + ) + } + + break MsgLoop + } } switch e { case chantypes.EventTypeRecvPacket: + if len(dstMsgs) > 0 && dstMsgs[len(dstMsgs)-1].eventType == e && dstMsgs[len(dstMsgs)-1].info.Sequence != msg.info.Sequence-1 { + dst.log.Debug("Skipping non-consecutive packet(s)", + zap.String("event_type", e), + zap.String("channel_id", msg.info.DestChannel), + zap.String("port_id", msg.info.DestChannel), + zap.Uint64("seq", msg.info.Sequence), + zap.Uint64("prior_seq", dstMsgs[len(dstMsgs)-1].info.Sequence), + ) + break MsgLoop + } if uint64(len(dstMsgs)) <= pp.maxMsgs && dst.shouldSendPacketMessage(msg, src) { + dst.log.Debug("Appending packet", + zap.String("event_type", e), + zap.String("channel_id", msg.info.DestChannel), + zap.String("port_id", msg.info.DestChannel), + zap.Uint64("seq", msg.info.Sequence), + ) dstMsgs = append(dstMsgs, msg) + if e == chantypes.EventTypeRecvPacket && msg.info.Sequence == lowestSeq[e] { + foundFirst = true + } } default: + if len(srcMsgs) > 0 && srcMsgs[len(srcMsgs)-1].eventType == e && srcMsgs[len(srcMsgs)-1].info.Sequence != msg.info.Sequence-1 { + src.log.Debug("Skipping non-consecutive packet(s)", + zap.String("event_type", e), + zap.String("channel_id", msg.info.SourceChannel), + zap.String("port_id", msg.info.SourcePort), + zap.Uint64("seq", msg.info.Sequence), + zap.Uint64("prior_seq", srcMsgs[len(srcMsgs)-1].info.Sequence), + ) + break MsgLoop + } + if uint64(len(srcMsgs)) <= pp.maxMsgs && src.shouldSendPacketMessage(msg, dst) { + src.log.Debug("Appending packet", + zap.String("event_type", e), + zap.String("channel_id", msg.info.SourceChannel), + zap.String("port_id", msg.info.SourcePort), + zap.Uint64("seq", msg.info.Sequence), + ) srcMsgs = append(srcMsgs, msg) + if e == chantypes.EventTypeAcknowledgePacket && msg.info.Sequence == lowestSeq[e] { + foundFirst = true + } } } } @@ -789,13 +860,13 @@ func (pp *PathProcessor) queuePreInitMessages(cancel func()) { return } - for k, open := range pp.pathEnd1.channelStateCache { + for k, cs := range pp.pathEnd1.channelStateCache { if k.ChannelID == m.SrcChannelID && k.PortID == m.SrcPortID && k.CounterpartyChannelID != "" && k.CounterpartyPortID != "" { - if open { + if cs.Open { // channel is still open on pathEnd1 break } - if counterpartyOpen, ok := pp.pathEnd2.channelStateCache[k.Counterparty()]; ok && !counterpartyOpen { + if counterpartyState, ok := pp.pathEnd2.channelStateCache[k.Counterparty()]; ok && !counterpartyState.Open { pp.log.Info("Channel already closed on both sides") cancel() return @@ -815,13 +886,13 @@ func (pp *PathProcessor) queuePreInitMessages(cancel func()) { } } - for k, open := range pp.pathEnd2.channelStateCache { + for k, cs := range pp.pathEnd2.channelStateCache { if k.CounterpartyChannelID == m.SrcChannelID && k.CounterpartyPortID == m.SrcPortID && k.ChannelID != "" && k.PortID != "" { - if open { + if cs.Open { // channel is still open on pathEnd2 break } - if counterpartyChanState, ok := pp.pathEnd1.channelStateCache[k.Counterparty()]; ok && !counterpartyChanState { + if counterpartyChanState, ok := pp.pathEnd1.channelStateCache[k.Counterparty()]; ok && !counterpartyChanState.Open { pp.log.Info("Channel already closed on both sides") cancel() return @@ -1128,7 +1199,13 @@ func queryPacketCommitments( } } -// queuePendingRecvAndAcks returns whether flush can be considered complete (none skipped). +// skippedPackets is used to track the number of packets skipped during a flush. +type skippedPackets struct { + Recv uint64 + Ack uint64 +} + +// queuePendingRecvAndAcks returns the number of packets skipped during a flush (nil if none). func (pp *PathProcessor) queuePendingRecvAndAcks( ctx context.Context, src, dst *pathEndRuntime, @@ -1138,32 +1215,36 @@ func (pp *PathProcessor) queuePendingRecvAndAcks( dstCache ChannelPacketMessagesCache, srcMu sync.Locker, dstMu sync.Locker, -) (bool, error) { +) (*skippedPackets, error) { if len(seqs) == 0 { src.log.Debug("Nothing to flush", zap.String("channel", k.ChannelID), zap.String("port", k.PortID)) - return true, nil + return nil, nil } dstChan, dstPort := k.CounterpartyChannelID, k.CounterpartyPortID unrecv, err := dst.chainProvider.QueryUnreceivedPackets(ctx, dst.latestBlock.Height, dstChan, dstPort, seqs) if err != nil { - return false, err + return nil, err } dstHeight := int64(dst.latestBlock.Height) + var order chantypes.Order + if len(unrecv) > 0 { channel, err := dst.chainProvider.QueryChannel(ctx, dstHeight, dstChan, dstPort) if err != nil { - return false, err + return nil, err } + order = channel.Channel.Ordering + if channel.Channel.Ordering == chantypes.ORDERED { nextSeqRecv, err := dst.chainProvider.QueryNextSeqRecv(ctx, dstHeight, dstChan, dstPort) if err != nil { - return false, err + return nil, err } var newUnrecv []uint64 @@ -1184,7 +1265,7 @@ func (pp *PathProcessor) queuePendingRecvAndAcks( var eg errgroup.Group - skipped := false + var skipped *skippedPackets for i, seq := range unrecv { srcMu.Lock() @@ -1193,8 +1274,11 @@ func (pp *PathProcessor) queuePendingRecvAndAcks( } srcMu.Unlock() - if i >= maxPacketsPerFlush { - skipped = true + if i >= int(pp.maxMsgs) { + if skipped == nil { + skipped = new(skippedPackets) + } + skipped.Recv = uint64(len(unrecv) - i) break } @@ -1211,6 +1295,7 @@ func (pp *PathProcessor) queuePendingRecvAndAcks( if err != nil { return err } + sendPacket.ChannelOrder = order.String() srcMu.Lock() srcCache.Cache(chantypes.EventTypeSendPacket, k, seq, sendPacket) srcMu.Unlock() @@ -1228,7 +1313,7 @@ func (pp *PathProcessor) queuePendingRecvAndAcks( } if err := eg.Wait(); err != nil { - return false, err + return skipped, err } if len(unrecv) > 0 { @@ -1266,8 +1351,11 @@ SeqLoop: } dstMu.Unlock() - if i >= maxPacketsPerFlush { - skipped = true + if i >= int(pp.maxMsgs) { + if skipped == nil { + skipped = new(skippedPackets) + } + skipped.Ack = uint64(len(unacked) - i) break } @@ -1286,6 +1374,7 @@ SeqLoop: } ck := k.Counterparty() + recvPacket.ChannelOrder = order.String() dstMu.Lock() dstCache.Cache(chantypes.EventTypeRecvPacket, ck, seq, recvPacket) dstCache.Cache(chantypes.EventTypeWriteAck, ck, seq, recvPacket) @@ -1296,7 +1385,7 @@ SeqLoop: } if err := eg.Wait(); err != nil { - return false, err + return skipped, err } if len(unacked) > 0 { @@ -1313,7 +1402,7 @@ SeqLoop: ) } - return !skipped, nil + return skipped, nil } // flush runs queries to relay any pending messages which may have been @@ -1331,8 +1420,8 @@ func (pp *PathProcessor) flush(ctx context.Context) error { // Query remaining packet commitments on both chains var eg errgroup.Group - for k, open := range pp.pathEnd1.channelStateCache { - if !open { + for k, cs := range pp.pathEnd1.channelStateCache { + if !cs.Open { continue } if !pp.pathEnd1.info.ShouldRelayChannel(ChainChannelKey{ @@ -1344,8 +1433,8 @@ func (pp *PathProcessor) flush(ctx context.Context) error { } eg.Go(queryPacketCommitments(ctx, pp.pathEnd1, k, commitments1, &commitments1Mu)) } - for k, open := range pp.pathEnd2.channelStateCache { - if !open { + for k, cs := range pp.pathEnd2.channelStateCache { + if !cs.Open { continue } if !pp.pathEnd2.info.ShouldRelayChannel(ChainChannelKey{ @@ -1366,17 +1455,20 @@ func (pp *PathProcessor) flush(ctx context.Context) error { // 1. Packet commitment is on source, but MsgRecvPacket has not yet been relayed to destination // 2. Packet commitment is on source, and MsgRecvPacket has been relayed to destination, but MsgAcknowledgement has not been written to source to clear the packet commitment. // Based on above conditions, enqueue MsgRecvPacket and MsgAcknowledgement messages - skipped := false + skipped := make(map[string]map[ChannelKey]skippedPackets) for k, seqs := range commitments1 { k := k seqs := seqs eg.Go(func() error { - done, err := pp.queuePendingRecvAndAcks(ctx, pp.pathEnd1, pp.pathEnd2, k, seqs, pathEnd1Cache.PacketFlow, pathEnd2Cache.PacketFlow, &pathEnd1CacheMu, &pathEnd2CacheMu) + s, err := pp.queuePendingRecvAndAcks(ctx, pp.pathEnd1, pp.pathEnd2, k, seqs, pathEnd1Cache.PacketFlow, pathEnd2Cache.PacketFlow, &pathEnd1CacheMu, &pathEnd2CacheMu) if err != nil { return err } - if !done { - skipped = true + if s != nil { + if _, ok := skipped[pp.pathEnd1.info.ChainID]; !ok { + skipped[pp.pathEnd1.info.ChainID] = make(map[ChannelKey]skippedPackets) + } + skipped[pp.pathEnd1.info.ChainID][k] = *s } return nil }) @@ -1386,12 +1478,15 @@ func (pp *PathProcessor) flush(ctx context.Context) error { k := k seqs := seqs eg.Go(func() error { - done, err := pp.queuePendingRecvAndAcks(ctx, pp.pathEnd2, pp.pathEnd1, k, seqs, pathEnd2Cache.PacketFlow, pathEnd1Cache.PacketFlow, &pathEnd2CacheMu, &pathEnd1CacheMu) + s, err := pp.queuePendingRecvAndAcks(ctx, pp.pathEnd2, pp.pathEnd1, k, seqs, pathEnd2Cache.PacketFlow, pathEnd1Cache.PacketFlow, &pathEnd2CacheMu, &pathEnd1CacheMu) if err != nil { return err } - if !done { - skipped = true + if s != nil { + if _, ok := skipped[pp.pathEnd2.info.ChainID]; !ok { + skipped[pp.pathEnd2.info.ChainID] = make(map[ChannelKey]skippedPackets) + } + skipped[pp.pathEnd2.info.ChainID][k] = *s } return nil }) @@ -1404,8 +1499,20 @@ func (pp *PathProcessor) flush(ctx context.Context) error { pp.pathEnd1.mergeMessageCache(pathEnd1Cache, pp.pathEnd2.info.ChainID, pp.pathEnd2.inSync) pp.pathEnd2.mergeMessageCache(pathEnd2Cache, pp.pathEnd1.info.ChainID, pp.pathEnd1.inSync) - if skipped { - return fmt.Errorf("flush was successful, but more packet sequences are still pending") + if len(skipped) > 0 { + skippedPacketsString := "" + for chainID, chainSkipped := range skipped { + for channelKey, skipped := range chainSkipped { + skippedPacketsString += fmt.Sprintf( + "{ %s %s %s recv: %d, ack: %d } ", + chainID, channelKey.ChannelID, channelKey.PortID, skipped.Recv, skipped.Ack, + ) + } + } + return fmt.Errorf( + "flush was successful, but packets are still pending. %s", + skippedPacketsString, + ) } return nil @@ -1418,7 +1525,7 @@ func (pp *PathProcessor) shouldTerminateForFlushComplete() bool { return false } for k, packetMessagesCache := range pp.pathEnd1.messageCache.PacketFlow { - if open, ok := pp.pathEnd1.channelStateCache[k]; !ok || !open { + if cs, ok := pp.pathEnd1.channelStateCache[k]; !ok || !cs.Open { continue } for _, c := range packetMessagesCache { @@ -1442,7 +1549,7 @@ func (pp *PathProcessor) shouldTerminateForFlushComplete() bool { } } for k, packetMessagesCache := range pp.pathEnd2.messageCache.PacketFlow { - if open, ok := pp.pathEnd1.channelStateCache[k]; !ok || !open { + if cs, ok := pp.pathEnd1.channelStateCache[k]; !ok || !cs.Open { continue } for _, c := range packetMessagesCache { diff --git a/relayer/processor/types.go b/relayer/processor/types.go index d01e73205..a5db23c9b 100644 --- a/relayer/processor/types.go +++ b/relayer/processor/types.go @@ -159,6 +159,12 @@ type ChannelKey struct { CounterpartyPortID string } +// ChannelState is used for caching channel open state and a lookup for the channel order. +type ChannelState struct { + Order chantypes.Order + Open bool +} + // Counterparty flips a ChannelKey for the perspective of the counterparty chain func (k ChannelKey) Counterparty() ChannelKey { return ChannelKey{ @@ -250,7 +256,23 @@ func (k ConnectionKey) MarshalLogObject(enc zapcore.ObjectEncoder) error { } // ChannelStateCache maintains channel open state for multiple channels. -type ChannelStateCache map[ChannelKey]bool +type ChannelStateCache map[ChannelKey]ChannelState + +// SetOpen sets the open state for a channel, and also the order if it is not NONE. +func (c ChannelStateCache) SetOpen(k ChannelKey, open bool, order chantypes.Order) { + if s, ok := c[k]; ok { + s.Open = open + if order != chantypes.NONE { + s.Order = order + } + c[k] = s + return + } + c[k] = ChannelState{ + Open: open, + Order: order, + } +} // FilterForClient returns a filtered copy of channels on top of an underlying clientID so it can be used by other goroutines. func (c ChannelStateCache) FilterForClient(clientID string, channelConnections map[string]string, connectionClients map[string]string) ChannelStateCache { diff --git a/relayer/provider/provider.go b/relayer/provider/provider.go index a1c150e0a..34cee434d 100644 --- a/relayer/provider/provider.go +++ b/relayer/provider/provider.go @@ -457,6 +457,7 @@ type QueryProvider interface { QueryUnreceivedPackets(ctx context.Context, height uint64, channelid, portid string, seqs []uint64) ([]uint64, error) QueryUnreceivedAcknowledgements(ctx context.Context, height uint64, channelid, portid string, seqs []uint64) ([]uint64, error) QueryNextSeqRecv(ctx context.Context, height int64, channelid, portid string) (recvRes *chantypes.QueryNextSequenceReceiveResponse, err error) + QueryNextSeqAck(ctx context.Context, height int64, channelid, portid string) (recvRes *chantypes.QueryNextSequenceReceiveResponse, err error) QueryPacketCommitment(ctx context.Context, height int64, channelid, portid string, seq uint64) (comRes *chantypes.QueryPacketCommitmentResponse, err error) QueryPacketAcknowledgement(ctx context.Context, height int64, channelid, portid string, seq uint64) (ackRes *chantypes.QueryPacketAcknowledgementResponse, err error) QueryPacketReceipt(ctx context.Context, height int64, channelid, portid string, seq uint64) (recRes *chantypes.QueryPacketReceiptResponse, err error) From d878a55acb1999ef81341dd7ce854e6d4a08945d Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Mon, 31 Jul 2023 14:20:08 -0700 Subject: [PATCH 12/37] chore: update penumbra protos to v0.57.0 (#1249) Version 0.57.0 of Penumbra was released on 2023-07-26 [0]. This commit pulls in the latest proto defs from BSR. [0] https://github.com/penumbra-zone/penumbra/releases/tag/v0.57.0 Co-authored-by: Conor Schaefer Co-authored-by: Justin Tieri <37750742+jtieri@users.noreply.github.com> --- .../penumbra/core/ibc/v1alpha1/ibc.pb.go | 199 +++---- .../chains/penumbra/view/v1alpha1/view.pb.go | 493 +++++++++--------- 2 files changed, 332 insertions(+), 360 deletions(-) diff --git a/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go b/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go index 9f95c7e73..cf5d9ad90 100644 --- a/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go +++ b/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go @@ -168,27 +168,25 @@ func (m *FungibleTokenPacketData) GetReceiver() string { } type Ics20Withdrawal struct { - // the chain ID of the destination chain for this ICS20 transfer - DestinationChainId string `protobuf:"bytes,1,opt,name=destination_chain_id,json=destinationChainId,proto3" json:"destination_chain_id,omitempty"` - Amount *v1alpha1.Amount `protobuf:"bytes,2,opt,name=amount,proto3" json:"amount,omitempty"` - Denom *v1alpha1.Denom `protobuf:"bytes,3,opt,name=denom,proto3" json:"denom,omitempty"` + Amount *v1alpha1.Amount `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` + Denom *v1alpha1.Denom `protobuf:"bytes,2,opt,name=denom,proto3" json:"denom,omitempty"` // the address on the destination chain to send the transfer to - DestinationChainAddress string `protobuf:"bytes,4,opt,name=destination_chain_address,json=destinationChainAddress,proto3" json:"destination_chain_address,omitempty"` + DestinationChainAddress string `protobuf:"bytes,3,opt,name=destination_chain_address,json=destinationChainAddress,proto3" json:"destination_chain_address,omitempty"` // a "sender" penumbra address to use to return funds from this withdrawal. // this should be an ephemeral address - ReturnAddress *v1alpha1.Address `protobuf:"bytes,5,opt,name=return_address,json=returnAddress,proto3" json:"return_address,omitempty"` + ReturnAddress *v1alpha1.Address `protobuf:"bytes,4,opt,name=return_address,json=returnAddress,proto3" json:"return_address,omitempty"` // the height (on Penumbra) at which this transfer expires (and funds are sent // back to the sender address?). NOTE: if funds are sent back to the sender, // we MUST verify a nonexistence proof before accepting the timeout, to // prevent relayer censorship attacks. The core IBC implementation does this // in its handling of validation of timeouts. - TimeoutHeight uint64 `protobuf:"varint,6,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height,omitempty"` + TimeoutHeight uint64 `protobuf:"varint,5,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height,omitempty"` // the timestamp at which this transfer expires. - TimeoutTime uint64 `protobuf:"varint,7,opt,name=timeout_time,json=timeoutTime,proto3" json:"timeout_time,omitempty"` + TimeoutTime uint64 `protobuf:"varint,6,opt,name=timeout_time,json=timeoutTime,proto3" json:"timeout_time,omitempty"` // the source port that identifies the channel used for the withdrawal - SourcePort string `protobuf:"bytes,8,opt,name=source_port,json=sourcePort,proto3" json:"source_port,omitempty"` + SourcePort string `protobuf:"bytes,7,opt,name=source_port,json=sourcePort,proto3" json:"source_port,omitempty"` // the source channel used for the withdrawal - SourceChannel string `protobuf:"bytes,9,opt,name=source_channel,json=sourceChannel,proto3" json:"source_channel,omitempty"` + SourceChannel string `protobuf:"bytes,8,opt,name=source_channel,json=sourceChannel,proto3" json:"source_channel,omitempty"` } func (m *Ics20Withdrawal) Reset() { *m = Ics20Withdrawal{} } @@ -224,13 +222,6 @@ func (m *Ics20Withdrawal) XXX_DiscardUnknown() { var xxx_messageInfo_Ics20Withdrawal proto.InternalMessageInfo -func (m *Ics20Withdrawal) GetDestinationChainId() string { - if m != nil { - return m.DestinationChainId - } - return "" -} - func (m *Ics20Withdrawal) GetAmount() *v1alpha1.Amount { if m != nil { return m.Amount @@ -592,58 +583,57 @@ func init() { } var fileDescriptor_6509740287584c65 = []byte{ - // 803 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x41, 0x8f, 0x1b, 0x35, - 0x14, 0xde, 0x49, 0xb6, 0xbb, 0x1b, 0xa7, 0x49, 0xe8, 0x68, 0x45, 0xa7, 0x41, 0xa4, 0x61, 0xd4, - 0x56, 0x5b, 0x24, 0x66, 0x9a, 0x14, 0x84, 0x34, 0xa8, 0x12, 0xd9, 0xa9, 0x28, 0x73, 0xa8, 0x88, - 0x86, 0xaa, 0x48, 0x28, 0x52, 0xe4, 0xf1, 0xb8, 0x89, 0xd5, 0x8c, 0x1d, 0xd9, 0x9e, 0xac, 0x22, - 0xfe, 0x04, 0x7f, 0x01, 0x8e, 0x9c, 0xf9, 0x11, 0x88, 0x53, 0x8f, 0x48, 0x5c, 0x50, 0xf6, 0xc6, - 0xaf, 0x40, 0xb6, 0xc7, 0x49, 0x03, 0x6c, 0xf7, 0x14, 0xbf, 0xef, 0xfb, 0xde, 0xcb, 0xf7, 0x9e, - 0xdf, 0x18, 0xdc, 0x5b, 0x62, 0x5a, 0x16, 0x19, 0x87, 0x21, 0x62, 0x1c, 0x87, 0x24, 0x43, 0xe1, - 0x6a, 0x00, 0x17, 0xcb, 0x39, 0x1c, 0xa8, 0x20, 0x58, 0x72, 0x26, 0x99, 0xdb, 0xb5, 0xaa, 0x40, - 0xa9, 0x02, 0x45, 0x58, 0x55, 0xf7, 0xe3, 0xfd, 0x0a, 0x88, 0xaf, 0x97, 0x92, 0xed, 0x8a, 0x98, - 0xd8, 0xd4, 0xe9, 0xde, 0x55, 0xf5, 0x8d, 0x6c, 0x41, 0x30, 0x95, 0xe1, 0x6a, 0x50, 0x9d, 0x2a, - 0xc1, 0x9d, 0x19, 0x63, 0xb3, 0x05, 0x0e, 0x75, 0x94, 0x95, 0xaf, 0x42, 0x48, 0xd7, 0x86, 0xf2, - 0xbf, 0x04, 0x8d, 0x24, 0x43, 0x23, 0x24, 0x09, 0xa3, 0xee, 0x63, 0x00, 0x38, 0xbc, 0x98, 0x42, - 0x1d, 0x79, 0x4e, 0xdf, 0x39, 0x6b, 0x0e, 0x4f, 0x03, 0x93, 0x1c, 0xd8, 0xe4, 0x60, 0x44, 0xd7, - 0x69, 0x83, 0xc3, 0x0b, 0x93, 0xe4, 0xff, 0x00, 0x6e, 0x7f, 0x55, 0xd2, 0x19, 0xc9, 0x16, 0xf8, - 0x05, 0x7b, 0x8d, 0xe9, 0x18, 0xa2, 0xd7, 0x58, 0x3e, 0x85, 0x12, 0xba, 0xa7, 0xe0, 0x46, 0x8e, - 0x29, 0x2b, 0x74, 0xa9, 0x46, 0x6a, 0x02, 0xf7, 0x7d, 0x70, 0x04, 0x0b, 0x56, 0x52, 0xe9, 0xd5, - 0x34, 0x5c, 0x45, 0x0a, 0x17, 0x98, 0xe6, 0x98, 0x7b, 0x75, 0x83, 0x9b, 0xc8, 0xed, 0x82, 0x13, - 0x8e, 0x11, 0x26, 0x2b, 0xcc, 0xbd, 0x43, 0xcd, 0x6c, 0x63, 0xff, 0xcf, 0x3a, 0xe8, 0x24, 0x48, - 0x0c, 0x1f, 0x7d, 0x47, 0xe4, 0x3c, 0xe7, 0xf0, 0x02, 0x2e, 0xdc, 0x47, 0xe0, 0x34, 0xc7, 0x42, - 0x12, 0x0a, 0x95, 0xbf, 0x29, 0x9a, 0x43, 0x42, 0xa7, 0x24, 0xaf, 0x4c, 0xb8, 0x6f, 0x71, 0xb1, - 0xa2, 0x92, 0xdc, 0x7d, 0xb2, 0xe7, 0xa8, 0x39, 0xbc, 0x1f, 0xec, 0xdf, 0x4c, 0x35, 0x6d, 0x3b, - 0xfd, 0x60, 0xa4, 0xc5, 0x5b, 0xe3, 0x91, 0x6d, 0xb3, 0xae, 0xb3, 0xef, 0x5d, 0x93, 0xfd, 0x54, - 0x69, 0xed, 0x30, 0x22, 0x70, 0xe7, 0xbf, 0x66, 0x61, 0x9e, 0x73, 0x2c, 0x44, 0xd5, 0xed, 0xed, - 0x7f, 0x3b, 0x1e, 0x19, 0xda, 0x7d, 0x0e, 0xda, 0x1c, 0xcb, 0x92, 0xef, 0x12, 0x6e, 0x68, 0x03, - 0x0f, 0xae, 0xb3, 0x6f, 0xd4, 0x69, 0xcb, 0x64, 0xdb, 0x72, 0xf7, 0x41, 0x5b, 0x92, 0x02, 0xb3, - 0x52, 0x4e, 0xe7, 0x98, 0xcc, 0xe6, 0xd2, 0x3b, 0xea, 0x3b, 0x67, 0x87, 0x69, 0xab, 0x42, 0xbf, - 0xd6, 0xa0, 0xfb, 0x11, 0xb8, 0x69, 0x65, 0xea, 0xd7, 0x3b, 0xd6, 0xa2, 0x66, 0x85, 0xbd, 0x20, - 0x05, 0x76, 0xef, 0x82, 0xa6, 0x60, 0x25, 0x47, 0x78, 0xba, 0x64, 0x5c, 0x7a, 0x27, 0xba, 0x0d, - 0x60, 0xa0, 0x31, 0xe3, 0x52, 0xfd, 0x55, 0x25, 0x40, 0x73, 0x48, 0x29, 0x5e, 0x78, 0x0d, 0xad, - 0x69, 0x19, 0x34, 0x36, 0xa0, 0xff, 0xab, 0x03, 0x40, 0xac, 0x17, 0x59, 0xaf, 0xd3, 0x07, 0xa0, - 0x61, 0xd6, 0x7a, 0x77, 0x9b, 0x27, 0x06, 0x48, 0x72, 0xf7, 0x73, 0x70, 0xb3, 0x22, 0x85, 0x84, - 0x12, 0x57, 0x37, 0xf9, 0xff, 0xdb, 0xdb, 0x34, 0xca, 0x6f, 0x95, 0x50, 0x79, 0x59, 0x72, 0x86, - 0xb0, 0x10, 0x38, 0x37, 0x1d, 0x99, 0xf5, 0x6b, 0x6d, 0x51, 0xdd, 0xd3, 0x43, 0xf0, 0xde, 0x4e, - 0x56, 0xcd, 0xe7, 0x50, 0xb7, 0xde, 0xd9, 0xe2, 0x66, 0x42, 0xfe, 0x43, 0xd0, 0x32, 0xae, 0x63, - 0xb5, 0x1e, 0x98, 0xbb, 0x1e, 0x38, 0x46, 0xe6, 0xa8, 0x6d, 0x1f, 0xa6, 0x36, 0xf4, 0xbf, 0x01, - 0xed, 0x98, 0x51, 0x81, 0xa9, 0x28, 0x85, 0xb1, 0xf3, 0x04, 0x74, 0x90, 0x45, 0xaa, 0x56, 0xde, - 0xf5, 0x21, 0xb6, 0xd1, 0x5e, 0xba, 0xff, 0x0c, 0x74, 0x5e, 0x62, 0x4e, 0x5e, 0x11, 0xeb, 0x46, - 0xb8, 0x9f, 0x82, 0x63, 0xe3, 0x57, 0x78, 0x4e, 0xbf, 0x7e, 0xd6, 0x1c, 0x76, 0xf5, 0x53, 0x63, - 0x56, 0xc3, 0x3c, 0x13, 0xab, 0x41, 0x60, 0xd4, 0xa9, 0x95, 0xfa, 0x9f, 0x80, 0x5b, 0x31, 0xa3, - 0x14, 0xeb, 0x8f, 0xfc, 0xfa, 0x46, 0x3e, 0x03, 0xb7, 0x6c, 0xcf, 0x36, 0x49, 0xb8, 0x7d, 0xd0, - 0x44, 0xbb, 0x50, 0xff, 0x7b, 0x23, 0x7d, 0x1b, 0x3a, 0xff, 0xa9, 0xf6, 0xdb, 0xa6, 0xe7, 0xbc, - 0xd9, 0xf4, 0x9c, 0xbf, 0x36, 0x3d, 0xe7, 0xc7, 0xcb, 0xde, 0xc1, 0x9b, 0xcb, 0xde, 0xc1, 0x1f, - 0x97, 0xbd, 0x03, 0xd0, 0x43, 0xac, 0x08, 0xae, 0x7e, 0x21, 0xcf, 0x4f, 0x92, 0x0c, 0x8d, 0xd5, - 0x28, 0xc6, 0xce, 0xf7, 0xe9, 0x8c, 0xc8, 0x79, 0x99, 0x05, 0x88, 0x15, 0x21, 0x62, 0xa2, 0x60, - 0x22, 0xe4, 0x78, 0x01, 0xd7, 0x98, 0x87, 0xab, 0xe1, 0xf6, 0xa8, 0x3f, 0x2e, 0x11, 0x5e, 0xfd, - 0x36, 0x7f, 0x41, 0x32, 0x64, 0xcf, 0x3f, 0xd7, 0xea, 0xe3, 0x38, 0xf9, 0xa5, 0xd6, 0x1d, 0x5b, - 0x0b, 0xb1, 0xb2, 0x90, 0x64, 0x28, 0x78, 0x59, 0x49, 0x7e, 0xdf, 0x91, 0x13, 0x45, 0x4e, 0x92, - 0x0c, 0x4d, 0x2c, 0xb9, 0xa9, 0x3d, 0xb8, 0x9a, 0x9c, 0x3c, 0x1b, 0x9f, 0x3f, 0xc7, 0x12, 0xe6, - 0x50, 0xc2, 0xbf, 0x6b, 0x1f, 0x5a, 0x61, 0x14, 0x29, 0x65, 0x14, 0x25, 0x19, 0x8a, 0x22, 0xab, - 0xcd, 0x8e, 0xf4, 0x85, 0x3f, 0xfe, 0x27, 0x00, 0x00, 0xff, 0xff, 0x7d, 0x96, 0x37, 0xa5, 0x55, - 0x06, 0x00, 0x00, + // 791 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0x41, 0x8f, 0x1b, 0x35, + 0x14, 0xc7, 0x77, 0x92, 0x74, 0x37, 0x71, 0x9a, 0x84, 0x8e, 0x2a, 0x3a, 0x0d, 0x22, 0x0d, 0xa3, + 0xb6, 0xda, 0x22, 0x31, 0x43, 0x52, 0x10, 0xd2, 0xa0, 0x4a, 0x64, 0xa7, 0xa2, 0xcc, 0xa1, 0x22, + 0x1a, 0xaa, 0x22, 0xa1, 0x48, 0x91, 0xc7, 0xe3, 0x26, 0x56, 0x33, 0x76, 0x64, 0x7b, 0xb2, 0x8a, + 0xf8, 0x12, 0x7c, 0x05, 0xb8, 0xc1, 0x99, 0x0f, 0x81, 0x38, 0xf5, 0xc8, 0x11, 0x65, 0x6f, 0x7c, + 0x0a, 0x64, 0x7b, 0x9c, 0xec, 0x4a, 0x2c, 0x7b, 0x8a, 0xdf, 0xff, 0xfd, 0xde, 0xcb, 0x7b, 0x6f, + 0x9e, 0x0d, 0x1e, 0xae, 0x31, 0x2d, 0x8b, 0x8c, 0xc3, 0x10, 0x31, 0x8e, 0x43, 0x92, 0xa1, 0x70, + 0x33, 0x82, 0xab, 0xf5, 0x12, 0x8e, 0x94, 0x11, 0xac, 0x39, 0x93, 0xcc, 0xed, 0x5b, 0x2a, 0x50, + 0x54, 0xa0, 0x1c, 0x96, 0xea, 0x7f, 0x7c, 0x35, 0x03, 0xe2, 0xdb, 0xb5, 0x64, 0x87, 0x24, 0xc6, + 0x36, 0x79, 0xfa, 0x0f, 0x54, 0x7e, 0x83, 0xad, 0x08, 0xa6, 0x32, 0xdc, 0x8c, 0xaa, 0x53, 0x05, + 0xdc, 0x5f, 0x30, 0xb6, 0x58, 0xe1, 0x50, 0x5b, 0x59, 0xf9, 0x26, 0x84, 0x74, 0x6b, 0x5c, 0xfe, + 0x57, 0xa0, 0x95, 0x64, 0x68, 0x82, 0x24, 0x61, 0xd4, 0x7d, 0x0a, 0x00, 0x87, 0xe7, 0x73, 0xa8, + 0x2d, 0xcf, 0x19, 0x3a, 0xa7, 0xed, 0xf1, 0xdd, 0xc0, 0x04, 0x07, 0x36, 0x38, 0x98, 0xd0, 0x6d, + 0xda, 0xe2, 0xf0, 0xdc, 0x04, 0xf9, 0x3f, 0x82, 0x7b, 0x5f, 0x97, 0x74, 0x41, 0xb2, 0x15, 0x7e, + 0xc5, 0xde, 0x62, 0x3a, 0x85, 0xe8, 0x2d, 0x96, 0xcf, 0xa1, 0x84, 0xee, 0x5d, 0x70, 0x2b, 0xc7, + 0x94, 0x15, 0x3a, 0x55, 0x2b, 0x35, 0x86, 0xfb, 0x3e, 0x38, 0x86, 0x05, 0x2b, 0xa9, 0xf4, 0x6a, + 0x5a, 0xae, 0x2c, 0xa5, 0x0b, 0x4c, 0x73, 0xcc, 0xbd, 0xba, 0xd1, 0x8d, 0xe5, 0xf6, 0x41, 0x93, + 0x63, 0x84, 0xc9, 0x06, 0x73, 0xaf, 0xa1, 0x3d, 0x7b, 0xdb, 0xff, 0xb5, 0x0e, 0x7a, 0x09, 0x12, + 0xe3, 0x4f, 0xbf, 0x27, 0x72, 0x99, 0x73, 0x78, 0x0e, 0x57, 0xee, 0xb3, 0x7d, 0x7e, 0xd3, 0xc1, + 0xa3, 0xe0, 0xea, 0x9c, 0xab, 0xd9, 0xd9, 0x59, 0x06, 0x13, 0x0d, 0xef, 0xcb, 0x88, 0x6c, 0xd1, + 0x35, 0x1d, 0xfd, 0xf0, 0x86, 0xe8, 0xe7, 0x8a, 0xb5, 0xad, 0x45, 0xe0, 0x7e, 0x8e, 0x85, 0x24, + 0x14, 0xaa, 0xd1, 0xcc, 0xd1, 0x12, 0x12, 0x3a, 0x87, 0x79, 0xce, 0xb1, 0x10, 0x55, 0x57, 0xf7, + 0x2e, 0x01, 0xb1, 0xf2, 0x4f, 0x8c, 0xdb, 0x7d, 0x09, 0xba, 0x1c, 0xcb, 0x92, 0x1f, 0x02, 0x1a, + 0xba, 0x80, 0xc7, 0x37, 0x95, 0x6f, 0xe8, 0xb4, 0x63, 0xa2, 0x6d, 0xba, 0x47, 0xa0, 0x2b, 0x49, + 0x81, 0x59, 0x29, 0xe7, 0x4b, 0x4c, 0x16, 0x4b, 0xe9, 0xdd, 0x1a, 0x3a, 0xa7, 0x8d, 0xb4, 0x53, + 0xa9, 0xdf, 0x68, 0xd1, 0xfd, 0x08, 0xdc, 0xb6, 0x98, 0xfa, 0xf5, 0x8e, 0x35, 0xd4, 0xae, 0xb4, + 0x57, 0xa4, 0xc0, 0xee, 0x03, 0xd0, 0x16, 0xac, 0xe4, 0x08, 0xcf, 0xd7, 0x8c, 0x4b, 0xef, 0x44, + 0xb7, 0x01, 0x8c, 0x34, 0x65, 0x5c, 0xaa, 0xbf, 0xaa, 0x00, 0xb4, 0x84, 0x94, 0xe2, 0x95, 0xd7, + 0xd4, 0x4c, 0xc7, 0xa8, 0xb1, 0x11, 0xfd, 0xdf, 0x1d, 0x00, 0x62, 0xbd, 0x96, 0x7a, 0x39, 0x3e, + 0x00, 0x2d, 0xb3, 0xa4, 0x73, 0x92, 0x57, 0x0b, 0xd2, 0x34, 0x42, 0x92, 0xbb, 0x5f, 0x80, 0xdb, + 0x95, 0x53, 0x48, 0x28, 0x71, 0xf5, 0x2d, 0xfe, 0x7b, 0x17, 0xdb, 0x86, 0xfc, 0x4e, 0x81, 0xaa, + 0x96, 0x35, 0x67, 0x08, 0x0b, 0x81, 0x73, 0xd3, 0x91, 0x19, 0x7b, 0x67, 0xaf, 0xea, 0x9e, 0x9e, + 0x80, 0xf7, 0x0e, 0x58, 0x35, 0x9f, 0x86, 0x6e, 0xbd, 0xb7, 0xd7, 0xcd, 0x84, 0xfc, 0x27, 0xa0, + 0x63, 0xaa, 0x8e, 0xd5, 0x7a, 0x60, 0xee, 0x7a, 0xe0, 0x04, 0x99, 0xa3, 0x2e, 0xbb, 0x91, 0x5a, + 0xd3, 0xff, 0x16, 0x74, 0x63, 0x46, 0x05, 0xa6, 0xa2, 0x14, 0xa6, 0x9c, 0x67, 0xa0, 0x87, 0xac, + 0x52, 0xb5, 0xf2, 0x7f, 0xd7, 0xaa, 0x8b, 0xae, 0x84, 0xfb, 0x2f, 0x40, 0xef, 0x35, 0xe6, 0xe4, + 0x0d, 0xb1, 0xd5, 0x08, 0xf7, 0x33, 0x70, 0x62, 0xea, 0x15, 0x9e, 0x33, 0xac, 0x9f, 0xb6, 0xc7, + 0x7d, 0xfd, 0x70, 0x98, 0xd5, 0x30, 0x97, 0x7e, 0x33, 0x0a, 0x0c, 0x9d, 0x5a, 0xd4, 0xff, 0x04, + 0xdc, 0x89, 0x19, 0xa5, 0x58, 0x5f, 0xd9, 0x9b, 0x1b, 0xf9, 0x1c, 0xdc, 0xb1, 0x3d, 0xdb, 0x20, + 0xe1, 0x0e, 0x41, 0x1b, 0x1d, 0x4c, 0xfd, 0xef, 0xad, 0xf4, 0xb2, 0x74, 0xf6, 0x73, 0xed, 0x8f, + 0xdd, 0xc0, 0x79, 0xb7, 0x1b, 0x38, 0x7f, 0xef, 0x06, 0xce, 0x4f, 0x17, 0x83, 0xa3, 0x77, 0x17, + 0x83, 0xa3, 0xbf, 0x2e, 0x06, 0x47, 0x60, 0x80, 0x58, 0x11, 0x5c, 0xff, 0xde, 0x9d, 0x35, 0x93, + 0x0c, 0x4d, 0xd5, 0x28, 0xa6, 0xce, 0x0f, 0xe9, 0x82, 0xc8, 0x65, 0x99, 0x05, 0x88, 0x15, 0x21, + 0x62, 0xa2, 0x60, 0x22, 0xe4, 0x78, 0x05, 0xb7, 0x98, 0x87, 0x9b, 0xf1, 0xfe, 0xa8, 0x2f, 0x97, + 0x08, 0xaf, 0x7f, 0x69, 0xbf, 0x24, 0x19, 0xb2, 0xe7, 0x5f, 0x6a, 0xf5, 0x69, 0x9c, 0xfc, 0x56, + 0xeb, 0x4f, 0x6d, 0x09, 0xb1, 0x2a, 0x21, 0xc9, 0x50, 0xf0, 0xba, 0x42, 0xfe, 0x3c, 0x38, 0x67, + 0xca, 0x39, 0x4b, 0x32, 0x34, 0xb3, 0xce, 0x5d, 0xed, 0xf1, 0xf5, 0xce, 0xd9, 0x8b, 0xe9, 0xd9, + 0x4b, 0x2c, 0x61, 0x0e, 0x25, 0xfc, 0xa7, 0xf6, 0xa1, 0x05, 0xa3, 0x48, 0x91, 0x51, 0x94, 0x64, + 0x28, 0x8a, 0x2c, 0x9b, 0x1d, 0xeb, 0x0f, 0xfe, 0xf4, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xec, + 0xc7, 0x3e, 0x41, 0x23, 0x06, 0x00, 0x00, } func (m *IbcAction) Marshal() (dAtA []byte, err error) { @@ -757,24 +747,24 @@ func (m *Ics20Withdrawal) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.SourceChannel) i = encodeVarintIbc(dAtA, i, uint64(len(m.SourceChannel))) i-- - dAtA[i] = 0x4a + dAtA[i] = 0x42 } if len(m.SourcePort) > 0 { i -= len(m.SourcePort) copy(dAtA[i:], m.SourcePort) i = encodeVarintIbc(dAtA, i, uint64(len(m.SourcePort))) i-- - dAtA[i] = 0x42 + dAtA[i] = 0x3a } if m.TimeoutTime != 0 { i = encodeVarintIbc(dAtA, i, uint64(m.TimeoutTime)) i-- - dAtA[i] = 0x38 + dAtA[i] = 0x30 } if m.TimeoutHeight != 0 { i = encodeVarintIbc(dAtA, i, uint64(m.TimeoutHeight)) i-- - dAtA[i] = 0x30 + dAtA[i] = 0x28 } if m.ReturnAddress != nil { { @@ -786,14 +776,14 @@ func (m *Ics20Withdrawal) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintIbc(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x2a + dAtA[i] = 0x22 } if len(m.DestinationChainAddress) > 0 { i -= len(m.DestinationChainAddress) copy(dAtA[i:], m.DestinationChainAddress) i = encodeVarintIbc(dAtA, i, uint64(len(m.DestinationChainAddress))) i-- - dAtA[i] = 0x22 + dAtA[i] = 0x1a } if m.Denom != nil { { @@ -805,7 +795,7 @@ func (m *Ics20Withdrawal) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintIbc(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x1a + dAtA[i] = 0x12 } if m.Amount != nil { { @@ -817,13 +807,6 @@ func (m *Ics20Withdrawal) MarshalToSizedBuffer(dAtA []byte) (int, error) { i = encodeVarintIbc(dAtA, i, uint64(size)) } i-- - dAtA[i] = 0x12 - } - if len(m.DestinationChainId) > 0 { - i -= len(m.DestinationChainId) - copy(dAtA[i:], m.DestinationChainId) - i = encodeVarintIbc(dAtA, i, uint64(len(m.DestinationChainId))) - i-- dAtA[i] = 0xa } return len(dAtA) - i, nil @@ -1098,10 +1081,6 @@ func (m *Ics20Withdrawal) Size() (n int) { } var l int _ = l - l = len(m.DestinationChainId) - if l > 0 { - n += 1 + l + sovIbc(uint64(l)) - } if m.Amount != nil { l = m.Amount.Size() n += 1 + l + sovIbc(uint64(l)) @@ -1526,38 +1505,6 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { } switch fieldNum { case 1: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field DestinationChainId", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowIbc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthIbc - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthIbc - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.DestinationChainId = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Amount", wireType) } @@ -1593,7 +1540,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 3: + case 2: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Denom", wireType) } @@ -1629,7 +1576,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 4: + case 3: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field DestinationChainAddress", wireType) } @@ -1661,7 +1608,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { } m.DestinationChainAddress = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 5: + case 4: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field ReturnAddress", wireType) } @@ -1697,7 +1644,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex - case 6: + case 5: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field TimeoutHeight", wireType) } @@ -1716,7 +1663,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { break } } - case 7: + case 6: if wireType != 0 { return fmt.Errorf("proto: wrong wireType = %d for field TimeoutTime", wireType) } @@ -1735,7 +1682,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { break } } - case 8: + case 7: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SourcePort", wireType) } @@ -1767,7 +1714,7 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { } m.SourcePort = string(dAtA[iNdEx:postIndex]) iNdEx = postIndex - case 9: + case 8: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SourceChannel", wireType) } diff --git a/relayer/chains/penumbra/view/v1alpha1/view.pb.go b/relayer/chains/penumbra/view/v1alpha1/view.pb.go index aacce5f7e..603de4d9b 100644 --- a/relayer/chains/penumbra/view/v1alpha1/view.pb.go +++ b/relayer/chains/penumbra/view/v1alpha1/view.pb.go @@ -3374,7 +3374,7 @@ func (*OwnedPositionIdsRequest) XXX_OneofWrappers() []interface{} { } type OwnedPositionIdsResponse struct { - PositionIds []*v1alpha15.PositionId `protobuf:"bytes,1,rep,name=position_ids,json=positionIds,proto3" json:"position_ids,omitempty"` + PositionId *v1alpha15.PositionId `protobuf:"bytes,1,opt,name=position_id,json=positionId,proto3" json:"position_id,omitempty"` } func (m *OwnedPositionIdsResponse) Reset() { *m = OwnedPositionIdsResponse{} } @@ -3410,9 +3410,9 @@ func (m *OwnedPositionIdsResponse) XXX_DiscardUnknown() { var xxx_messageInfo_OwnedPositionIdsResponse proto.InternalMessageInfo -func (m *OwnedPositionIdsResponse) GetPositionIds() []*v1alpha15.PositionId { +func (m *OwnedPositionIdsResponse) GetPositionId() *v1alpha15.PositionId { if m != nil { - return m.PositionIds + return m.PositionId } return nil } @@ -3478,191 +3478,191 @@ func init() { proto.RegisterFile("penumbra/view/v1alpha1/view.proto", fileDescri var fileDescriptor_0aa947b204e6a7c2 = []byte{ // 2954 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5b, 0xcd, 0x6f, 0xdc, 0xc6, - 0x15, 0x37, 0x77, 0xf5, 0xe5, 0xb7, 0xda, 0x5d, 0x99, 0xb6, 0xa5, 0xf5, 0x26, 0x51, 0x52, 0x26, - 0xb6, 0x15, 0x27, 0x59, 0xd9, 0x8a, 0x93, 0xa6, 0x4a, 0xd2, 0x46, 0x6b, 0x45, 0x96, 0xe0, 0xd8, - 0x56, 0x29, 0x5b, 0x69, 0x52, 0xa5, 0xc4, 0x88, 0x1c, 0x49, 0xac, 0x76, 0x49, 0x86, 0x9c, 0xd5, - 0x47, 0x7b, 0x4a, 0x11, 0x14, 0x46, 0x80, 0x06, 0x45, 0xd1, 0x4b, 0xae, 0x3d, 0x16, 0xbd, 0xe6, - 0x9a, 0x4b, 0x2f, 0x45, 0x4f, 0x39, 0x16, 0x28, 0x50, 0x04, 0x0e, 0x7a, 0x69, 0xff, 0x85, 0x02, - 0x2d, 0xe6, 0x8b, 0x5f, 0x4b, 0x7a, 0x77, 0x25, 0x19, 0x6e, 0x7b, 0xd2, 0xce, 0xf0, 0xbd, 0xdf, - 0xfb, 0x98, 0x37, 0x6f, 0xde, 0x3c, 0x52, 0xf0, 0x1d, 0x0f, 0x3b, 0x9d, 0xf6, 0xa6, 0x8f, 0x66, - 0xf7, 0x6c, 0xbc, 0x3f, 0xbb, 0x77, 0x0d, 0xb5, 0xbc, 0x1d, 0x74, 0x8d, 0x8d, 0x1a, 0x9e, 0xef, - 0x12, 0x57, 0x9d, 0x94, 0x24, 0x0d, 0x36, 0x29, 0x49, 0xea, 0x33, 0x21, 0xab, 0xe9, 0xfa, 0x78, - 0xd6, 0xdc, 0x41, 0xb6, 0x13, 0x01, 0xb0, 0x21, 0x47, 0xa8, 0x5f, 0x49, 0x51, 0xfa, 0x87, 0x1e, - 0x71, 0x63, 0xa4, 0x6c, 0x2c, 0x68, 0x5f, 0x48, 0xd2, 0x5a, 0xf8, 0x20, 0x22, 0xb4, 0xf0, 0x81, - 0xa0, 0xba, 0x9e, 0xa4, 0x22, 0x3e, 0x72, 0x02, 0x64, 0x12, 0xdb, 0x8d, 0x69, 0x10, 0x9b, 0xcc, - 0xc6, 0xb6, 0x37, 0xcd, 0x88, 0xda, 0xde, 0x34, 0x05, 0x55, 0xca, 0xae, 0x80, 0xa0, 0x5d, 0x1c, - 0xd1, 0xb1, 0x21, 0xa7, 0xd4, 0xbe, 0x51, 0xa0, 0xb6, 0xd0, 0x21, 0x3b, 0xae, 0x6f, 0xff, 0x0c, - 0x2f, 0x38, 0x56, 0xb3, 0x63, 0xb7, 0x2c, 0x1d, 0x7f, 0xdc, 0xc1, 0x01, 0x51, 0x7f, 0x02, 0x13, - 0x31, 0x0d, 0x0c, 0xaf, 0x85, 0x9c, 0x9a, 0xf2, 0x9c, 0x32, 0x53, 0x9a, 0x7b, 0xb5, 0x11, 0x7a, - 0x94, 0x4a, 0x68, 0xc4, 0x15, 0x95, 0x72, 0x1a, 0xf7, 0xa2, 0xc9, 0xd5, 0x16, 0x72, 0xf4, 0x2a, - 0x49, 0x4e, 0xa8, 0x16, 0xa8, 0x48, 0xc8, 0x46, 0x4c, 0x82, 0x85, 0x08, 0xaa, 0x15, 0x98, 0x84, - 0xd7, 0xfa, 0x91, 0xb0, 0x10, 0xe7, 0x5e, 0x44, 0x04, 0xe9, 0x67, 0x50, 0x7a, 0x4a, 0x73, 0xe0, - 0x42, 0x86, 0x85, 0x81, 0xe7, 0x3a, 0x01, 0x56, 0x7f, 0x08, 0xa5, 0x18, 0xb2, 0xb0, 0x6e, 0x76, - 0x40, 0xeb, 0xf4, 0x38, 0x86, 0xf6, 0x85, 0x02, 0x4f, 0x35, 0x7d, 0x17, 0x59, 0x26, 0x0a, 0x48, - 0x9c, 0x4a, 0x78, 0xf5, 0xe4, 0x45, 0xaa, 0x97, 0xa1, 0x8a, 0xf6, 0x91, 0x4d, 0x0c, 0x0b, 0x13, - 0xcc, 0x61, 0xa9, 0x17, 0xc7, 0xf4, 0x0a, 0x9b, 0x5e, 0x94, 0xb3, 0xda, 0x27, 0x0a, 0x3c, 0x9d, - 0xad, 0x9b, 0xf0, 0xc7, 0xeb, 0x50, 0xb0, 0x2d, 0xa1, 0xd3, 0xa5, 0x7e, 0x74, 0x5a, 0xb1, 0xf4, - 0x82, 0x6d, 0xa9, 0x2f, 0xc2, 0x44, 0x28, 0xdb, 0xd8, 0xc1, 0xf6, 0xf6, 0x0e, 0x61, 0x2a, 0x0c, - 0xe9, 0xd5, 0x70, 0x7e, 0x99, 0x4d, 0x6b, 0x5f, 0x00, 0x5c, 0x48, 0x85, 0x86, 0x83, 0x7d, 0xe9, - 0x9d, 0xe7, 0xa1, 0x8c, 0x0f, 0x3c, 0xdb, 0x3f, 0x94, 0x28, 0x0a, 0x43, 0x19, 0xe7, 0x93, 0x1c, - 0x42, 0xbd, 0x0e, 0xc5, 0x2d, 0x8c, 0x45, 0xa4, 0x68, 0x29, 0x35, 0xc5, 0x5e, 0x0c, 0x35, 0x5c, - 0xc2, 0x58, 0xa7, 0xe4, 0xaa, 0x0a, 0x43, 0x6d, 0xdc, 0x76, 0x6b, 0xc5, 0xe7, 0x94, 0x99, 0xd3, - 0x3a, 0xfb, 0xad, 0x6e, 0xc0, 0x04, 0x32, 0x4d, 0xb7, 0xe3, 0x10, 0x63, 0xdb, 0x77, 0x3b, 0x9e, - 0x61, 0x5b, 0xb5, 0x0a, 0x83, 0x7d, 0xa5, 0x07, 0xec, 0x02, 0x67, 0xbb, 0x49, 0xb9, 0x56, 0xac, - 0xe5, 0x53, 0x7a, 0x05, 0x25, 0x66, 0x1e, 0x28, 0x8a, 0xaa, 0xc3, 0xa8, 0xdb, 0x21, 0x5e, 0x87, - 0x04, 0xb5, 0x73, 0xcf, 0x15, 0x67, 0x4a, 0x73, 0x6f, 0x34, 0xb2, 0x33, 0x51, 0x23, 0xd7, 0x21, - 0x8d, 0xbb, 0x0c, 0x40, 0x97, 0x40, 0xea, 0x7b, 0x30, 0x1c, 0xec, 0x23, 0x2f, 0xa8, 0x4d, 0x33, - 0xc4, 0xd7, 0x07, 0x47, 0x5c, 0xdb, 0x47, 0x9e, 0xce, 0x41, 0xd4, 0x0d, 0x28, 0x59, 0xb8, 0x85, - 0xb7, 0xd9, 0x76, 0x09, 0x6a, 0x33, 0x0c, 0x73, 0x7e, 0x70, 0xcc, 0x45, 0x0e, 0x82, 0xf5, 0x38, - 0x9c, 0xba, 0x09, 0xe5, 0x8e, 0x13, 0xc7, 0x9f, 0x63, 0xf8, 0x6f, 0x0d, 0x8e, 0x7f, 0x5f, 0xc2, - 0x60, 0x3d, 0x09, 0xa9, 0x2e, 0x41, 0xc9, 0xde, 0x34, 0x0d, 0xce, 0x15, 0xd4, 0xde, 0x62, 0x12, - 0x2e, 0xa6, 0x16, 0x8f, 0xa6, 0xc6, 0x28, 0x64, 0x37, 0xcd, 0x05, 0x1e, 0xf5, 0x60, 0xcb, 0x9f, - 0x41, 0xfd, 0x97, 0x0a, 0x8c, 0x70, 0x5f, 0xab, 0xf3, 0x30, 0xbc, 0x87, 0x5a, 0x1d, 0x2c, 0xf6, - 0xc1, 0x0b, 0x3d, 0x22, 0x61, 0x9d, 0xd2, 0xea, 0x9c, 0x45, 0x7d, 0x07, 0x46, 0x91, 0x65, 0xf9, - 0x38, 0x08, 0x44, 0x78, 0x5e, 0xea, 0x15, 0x47, 0x9c, 0x5a, 0x97, 0x6c, 0xf5, 0x3f, 0x2a, 0x30, - 0x44, 0x97, 0xe8, 0x58, 0x6a, 0xac, 0xc0, 0x38, 0x41, 0xfe, 0x36, 0x26, 0x06, 0x0a, 0x02, 0x4c, - 0xfa, 0xd5, 0x85, 0xd2, 0xae, 0x58, 0x7a, 0x89, 0xf3, 0xb2, 0xa1, 0xdc, 0x6c, 0xc5, 0x81, 0x36, - 0x5b, 0xfd, 0x73, 0x05, 0xc6, 0x64, 0x50, 0xa8, 0x6f, 0xc3, 0x08, 0x6a, 0xd3, 0xbd, 0x21, 0x4c, - 0xb9, 0xd8, 0x4b, 0x0f, 0x46, 0xac, 0x0b, 0x26, 0xf5, 0x06, 0x9c, 0xf6, 0x11, 0xc1, 0xfc, 0x78, - 0x28, 0x66, 0x5a, 0xc2, 0xcf, 0xb4, 0x10, 0x40, 0x47, 0x04, 0xb3, 0xf3, 0x60, 0xcc, 0x17, 0xbf, - 0xea, 0xbf, 0x52, 0x00, 0xa2, 0x28, 0x3a, 0x96, 0x73, 0x13, 0xfa, 0x14, 0x8e, 0xa6, 0x4f, 0xf3, - 0x2c, 0x9c, 0x31, 0xd2, 0xa9, 0x47, 0xc3, 0x50, 0xcf, 0xda, 0x03, 0x22, 0x39, 0xdf, 0x84, 0xa1, - 0xe3, 0x9e, 0xc1, 0x0c, 0x40, 0xfb, 0x8d, 0x02, 0xe7, 0x45, 0xdc, 0x35, 0x0f, 0x57, 0x1c, 0x0b, - 0x1f, 0xc8, 0xf4, 0xbb, 0x0a, 0x65, 0x11, 0x87, 0x86, 0x4d, 0xe7, 0x85, 0xac, 0x97, 0xfa, 0x0b, - 0x62, 0x0e, 0x35, 0x8e, 0x62, 0x23, 0x7a, 0x36, 0x59, 0x76, 0xe0, 0xb5, 0xd0, 0xa1, 0x61, 0xba, - 0xce, 0x96, 0xed, 0xb7, 0xe5, 0xd9, 0x24, 0xa6, 0x6f, 0xf0, 0x59, 0xed, 0x43, 0x98, 0x4c, 0xeb, - 0x24, 0xec, 0x8e, 0xed, 0x29, 0xe5, 0x48, 0x7b, 0x4a, 0xfb, 0x00, 0xce, 0x33, 0xc8, 0xe6, 0xa1, - 0x7c, 0x24, 0xec, 0x3d, 0x3e, 0xf4, 0x27, 0x0a, 0x4c, 0xa6, 0xb1, 0x85, 0xde, 0xf7, 0x8f, 0xef, - 0xcc, 0xe5, 0x53, 0x49, 0x77, 0x3e, 0x50, 0x94, 0xe6, 0x04, 0x54, 0x8c, 0x04, 0xae, 0xf6, 0x5b, - 0x05, 0xa6, 0xde, 0xf5, 0x76, 0x70, 0x1b, 0xfb, 0xa8, 0x95, 0xb2, 0xf0, 0x09, 0xae, 0xe8, 0x06, - 0xd4, 0xba, 0xb5, 0x3a, 0xb1, 0x35, 0xfd, 0x52, 0x81, 0x6a, 0x13, 0xb5, 0x90, 0x63, 0xe2, 0xd0, - 0x58, 0x1d, 0xe4, 0x29, 0x6c, 0x6c, 0xd9, 0x2d, 0x82, 0xfd, 0xa3, 0x58, 0x5b, 0x16, 0x10, 0x4b, - 0x0c, 0x41, 0xbd, 0x03, 0x55, 0x96, 0x43, 0x0d, 0xdb, 0x92, 0xa0, 0x83, 0x65, 0xd3, 0x32, 0xe2, - 0x3f, 0x38, 0x1e, 0xad, 0x0f, 0x27, 0x22, 0xbd, 0x85, 0x3b, 0xde, 0x85, 0x51, 0x21, 0xf5, 0x28, - 0x1a, 0x4b, 0x5e, 0xf5, 0xfb, 0x30, 0xba, 0xc9, 0xa1, 0x85, 0x8e, 0xfd, 0xe5, 0x35, 0xc9, 0xa4, - 0x5d, 0x84, 0xf2, 0xba, 0x8d, 0xf7, 0x69, 0xbd, 0x7c, 0xcf, 0xdd, 0xc5, 0x8e, 0x7a, 0x0e, 0x86, - 0x6d, 0x9a, 0x83, 0x98, 0x56, 0xe3, 0x3a, 0x1f, 0x68, 0x3a, 0x54, 0x25, 0x99, 0xf4, 0xfc, 0x0f, - 0xa0, 0xb8, 0xb5, 0xb7, 0x2b, 0x94, 0xef, 0x55, 0x3b, 0x2d, 0x75, 0x5a, 0x2d, 0x0a, 0x60, 0x3b, - 0xdb, 0xb7, 0xf0, 0xa1, 0x4e, 0x39, 0xb5, 0xbb, 0x30, 0x11, 0x61, 0x0a, 0xaf, 0xbc, 0x09, 0xc3, - 0x84, 0xaa, 0xd1, 0x7d, 0x6c, 0x24, 0xeb, 0x86, 0x84, 0xce, 0x3a, 0xe7, 0xd1, 0x7e, 0xa1, 0x40, - 0x79, 0x8d, 0x20, 0xd2, 0x09, 0xa3, 0xe3, 0xb1, 0x16, 0x7b, 0xd9, 0x09, 0x5d, 0x87, 0x8a, 0xd4, - 0x41, 0xd8, 0xf4, 0x2c, 0x94, 0x82, 0x43, 0xc7, 0x4c, 0x96, 0xb7, 0x40, 0xa7, 0x44, 0x71, 0xfb, - 0x2c, 0x94, 0x4c, 0x44, 0xcc, 0x1d, 0xdb, 0xd9, 0x36, 0x3a, 0x9e, 0xd8, 0x5a, 0x20, 0xa7, 0xee, - 0x7b, 0xda, 0x03, 0x05, 0xce, 0x72, 0xd0, 0x35, 0xe2, 0x63, 0xd4, 0x7e, 0x82, 0xe6, 0xf9, 0x70, - 0x2e, 0xa9, 0x89, 0x30, 0xf2, 0x7b, 0x70, 0xa1, 0x85, 0x08, 0x0e, 0x88, 0xb1, 0xeb, 0xb8, 0xfb, - 0x8e, 0xb1, 0xd9, 0x72, 0xcd, 0xdd, 0xa4, 0xc9, 0x93, 0x9c, 0xe0, 0x16, 0x7d, 0xde, 0xa4, 0x8f, - 0x23, 0xf3, 0xe3, 0xfe, 0x29, 0xa4, 0xfd, 0xa3, 0x7d, 0x56, 0x84, 0xf1, 0x3b, 0x2e, 0x89, 0x36, - 0xfd, 0xf3, 0x50, 0xb6, 0x1d, 0xb3, 0xd5, 0xb1, 0xb0, 0x11, 0x78, 0xd8, 0x21, 0xc2, 0x65, 0xe3, - 0x62, 0x72, 0x8d, 0xce, 0xa9, 0x0b, 0x30, 0x26, 0x77, 0x71, 0x4e, 0x09, 0x91, 0xb7, 0x7d, 0x47, - 0xc5, 0xf6, 0xed, 0xce, 0xa4, 0x43, 0xc7, 0xcd, 0xa4, 0xb7, 0xa1, 0xca, 0x4b, 0x1c, 0x83, 0xb8, - 0x4c, 0x77, 0xab, 0x36, 0x32, 0x48, 0x81, 0x54, 0xe6, 0xdc, 0xf7, 0x5c, 0x6a, 0xa3, 0xf5, 0x24, - 0x02, 0xe0, 0x41, 0x01, 0xce, 0xb3, 0xc5, 0x58, 0x72, 0xfd, 0x75, 0x97, 0xd8, 0xce, 0xb6, 0x5c, - 0x95, 0x2b, 0x70, 0x66, 0xcf, 0x25, 0x68, 0xb3, 0x85, 0x0d, 0x44, 0x92, 0x4b, 0x5f, 0x15, 0x0f, - 0x16, 0x88, 0x58, 0xf3, 0x2e, 0xcf, 0x16, 0x8f, 0xeb, 0xd9, 0x27, 0xe0, 0x8a, 0xaf, 0x0a, 0x50, - 0x79, 0xdf, 0x26, 0x4e, 0xec, 0xec, 0xfd, 0x00, 0x26, 0x1c, 0x97, 0x60, 0xc3, 0x74, 0xdb, 0x6d, - 0x9b, 0xb4, 0xb1, 0x43, 0xe8, 0xad, 0x80, 0x5e, 0x50, 0x1a, 0x3d, 0xb4, 0xa0, 0xbb, 0x0a, 0xdf, - 0x08, 0xd9, 0xf4, 0x2a, 0xc5, 0x89, 0xc6, 0x41, 0x66, 0x6f, 0xa6, 0x78, 0x82, 0xbd, 0x99, 0x27, - 0xe0, 0x40, 0x0c, 0xd5, 0xd0, 0x7f, 0x22, 0x8f, 0xe8, 0x30, 0xbe, 0xcf, 0xa7, 0x78, 0xb1, 0x3d, - 0x40, 0xb3, 0x44, 0x40, 0xb1, 0xaa, 0xbb, 0xb4, 0x1f, 0x0d, 0xb4, 0xbf, 0x29, 0x30, 0x29, 0x1e, - 0xfe, 0x7f, 0x36, 0xbc, 0x5a, 0x30, 0xd5, 0x65, 0xdf, 0xe3, 0x6b, 0x77, 0xfd, 0xa1, 0x08, 0x65, - 0x96, 0x2a, 0xc3, 0xa8, 0xaf, 0xc3, 0x18, 0xaf, 0x93, 0x30, 0xef, 0x24, 0x8d, 0xe9, 0xe1, 0x58, - 0xfd, 0x29, 0x4c, 0xc7, 0x72, 0xb5, 0x69, 0x6f, 0xd9, 0xa6, 0x61, 0x61, 0xc7, 0x6d, 0xdb, 0x8e, - 0x68, 0x11, 0xf0, 0xfd, 0xd1, 0xab, 0x6e, 0x59, 0xa4, 0x3c, 0xfa, 0xd3, 0x51, 0x8a, 0x67, 0x50, - 0x8b, 0x71, 0x24, 0x75, 0x1e, 0x2e, 0x48, 0x59, 0x51, 0xc3, 0xc0, 0x60, 0xc5, 0x41, 0xc0, 0xf6, - 0xca, 0x98, 0x3e, 0x25, 0x08, 0x16, 0xc3, 0xe7, 0xac, 0x84, 0x08, 0xd4, 0x37, 0xa0, 0x26, 0x79, - 0x3b, 0xce, 0xa6, 0xeb, 0x58, 0xf4, 0x34, 0x16, 0xac, 0x43, 0x8c, 0x75, 0x52, 0x3c, 0xbf, 0x2f, - 0x1f, 0x0b, 0xce, 0x4b, 0x50, 0x95, 0x9c, 0x2d, 0xcf, 0x70, 0xb6, 0x48, 0x50, 0x1b, 0x66, 0x0c, - 0xf2, 0x90, 0x7a, 0xcf, 0xbb, 0xb3, 0x45, 0x02, 0x75, 0x0e, 0xce, 0x4b, 0x3a, 0xcf, 0x77, 0x3d, - 0x37, 0x40, 0x2d, 0x4e, 0x3d, 0xc2, 0xa8, 0xcf, 0x8a, 0x87, 0xab, 0xe2, 0x19, 0xe3, 0x59, 0x80, - 0x67, 0x24, 0xcf, 0x1e, 0x4b, 0xb6, 0x86, 0x8f, 0x4d, 0x6c, 0x7b, 0x44, 0xaa, 0x36, 0xca, 0x78, - 0xeb, 0x82, 0x48, 0x26, 0x64, 0x46, 0xc2, 0xd5, 0xd3, 0x30, 0x54, 0xe4, 0x6a, 0x89, 0x98, 0x58, - 0x83, 0x0a, 0x5b, 0x01, 0xa3, 0x8d, 0x09, 0x8a, 0x05, 0xe4, 0xcb, 0xfd, 0x2c, 0xc1, 0x6d, 0xc1, - 0xa3, 0x97, 0xad, 0xf8, 0x50, 0xab, 0xc1, 0xe4, 0x8d, 0x1d, 0x64, 0x3b, 0xab, 0xc8, 0x47, 0x6d, - 0x4c, 0xb0, 0x2f, 0xa3, 0x43, 0xdb, 0x81, 0xa9, 0xae, 0x27, 0x42, 0x93, 0xdb, 0x00, 0x5e, 0x38, - 0x9b, 0x57, 0x4a, 0xb2, 0xa6, 0x7c, 0xa8, 0x44, 0x1a, 0x2a, 0x06, 0xa0, 0x4d, 0xc2, 0xb9, 0xa5, - 0xdb, 0x8b, 0xdd, 0x1a, 0x58, 0x70, 0x3e, 0x35, 0x2f, 0xe4, 0xdf, 0xca, 0x90, 0xff, 0xd2, 0xa3, - 0xe5, 0x2f, 0xb5, 0xad, 0x1c, 0xe9, 0x9f, 0x17, 0x60, 0x8a, 0x9e, 0x8c, 0xcd, 0xc3, 0x58, 0x1a, - 0x17, 0x3b, 0xe4, 0x7d, 0xa8, 0xa6, 0xce, 0x05, 0xe1, 0xf3, 0x41, 0x8f, 0x85, 0x4a, 0xf2, 0x58, - 0xc8, 0x6a, 0x04, 0x17, 0xb3, 0x1a, 0xc1, 0x4f, 0x22, 0xbd, 0x3b, 0x50, 0xeb, 0xf6, 0x47, 0x98, - 0xe7, 0x2b, 0xac, 0xfc, 0x61, 0xe5, 0x02, 0xb5, 0xa9, 0xdb, 0xfb, 0xc9, 0x8a, 0x7f, 0x4d, 0x52, - 0x53, 0x48, 0x1d, 0x9b, 0xae, 0x6f, 0xe9, 0xe5, 0x20, 0x3e, 0xc9, 0x16, 0x60, 0x6d, 0x1f, 0x79, - 0x39, 0x0b, 0x10, 0xec, 0x23, 0xef, 0x04, 0x16, 0x80, 0xc2, 0xfc, 0x8f, 0x2c, 0x80, 0x0e, 0xb5, - 0x6e, 0x7f, 0x84, 0x7d, 0xff, 0x21, 0x6a, 0x89, 0x70, 0xbb, 0x96, 0xeb, 0xf6, 0x7d, 0xe4, 0x09, - 0x6f, 0x33, 0x7a, 0xed, 0x5f, 0x0a, 0x4c, 0xde, 0xe9, 0xb4, 0x5a, 0xf6, 0x96, 0x8d, 0xfd, 0xe4, - 0x6d, 0x6b, 0x09, 0x4e, 0x3b, 0xf2, 0x89, 0xf0, 0xee, 0x4c, 0x0f, 0xd3, 0x42, 0x24, 0x3d, 0x62, - 0xfd, 0xaf, 0x76, 0xe9, 0x2c, 0x4c, 0x75, 0x59, 0x2f, 0x3c, 0x7a, 0x0e, 0x86, 0xf9, 0x6d, 0x84, - 0x1f, 0x81, 0x7c, 0xa0, 0xad, 0xc3, 0xd3, 0xb1, 0x93, 0x74, 0xc5, 0xd9, 0x72, 0x9b, 0x87, 0xcb, - 0x28, 0x08, 0xaf, 0xd1, 0xfc, 0xfd, 0x4b, 0x61, 0xd0, 0xf7, 0x2f, 0xda, 0xa7, 0x0a, 0x4c, 0xa6, - 0x80, 0x25, 0xe4, 0x25, 0x18, 0x0f, 0x08, 0xf2, 0x93, 0x35, 0xf8, 0xf2, 0x29, 0xbd, 0xc4, 0x66, - 0x79, 0x05, 0xfe, 0x40, 0x51, 0x54, 0x0d, 0x00, 0x3b, 0x56, 0xe2, 0xde, 0xb5, 0xac, 0xe8, 0xa7, - 0xb1, 0x63, 0x85, 0x34, 0xcd, 0x2a, 0x94, 0x8d, 0x38, 0x58, 0xb3, 0x0c, 0x25, 0x23, 0xe2, 0xd2, - 0xfe, 0x59, 0x80, 0x6a, 0x4a, 0x0d, 0xf5, 0x29, 0x18, 0x49, 0x49, 0x16, 0x63, 0x2a, 0xf4, 0x88, - 0xf6, 0xa6, 0x0b, 0x99, 0xe2, 0x09, 0xbc, 0x44, 0xdb, 0x80, 0x92, 0x87, 0x7d, 0x5a, 0x95, 0x10, - 0x7b, 0x0f, 0x8b, 0xcb, 0xdd, 0xfc, 0xa0, 0x75, 0x5f, 0x84, 0xa0, 0xc7, 0xe1, 0xd4, 0x9b, 0x30, - 0x44, 0xb7, 0x12, 0xab, 0x05, 0x06, 0x2f, 0x27, 0xd7, 0x6d, 0xbc, 0xaf, 0x33, 0x80, 0xe6, 0x69, - 0x18, 0x95, 0xde, 0xfe, 0x31, 0x4c, 0x75, 0xad, 0x79, 0xd4, 0x5e, 0x23, 0x07, 0x86, 0xed, 0x6c, - 0xb9, 0x62, 0x4b, 0x5f, 0xee, 0xe3, 0x9d, 0x0b, 0x43, 0x18, 0x21, 0x07, 0xf4, 0xaf, 0x86, 0xe0, - 0x99, 0x9c, 0x48, 0x3d, 0x31, 0x11, 0x1f, 0x41, 0x59, 0x5c, 0xe4, 0x05, 0xe4, 0x7b, 0x50, 0x62, - 0xe7, 0xa2, 0xcf, 0x52, 0xcc, 0x51, 0xce, 0x00, 0x70, 0xc2, 0xdf, 0xda, 0x97, 0x34, 0x37, 0xa5, - 0xee, 0xa6, 0x8f, 0x43, 0x90, 0x7a, 0x1b, 0xc6, 0x6d, 0x0b, 0x3b, 0xc4, 0x26, 0x87, 0xc6, 0x2e, - 0x3e, 0x14, 0xe1, 0x7c, 0xa5, 0x47, 0xd2, 0x59, 0x11, 0x2c, 0xb7, 0xf0, 0xa1, 0x5e, 0xb2, 0xa3, - 0x81, 0xf6, 0xef, 0x22, 0x9c, 0xcd, 0x10, 0x99, 0x55, 0x35, 0x28, 0x27, 0x52, 0x35, 0x7c, 0x17, - 0x86, 0xd8, 0x99, 0xcb, 0xf5, 0x7e, 0xbe, 0x57, 0x92, 0xa6, 0x1a, 0x31, 0x86, 0xc7, 0x70, 0x6f, - 0x4f, 0x1c, 0x1a, 0x43, 0x47, 0x3f, 0x34, 0x2e, 0x42, 0x85, 0x6f, 0x12, 0xc3, 0xf4, 0x31, 0x22, - 0xd8, 0x62, 0x1b, 0x6f, 0x48, 0x2f, 0xf3, 0xd9, 0x1b, 0x7c, 0x92, 0xe6, 0x46, 0x41, 0xc6, 0x73, - 0xf5, 0x88, 0xcc, 0x8d, 0x7c, 0x96, 0xb5, 0x8e, 0x68, 0x9a, 0xaa, 0xc3, 0x98, 0xe7, 0x06, 0x36, - 0xcb, 0x35, 0xa3, 0x0c, 0x28, 0x1c, 0xab, 0xef, 0xc0, 0x48, 0xe0, 0x76, 0x7c, 0x13, 0xd7, 0xc6, - 0xb2, 0xf5, 0x4d, 0x56, 0x8c, 0xd4, 0x7d, 0x6b, 0x8c, 0x5e, 0x17, 0x7c, 0x2c, 0xab, 0xc6, 0xd5, - 0xd0, 0xfe, 0x5a, 0x04, 0x88, 0x8e, 0xda, 0xac, 0x6a, 0x45, 0x39, 0x91, 0x6a, 0xe5, 0x6d, 0x71, - 0xea, 0xf3, 0x85, 0x7f, 0x31, 0x85, 0x66, 0xe1, 0x83, 0xe4, 0xc9, 0xbf, 0xda, 0x42, 0xb6, 0x43, - 0xf0, 0x01, 0xe1, 0x87, 0x7f, 0xc2, 0x2b, 0xc5, 0x94, 0x57, 0x4e, 0x6a, 0x21, 0x57, 0xa1, 0xc4, - 0xdf, 0x7c, 0xf3, 0xbb, 0xf2, 0x70, 0x66, 0xa2, 0x4f, 0x68, 0xda, 0x44, 0xc4, 0xdc, 0xa1, 0xea, - 0xf2, 0xb7, 0xb9, 0xec, 0x96, 0x0c, 0x6e, 0xf8, 0x5b, 0xbd, 0x12, 0x85, 0x46, 0x0b, 0xd9, 0x6d, - 0x6c, 0x85, 0xab, 0x2e, 0x83, 0x83, 0x4f, 0xd3, 0x75, 0x8f, 0xd6, 0x76, 0xf4, 0x88, 0x6b, 0x7b, - 0x06, 0xaa, 0x46, 0x52, 0x9c, 0xf6, 0x77, 0x05, 0xa6, 0xee, 0xee, 0x3b, 0xd8, 0x5a, 0x15, 0xce, - 0x5a, 0xb1, 0xc2, 0xa2, 0xe9, 0x3e, 0x54, 0xa4, 0x0b, 0xe9, 0x41, 0x1b, 0x16, 0xc2, 0x8f, 0x5c, - 0x1b, 0x89, 0xc3, 0x96, 0x9b, 0xda, 0xe1, 0xc5, 0x27, 0xa8, 0x1d, 0x77, 0x61, 0x9c, 0xf8, 0x88, - 0x5d, 0x62, 0x3d, 0x64, 0xcb, 0x72, 0xec, 0xf2, 0xa3, 0x40, 0xef, 0x71, 0xfa, 0x55, 0x64, 0xfb, - 0xcb, 0x0a, 0x3b, 0x29, 0xe5, 0x90, 0x16, 0x02, 0xd4, 0xac, 0xa4, 0xa2, 0x2c, 0x8a, 0xe3, 0x42, - 0x34, 0x0c, 0xb5, 0x6e, 0x33, 0x45, 0x02, 0x5e, 0x81, 0xf1, 0x90, 0xdd, 0xb6, 0xe8, 0x65, 0xab, - 0x98, 0x51, 0x01, 0x64, 0x5a, 0xb9, 0x62, 0xe9, 0x25, 0x2f, 0x82, 0x9c, 0xfb, 0xea, 0x2c, 0x9c, - 0xa5, 0xe7, 0xe3, 0xaa, 0xef, 0x12, 0xd7, 0x74, 0x5b, 0x6b, 0xd8, 0xdf, 0xb3, 0x4d, 0xac, 0xbe, - 0x0f, 0x23, 0xbc, 0x24, 0x53, 0x73, 0xdf, 0x1b, 0x24, 0x0a, 0xd6, 0xfa, 0xa5, 0x5e, 0x64, 0x42, - 0xf7, 0x5d, 0x18, 0x8f, 0x37, 0xbd, 0xd5, 0x97, 0x1e, 0xcd, 0x97, 0x68, 0xd2, 0xd7, 0x5f, 0xee, - 0x8f, 0x98, 0x8b, 0xba, 0xaa, 0xa8, 0xeb, 0x30, 0xcc, 0xce, 0x30, 0xf5, 0x85, 0x3c, 0xc6, 0x78, - 0x2f, 0xbc, 0x7e, 0xb1, 0x07, 0x55, 0x88, 0xfb, 0x31, 0x54, 0x92, 0x67, 0xa3, 0xfa, 0xca, 0x23, - 0x59, 0xd3, 0xfd, 0xdd, 0x7a, 0xa3, 0x5f, 0xf2, 0x50, 0xe4, 0x87, 0x30, 0x2a, 0xfa, 0x52, 0x6a, - 0xae, 0xab, 0x93, 0x0d, 0xd4, 0xfa, 0xe5, 0x9e, 0x74, 0x62, 0x4d, 0xfc, 0xb0, 0x77, 0x28, 0x7b, - 0x5e, 0x6a, 0xa3, 0x07, 0x6f, 0xaa, 0xf9, 0x57, 0x9f, 0xed, 0x9b, 0x5e, 0xc8, 0xfc, 0x00, 0x46, - 0x78, 0x2b, 0x25, 0x3f, 0xc0, 0x12, 0x8d, 0xb1, 0xfc, 0x00, 0x4b, 0x76, 0x64, 0xae, 0x2a, 0xd4, - 0x9c, 0x54, 0x67, 0x23, 0xdf, 0x9c, 0xec, 0x3e, 0x4b, 0xbe, 0x39, 0x79, 0xdd, 0x97, 0x16, 0x94, - 0x13, 0x6d, 0x11, 0x35, 0x37, 0x54, 0xb3, 0xba, 0x2a, 0xf5, 0x57, 0xfa, 0xa4, 0x16, 0xd2, 0x5c, - 0xa8, 0x24, 0xdf, 0xf6, 0xe7, 0xc7, 0x5f, 0xe6, 0x97, 0x0a, 0xf9, 0xf1, 0x97, 0xf3, 0x11, 0x81, - 0x0b, 0x95, 0xe4, 0x6b, 0xfa, 0x7c, 0x81, 0x99, 0x9f, 0x0a, 0xe4, 0x0b, 0xcc, 0x79, 0xfb, 0xdf, - 0x81, 0x89, 0xf4, 0xdb, 0x6f, 0x35, 0x77, 0x51, 0x72, 0xde, 0xde, 0xd7, 0xaf, 0xf6, 0xcf, 0x20, - 0xc4, 0x1a, 0x30, 0x26, 0xdf, 0x2e, 0xab, 0xb9, 0xdb, 0x27, 0xf5, 0xde, 0xbc, 0x3e, 0xd3, 0x9b, - 0x30, 0x8c, 0xcd, 0x0e, 0x4c, 0xa4, 0xfb, 0x38, 0xf9, 0x76, 0xe5, 0x74, 0xc0, 0xf2, 0xed, 0xca, - 0x6d, 0x11, 0x75, 0x60, 0x22, 0xdd, 0xbd, 0xc8, 0x17, 0x9b, 0xd3, 0xf7, 0xc9, 0x17, 0x9b, 0xdb, - 0x18, 0xf1, 0xa1, 0x9a, 0xba, 0xe1, 0xe7, 0xef, 0xc4, 0xec, 0x46, 0x48, 0xfe, 0x4e, 0xcc, 0x6b, - 0x1d, 0x7c, 0xaa, 0xc0, 0xf9, 0xcc, 0xbb, 0x97, 0x7a, 0xbd, 0xcf, 0x2b, 0x56, 0xa2, 0xa9, 0x50, - 0x7f, 0x6d, 0x40, 0x2e, 0xa1, 0x06, 0xe9, 0xbe, 0xcb, 0x37, 0xfa, 0xbd, 0xe2, 0xf5, 0x32, 0x3d, - 0xe7, 0xde, 0x7a, 0x55, 0x51, 0x7f, 0x0e, 0x6a, 0xf7, 0x27, 0x50, 0xea, 0xb5, 0x81, 0x3f, 0x19, - 0xac, 0xcf, 0x0d, 0xc2, 0x22, 0x4c, 0xfe, 0x44, 0x81, 0x73, 0x59, 0xdf, 0xc7, 0xaa, 0xaf, 0xe6, - 0x6e, 0x90, 0xfc, 0x2f, 0x7d, 0xeb, 0xd7, 0x07, 0x63, 0x8a, 0x02, 0x3d, 0x5d, 0x36, 0xe5, 0x07, - 0x7a, 0x4e, 0x1d, 0x99, 0x1f, 0xe8, 0xb9, 0x15, 0xd9, 0x01, 0x9c, 0xe9, 0xfa, 0x4c, 0x5a, 0xcd, - 0x85, 0xc9, 0xfb, 0x66, 0xbc, 0x7e, 0x6d, 0x00, 0x0e, 0x2e, 0x79, 0xce, 0x8b, 0xbe, 0x26, 0x91, - 0xb5, 0xdb, 0x47, 0x30, 0x26, 0xa7, 0xf2, 0x93, 0x58, 0xea, 0x13, 0x94, 0xfc, 0x24, 0x96, 0xfe, - 0xae, 0xa4, 0xf9, 0x59, 0xe1, 0x4f, 0x0f, 0xa7, 0x95, 0xaf, 0x1f, 0x4e, 0x2b, 0xdf, 0x3c, 0x9c, - 0x56, 0x7e, 0xfd, 0xed, 0xf4, 0xa9, 0xaf, 0xbf, 0x9d, 0x3e, 0xf5, 0x97, 0x6f, 0xa7, 0x4f, 0x41, - 0xdd, 0x74, 0xdb, 0x39, 0x38, 0xcd, 0xd3, 0x61, 0x99, 0xb9, 0xaa, 0x7c, 0x78, 0x77, 0xdb, 0x26, - 0x3b, 0x9d, 0xcd, 0x86, 0xe9, 0xb6, 0x67, 0x4d, 0x37, 0x68, 0xbb, 0xc1, 0xac, 0x8f, 0x5b, 0xe8, - 0x10, 0xfb, 0xb3, 0x7b, 0x73, 0xe1, 0x4f, 0x76, 0x41, 0x08, 0x66, 0xb3, 0xff, 0x45, 0xe1, 0x4d, - 0x3a, 0x92, 0x83, 0xdf, 0x15, 0x8a, 0xab, 0xeb, 0x3f, 0xfa, 0x7d, 0x61, 0x72, 0x55, 0x0a, 0xa7, - 0xd2, 0x1a, 0xeb, 0xe2, 0xf1, 0x9f, 0xa3, 0x07, 0x1b, 0xf4, 0xc1, 0x86, 0x7c, 0xf0, 0xb0, 0xa0, - 0x65, 0x3f, 0xd8, 0xb8, 0xb9, 0xda, 0x94, 0xef, 0x63, 0xfe, 0x51, 0xa8, 0x49, 0xa2, 0xf9, 0x79, - 0x4a, 0x35, 0x3f, 0x2f, 0xc9, 0x36, 0x47, 0xd8, 0x7f, 0x02, 0xbc, 0xfa, 0x9f, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xa1, 0x4b, 0xc5, 0x96, 0x48, 0x31, 0x00, 0x00, + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5b, 0xcd, 0x6f, 0x1b, 0xc7, + 0x15, 0xf7, 0x92, 0xfa, 0xf2, 0xa3, 0x48, 0xca, 0x6b, 0x5b, 0xa2, 0x99, 0x44, 0x49, 0x37, 0xb1, + 0xad, 0x38, 0x09, 0x65, 0x2b, 0x4e, 0x9a, 0x2a, 0x49, 0x1b, 0xd1, 0x8a, 0x2c, 0xc1, 0xb1, 0xad, + 0xae, 0x6c, 0xa5, 0x49, 0x95, 0x2e, 0x46, 0xbb, 0x23, 0x69, 0x2b, 0x72, 0x77, 0xb3, 0x3b, 0x14, + 0xc5, 0xf6, 0x94, 0x22, 0x28, 0x8c, 0x00, 0x0d, 0x8a, 0xa2, 0x97, 0x5c, 0x7b, 0x2c, 0x7a, 0xcd, + 0xb5, 0x28, 0xd0, 0x4b, 0xd1, 0x53, 0x8e, 0x05, 0x0a, 0x14, 0x81, 0x83, 0x5e, 0xda, 0x7f, 0xa1, + 0x40, 0x8b, 0xf9, 0x5a, 0xee, 0x2e, 0x77, 0x4d, 0x52, 0x92, 0xe1, 0xb6, 0x27, 0x71, 0x66, 0xde, + 0xfb, 0xbd, 0x8f, 0x99, 0x79, 0xf3, 0xe6, 0xcd, 0x0a, 0xbe, 0xe5, 0x61, 0xa7, 0xd5, 0xdc, 0xf6, + 0xd1, 0xfc, 0x81, 0x8d, 0xdb, 0xf3, 0x07, 0xd7, 0x50, 0xc3, 0xdb, 0x43, 0xd7, 0x58, 0xab, 0xe6, + 0xf9, 0x2e, 0x71, 0xd5, 0x69, 0x49, 0x52, 0x63, 0x9d, 0x92, 0xa4, 0x3a, 0x17, 0xb2, 0x9a, 0xae, + 0x8f, 0xe7, 0xcd, 0x3d, 0x64, 0x3b, 0x5d, 0x00, 0xd6, 0xe4, 0x08, 0xd5, 0x2b, 0x09, 0x4a, 0xbf, + 0xe3, 0x11, 0x37, 0x42, 0xca, 0xda, 0x82, 0xf6, 0x85, 0x38, 0xad, 0x85, 0x0f, 0xbb, 0x84, 0x16, + 0x3e, 0x14, 0x54, 0xd7, 0xe3, 0x54, 0xc4, 0x47, 0x4e, 0x80, 0x4c, 0x62, 0xbb, 0x11, 0x0d, 0x22, + 0x9d, 0xe9, 0xd8, 0xf6, 0xb6, 0xd9, 0xa5, 0xb6, 0xb7, 0x4d, 0x41, 0x95, 0xb0, 0x2b, 0x20, 0x68, + 0x1f, 0x77, 0xe9, 0x58, 0x93, 0x53, 0x6a, 0x5f, 0x2b, 0x50, 0x59, 0x6a, 0x91, 0x3d, 0xd7, 0xb7, + 0x7f, 0x82, 0x97, 0x1c, 0xab, 0xde, 0xb2, 0x1b, 0x96, 0x8e, 0x3f, 0x6e, 0xe1, 0x80, 0xa8, 0x3f, + 0x82, 0xa9, 0x88, 0x06, 0x86, 0xd7, 0x40, 0x4e, 0x45, 0x79, 0x4e, 0x99, 0x2b, 0x2c, 0xbc, 0x5a, + 0x0b, 0x3d, 0x4a, 0x25, 0xd4, 0xa2, 0x8a, 0x4a, 0x39, 0xb5, 0x7b, 0xdd, 0xce, 0xf5, 0x06, 0x72, + 0xf4, 0x32, 0x89, 0x77, 0xa8, 0x16, 0xa8, 0x48, 0xc8, 0x46, 0x4c, 0x82, 0x85, 0x08, 0xaa, 0xe4, + 0x98, 0x84, 0xd7, 0x06, 0x91, 0xb0, 0x14, 0xe5, 0x5e, 0x46, 0x04, 0xe9, 0x67, 0x50, 0xb2, 0x4b, + 0x73, 0xe0, 0x42, 0x8a, 0x85, 0x81, 0xe7, 0x3a, 0x01, 0x56, 0xbf, 0x0f, 0x85, 0x08, 0xb2, 0xb0, + 0x6e, 0x7e, 0x48, 0xeb, 0xf4, 0x28, 0x86, 0xf6, 0x85, 0x02, 0x4f, 0xd5, 0x7d, 0x17, 0x59, 0x26, + 0x0a, 0x48, 0x94, 0x4a, 0x78, 0xf5, 0xe4, 0x45, 0xaa, 0x97, 0xa1, 0x8c, 0xda, 0xc8, 0x26, 0x86, + 0x85, 0x09, 0xe6, 0xb0, 0xd4, 0x8b, 0x13, 0x7a, 0x89, 0x75, 0x2f, 0xcb, 0x5e, 0xed, 0x13, 0x05, + 0x9e, 0x4e, 0xd7, 0x4d, 0xf8, 0xe3, 0x75, 0xc8, 0xd9, 0x96, 0xd0, 0xe9, 0xd2, 0x20, 0x3a, 0xad, + 0x59, 0x7a, 0xce, 0xb6, 0xd4, 0x17, 0x61, 0x2a, 0x94, 0x6d, 0xec, 0x61, 0x7b, 0x77, 0x8f, 0x30, + 0x15, 0x46, 0xf4, 0x72, 0xd8, 0xbf, 0xca, 0xba, 0xb5, 0x2f, 0x00, 0x2e, 0x24, 0x96, 0x86, 0x83, + 0x7d, 0xe9, 0x9d, 0xe7, 0xa1, 0x88, 0x0f, 0x3d, 0xdb, 0xef, 0x48, 0x14, 0x85, 0xa1, 0x4c, 0xf2, + 0x4e, 0x0e, 0xa1, 0x5e, 0x87, 0xfc, 0x0e, 0xc6, 0x62, 0xa5, 0x68, 0x09, 0x35, 0xc5, 0x5e, 0x0c, + 0x35, 0x5c, 0xc1, 0x58, 0xa7, 0xe4, 0xaa, 0x0a, 0x23, 0x4d, 0xdc, 0x74, 0x2b, 0xf9, 0xe7, 0x94, + 0xb9, 0xd3, 0x3a, 0xfb, 0xad, 0x6e, 0xc1, 0x14, 0x32, 0x4d, 0xb7, 0xe5, 0x10, 0x63, 0xd7, 0x77, + 0x5b, 0x9e, 0x61, 0x5b, 0x95, 0x12, 0x83, 0x7d, 0xa5, 0x0f, 0xec, 0x12, 0x67, 0xbb, 0x49, 0xb9, + 0xd6, 0xac, 0xd5, 0x53, 0x7a, 0x09, 0xc5, 0x7a, 0x1e, 0x28, 0x8a, 0xaa, 0xc3, 0xb8, 0xdb, 0x22, + 0x5e, 0x8b, 0x04, 0x95, 0x73, 0xcf, 0xe5, 0xe7, 0x0a, 0x0b, 0x6f, 0xd4, 0xd2, 0x23, 0x51, 0x2d, + 0xd3, 0x21, 0xb5, 0xbb, 0x0c, 0x40, 0x97, 0x40, 0xea, 0x7b, 0x30, 0x1a, 0xb4, 0x91, 0x17, 0x54, + 0x66, 0x19, 0xe2, 0xeb, 0xc3, 0x23, 0x6e, 0xb4, 0x91, 0xa7, 0x73, 0x10, 0x75, 0x0b, 0x0a, 0x16, + 0x6e, 0xe0, 0x5d, 0xb6, 0x5d, 0x82, 0xca, 0x1c, 0xc3, 0x5c, 0x1c, 0x1e, 0x73, 0x99, 0x83, 0x60, + 0x3d, 0x0a, 0xa7, 0x6e, 0x43, 0xb1, 0xe5, 0x44, 0xf1, 0x17, 0x18, 0xfe, 0x5b, 0xc3, 0xe3, 0xdf, + 0x97, 0x30, 0x58, 0x8f, 0x43, 0xaa, 0x2b, 0x50, 0xb0, 0xb7, 0x4d, 0x83, 0x73, 0x05, 0x95, 0xb7, + 0x98, 0x84, 0x8b, 0x89, 0xc9, 0xa3, 0xa1, 0xb1, 0xbb, 0x64, 0xb7, 0xcd, 0x25, 0xbe, 0xea, 0xc1, + 0x96, 0x3f, 0x83, 0xea, 0xcf, 0x15, 0x18, 0xe3, 0xbe, 0x56, 0x17, 0x61, 0xf4, 0x00, 0x35, 0x5a, + 0x58, 0xec, 0x83, 0x17, 0xfa, 0xac, 0x84, 0x4d, 0x4a, 0xab, 0x73, 0x16, 0xf5, 0x1d, 0x18, 0x47, + 0x96, 0xe5, 0xe3, 0x20, 0x10, 0xcb, 0xf3, 0x52, 0xbf, 0x75, 0xc4, 0xa9, 0x75, 0xc9, 0x56, 0xfd, + 0xa3, 0x02, 0x23, 0x74, 0x8a, 0x8e, 0xa5, 0xc6, 0x1a, 0x4c, 0x12, 0xe4, 0xef, 0x62, 0x62, 0xa0, + 0x20, 0xc0, 0x64, 0x50, 0x5d, 0x28, 0xed, 0x9a, 0xa5, 0x17, 0x38, 0x2f, 0x6b, 0xca, 0xcd, 0x96, + 0x1f, 0x6a, 0xb3, 0x55, 0x3f, 0x57, 0x60, 0x42, 0x2e, 0x0a, 0xf5, 0x6d, 0x18, 0x43, 0x4d, 0xba, + 0x37, 0x84, 0x29, 0x17, 0xfb, 0xe9, 0xc1, 0x88, 0x75, 0xc1, 0xa4, 0xde, 0x80, 0xd3, 0x3e, 0x22, + 0x98, 0x1f, 0x0f, 0xf9, 0x54, 0x4b, 0xf8, 0x99, 0x16, 0x02, 0xe8, 0x88, 0x60, 0x76, 0x1e, 0x4c, + 0xf8, 0xe2, 0x57, 0xf5, 0x17, 0x0a, 0x40, 0x77, 0x15, 0x1d, 0xcb, 0xb9, 0x31, 0x7d, 0x72, 0x47, + 0xd3, 0xa7, 0x7e, 0x16, 0xce, 0x18, 0xc9, 0xd0, 0xa3, 0x61, 0xa8, 0xa6, 0xed, 0x01, 0x11, 0x9c, + 0x6f, 0xc2, 0xc8, 0x71, 0xcf, 0x60, 0x06, 0xa0, 0xfd, 0x4a, 0x81, 0xf3, 0x62, 0xdd, 0xd5, 0x3b, + 0x6b, 0x8e, 0x85, 0x0f, 0x65, 0xf8, 0x5d, 0x87, 0xa2, 0x58, 0x87, 0x86, 0x4d, 0xfb, 0x85, 0xac, + 0x97, 0x06, 0x5b, 0xc4, 0x1c, 0x6a, 0x12, 0x45, 0x5a, 0xf4, 0x6c, 0xb2, 0xec, 0xc0, 0x6b, 0xa0, + 0x8e, 0x61, 0xba, 0xce, 0x8e, 0xed, 0x37, 0xe5, 0xd9, 0x24, 0xba, 0x6f, 0xf0, 0x5e, 0xed, 0x43, + 0x98, 0x4e, 0xea, 0x24, 0xec, 0x8e, 0xec, 0x29, 0xe5, 0x48, 0x7b, 0x4a, 0xfb, 0x00, 0xce, 0x33, + 0xc8, 0x7a, 0x47, 0x0e, 0x09, 0x7b, 0x8f, 0x0f, 0xfd, 0x89, 0x02, 0xd3, 0x49, 0x6c, 0xa1, 0xf7, + 0xfd, 0xe3, 0x3b, 0x73, 0xf5, 0x54, 0xdc, 0x9d, 0x0f, 0x14, 0xa5, 0x3e, 0x05, 0x25, 0x23, 0x86, + 0xab, 0xfd, 0x5a, 0x81, 0x99, 0x77, 0xbd, 0x3d, 0xdc, 0xc4, 0x3e, 0x6a, 0x24, 0x2c, 0x7c, 0x82, + 0x33, 0xba, 0x05, 0x95, 0x5e, 0xad, 0x4e, 0x6c, 0x4e, 0xbf, 0x54, 0xa0, 0x5c, 0x47, 0x0d, 0xe4, + 0x98, 0x38, 0x34, 0x56, 0x07, 0x79, 0x0a, 0x1b, 0x3b, 0x76, 0x83, 0x60, 0xff, 0x28, 0xd6, 0x16, + 0x05, 0xc4, 0x0a, 0x43, 0x50, 0xef, 0x40, 0x99, 0xc5, 0x50, 0xc3, 0xb6, 0x24, 0xe8, 0x70, 0xd1, + 0xb4, 0x88, 0xf8, 0x0f, 0x8e, 0x47, 0xf3, 0xc3, 0xa9, 0xae, 0xde, 0xc2, 0x1d, 0xef, 0xc2, 0xb8, + 0x90, 0x7a, 0x14, 0x8d, 0x25, 0xaf, 0xfa, 0x5d, 0x18, 0xdf, 0xe6, 0xd0, 0x42, 0xc7, 0xc1, 0xe2, + 0x9a, 0x64, 0xd2, 0x2e, 0x42, 0x71, 0xd3, 0xc6, 0x6d, 0x9a, 0x2f, 0xdf, 0x73, 0xf7, 0xb1, 0xa3, + 0x9e, 0x83, 0x51, 0x9b, 0xc6, 0x20, 0xa6, 0xd5, 0xa4, 0xce, 0x1b, 0x9a, 0x0e, 0x65, 0x49, 0x26, + 0x3d, 0xff, 0x3d, 0xc8, 0xef, 0x1c, 0xec, 0x0b, 0xe5, 0xfb, 0xe5, 0x4e, 0x2b, 0xad, 0x46, 0x83, + 0x02, 0xd8, 0xce, 0xee, 0x2d, 0xdc, 0xd1, 0x29, 0xa7, 0x76, 0x17, 0xa6, 0xba, 0x98, 0xc2, 0x2b, + 0x6f, 0xc2, 0x28, 0xa1, 0x6a, 0xf4, 0x1e, 0x1b, 0xf1, 0xbc, 0x21, 0xa6, 0xb3, 0xce, 0x79, 0xb4, + 0x9f, 0x29, 0x50, 0xdc, 0x20, 0x88, 0xb4, 0xc2, 0xd5, 0xf1, 0x58, 0x93, 0xbd, 0xf4, 0x80, 0xae, + 0x43, 0x49, 0xea, 0x20, 0x6c, 0x7a, 0x16, 0x0a, 0x41, 0xc7, 0x31, 0xe3, 0xe9, 0x2d, 0xd0, 0x2e, + 0x91, 0xdc, 0x3e, 0x0b, 0x05, 0x13, 0x11, 0x73, 0xcf, 0x76, 0x76, 0x8d, 0x96, 0x27, 0xb6, 0x16, + 0xc8, 0xae, 0xfb, 0x9e, 0xf6, 0x40, 0x81, 0xb3, 0x1c, 0x74, 0x83, 0xf8, 0x18, 0x35, 0x9f, 0xa0, + 0x79, 0x3e, 0x9c, 0x8b, 0x6b, 0x22, 0x8c, 0xfc, 0x0e, 0x5c, 0x68, 0x20, 0x82, 0x03, 0x62, 0xec, + 0x3b, 0x6e, 0xdb, 0x31, 0xb6, 0x1b, 0xae, 0xb9, 0x1f, 0x37, 0x79, 0x9a, 0x13, 0xdc, 0xa2, 0xe3, + 0x75, 0x3a, 0xdc, 0x35, 0x3f, 0xea, 0x9f, 0x5c, 0xd2, 0x3f, 0xda, 0x67, 0x79, 0x98, 0xbc, 0xe3, + 0x92, 0xee, 0xa6, 0x7f, 0x1e, 0x8a, 0xb6, 0x63, 0x36, 0x5a, 0x16, 0x36, 0x02, 0x0f, 0x3b, 0x44, + 0xb8, 0x6c, 0x52, 0x74, 0x6e, 0xd0, 0x3e, 0x75, 0x09, 0x26, 0xe4, 0x2e, 0xce, 0x48, 0x21, 0xb2, + 0xb6, 0xef, 0xb8, 0xd8, 0xbe, 0xbd, 0x91, 0x74, 0xe4, 0xb8, 0x91, 0xf4, 0x36, 0x94, 0x79, 0x8a, + 0x63, 0x10, 0x97, 0xe9, 0x6e, 0x55, 0xc6, 0x86, 0x49, 0x90, 0x8a, 0x9c, 0xfb, 0x9e, 0x4b, 0x6d, + 0xb4, 0x9e, 0xc4, 0x02, 0x78, 0x90, 0x83, 0xf3, 0x6c, 0x32, 0x56, 0x5c, 0x7f, 0xd3, 0x25, 0xb6, + 0xb3, 0x2b, 0x67, 0xe5, 0x0a, 0x9c, 0x39, 0x70, 0x09, 0xda, 0x6e, 0x60, 0x03, 0x91, 0xf8, 0xd4, + 0x97, 0xc5, 0xc0, 0x12, 0x11, 0x73, 0xde, 0xe3, 0xd9, 0xfc, 0x71, 0x3d, 0xfb, 0x04, 0x5c, 0xf1, + 0xfb, 0x1c, 0x94, 0xde, 0xb7, 0x89, 0x13, 0x39, 0x7b, 0x3f, 0x80, 0x29, 0xc7, 0x25, 0xd8, 0x30, + 0xdd, 0x66, 0xd3, 0x26, 0x4d, 0xec, 0x10, 0x7a, 0x2b, 0xa0, 0x17, 0x94, 0x5a, 0x1f, 0x2d, 0xe8, + 0xae, 0xc2, 0x37, 0x42, 0x36, 0xbd, 0x4c, 0x71, 0xba, 0xed, 0x20, 0xb5, 0x36, 0x93, 0x3f, 0xc1, + 0xda, 0xcc, 0x13, 0x70, 0x20, 0x86, 0x72, 0xe8, 0x3f, 0x11, 0x47, 0x74, 0x98, 0x6c, 0xf3, 0x2e, + 0x9e, 0x6c, 0x0f, 0x51, 0x2c, 0x11, 0x50, 0x2c, 0xeb, 0x2e, 0xb4, 0xbb, 0x0d, 0xed, 0x6f, 0x0a, + 0x4c, 0x8b, 0xc1, 0xff, 0xcf, 0x82, 0x57, 0x03, 0x66, 0x7a, 0xec, 0x7b, 0x7c, 0xe5, 0xae, 0xdf, + 0xe5, 0xa1, 0xc8, 0x42, 0x65, 0xb8, 0xea, 0xab, 0x30, 0xc1, 0xf3, 0x24, 0xcc, 0x2b, 0x49, 0x13, + 0x7a, 0xd8, 0x56, 0x7f, 0x0c, 0xb3, 0x91, 0x58, 0x6d, 0xda, 0x3b, 0xb6, 0x69, 0x58, 0xd8, 0x71, + 0x9b, 0xb6, 0x23, 0x4a, 0x04, 0x7c, 0x7f, 0xf4, 0xcb, 0x5b, 0x96, 0x29, 0x8f, 0xfe, 0x74, 0x37, + 0xc4, 0x33, 0xa8, 0xe5, 0x28, 0x92, 0xba, 0x08, 0x17, 0xa4, 0xac, 0x6e, 0xc1, 0xc0, 0x60, 0xc9, + 0x41, 0xc0, 0xf6, 0xca, 0x84, 0x3e, 0x23, 0x08, 0x96, 0xc3, 0x71, 0x96, 0x42, 0x04, 0xea, 0x1b, + 0x50, 0x91, 0xbc, 0x2d, 0x67, 0xdb, 0x75, 0x2c, 0x7a, 0x1a, 0x0b, 0xd6, 0x11, 0xc6, 0x3a, 0x2d, + 0xc6, 0xef, 0xcb, 0x61, 0xc1, 0x79, 0x09, 0xca, 0x92, 0xb3, 0xe1, 0x19, 0xce, 0x0e, 0x09, 0x2a, + 0xa3, 0x8c, 0x41, 0x1e, 0x52, 0xef, 0x79, 0x77, 0x76, 0x48, 0xa0, 0x2e, 0xc0, 0x79, 0x49, 0xe7, + 0xf9, 0xae, 0xe7, 0x06, 0xa8, 0xc1, 0xa9, 0xc7, 0x18, 0xf5, 0x59, 0x31, 0xb8, 0x2e, 0xc6, 0x18, + 0xcf, 0x12, 0x3c, 0x23, 0x79, 0x0e, 0x58, 0xb0, 0x35, 0x7c, 0x6c, 0x62, 0xdb, 0x23, 0x52, 0xb5, + 0x71, 0xc6, 0x5b, 0x15, 0x44, 0x32, 0x20, 0x33, 0x12, 0xae, 0x9e, 0x86, 0xa1, 0x24, 0x67, 0x4b, + 0xac, 0x89, 0x0d, 0x28, 0xb1, 0x19, 0x30, 0x9a, 0x98, 0xa0, 0xc8, 0x82, 0x7c, 0x79, 0x90, 0x29, + 0xb8, 0x2d, 0x78, 0xf4, 0xa2, 0x15, 0x6d, 0x6a, 0x15, 0x98, 0xbe, 0xb1, 0x87, 0x6c, 0x67, 0x1d, + 0xf9, 0xa8, 0x89, 0x09, 0xf6, 0xe5, 0xea, 0xd0, 0xf6, 0x60, 0xa6, 0x67, 0x44, 0x68, 0x72, 0x1b, + 0xc0, 0x0b, 0x7b, 0xb3, 0x52, 0x49, 0x56, 0x94, 0x0f, 0x95, 0x48, 0x42, 0x45, 0x00, 0xb4, 0x69, + 0x38, 0xb7, 0x72, 0x7b, 0xb9, 0x57, 0x03, 0x0b, 0xce, 0x27, 0xfa, 0x85, 0xfc, 0x5b, 0x29, 0xf2, + 0x5f, 0x7a, 0xb4, 0xfc, 0x95, 0xa6, 0x95, 0x21, 0xfd, 0xf3, 0x1c, 0xcc, 0xd0, 0x93, 0xb1, 0xde, + 0x89, 0x84, 0x71, 0xb1, 0x43, 0xde, 0x87, 0x72, 0xe2, 0x5c, 0x10, 0x3e, 0x1f, 0xf6, 0x58, 0x28, + 0xc5, 0x8f, 0x85, 0xb4, 0x42, 0x70, 0x3e, 0xad, 0x10, 0xfc, 0x24, 0xc2, 0xbb, 0x03, 0x95, 0x5e, + 0x7f, 0x84, 0x71, 0xbe, 0xc4, 0xd2, 0x1f, 0x96, 0x2e, 0x50, 0x9b, 0x7a, 0xbd, 0x1f, 0xcf, 0xf8, + 0x37, 0x24, 0x35, 0x85, 0xd4, 0xb1, 0xe9, 0xfa, 0x96, 0x5e, 0x0c, 0xa2, 0x9d, 0x6c, 0x02, 0x36, + 0xda, 0xc8, 0xcb, 0x98, 0x80, 0xa0, 0x8d, 0xbc, 0x13, 0x98, 0x00, 0x0a, 0xf3, 0x3f, 0x32, 0x01, + 0x3a, 0x54, 0x7a, 0xfd, 0x11, 0xd6, 0xfd, 0x47, 0xa8, 0x25, 0xc2, 0xed, 0x5a, 0xa6, 0xdb, 0xdb, + 0xc8, 0x13, 0xde, 0x66, 0xf4, 0xda, 0xbf, 0x14, 0x98, 0xbe, 0xd3, 0x6a, 0x34, 0xec, 0x1d, 0x1b, + 0xfb, 0xf1, 0xdb, 0xd6, 0x0a, 0x9c, 0x76, 0xe4, 0x88, 0xf0, 0xee, 0x5c, 0x1f, 0xd3, 0x42, 0x24, + 0xbd, 0xcb, 0xfa, 0x5f, 0xed, 0xd2, 0x79, 0x98, 0xe9, 0xb1, 0x5e, 0x78, 0xf4, 0x1c, 0x8c, 0xf2, + 0xdb, 0x08, 0x3f, 0x02, 0x79, 0x43, 0xdb, 0x84, 0xa7, 0x23, 0x27, 0xe9, 0x9a, 0xb3, 0xe3, 0xd6, + 0x3b, 0xab, 0x28, 0x08, 0xaf, 0xd1, 0xfc, 0xfd, 0x25, 0x37, 0xec, 0xfb, 0x8b, 0xf6, 0xa9, 0x02, + 0xd3, 0x09, 0x60, 0x09, 0x79, 0x09, 0x26, 0x03, 0x82, 0xfc, 0x78, 0x0e, 0xbe, 0x7a, 0x4a, 0x2f, + 0xb0, 0x5e, 0x9e, 0x81, 0x3f, 0x50, 0x14, 0x55, 0x03, 0xc0, 0x8e, 0x15, 0xbb, 0x77, 0xad, 0x2a, + 0xfa, 0x69, 0xec, 0x58, 0x21, 0x4d, 0xbd, 0x0c, 0x45, 0x23, 0x0a, 0x56, 0x2f, 0x42, 0xc1, 0xe8, + 0x72, 0x69, 0xff, 0xcc, 0x41, 0x39, 0xa1, 0x86, 0xfa, 0x14, 0x8c, 0x25, 0x24, 0x8b, 0x36, 0x15, + 0x7a, 0x44, 0x7b, 0x93, 0x89, 0x4c, 0xfe, 0x04, 0x1e, 0xd1, 0xb6, 0xa0, 0xe0, 0x61, 0x9f, 0x66, + 0x25, 0xc4, 0x3e, 0xc0, 0xe2, 0x72, 0xb7, 0x38, 0x6c, 0xde, 0xd7, 0x45, 0xd0, 0xa3, 0x70, 0xea, + 0x4d, 0x18, 0xa1, 0x5b, 0x89, 0xe5, 0x02, 0xc3, 0xa7, 0x93, 0x9b, 0x36, 0x6e, 0xeb, 0x0c, 0xa0, + 0x7e, 0x1a, 0xc6, 0xa5, 0xb7, 0x7f, 0x08, 0x33, 0x3d, 0x73, 0xde, 0x2d, 0xaf, 0x91, 0x43, 0xc3, + 0x76, 0x76, 0x5c, 0xb1, 0xa5, 0x2f, 0x0f, 0xf0, 0xe6, 0xc2, 0x10, 0xc6, 0xc8, 0x21, 0xfd, 0xab, + 0x21, 0x78, 0x26, 0x63, 0xa5, 0x9e, 0x98, 0x88, 0x8f, 0xa0, 0x28, 0x2e, 0xf2, 0x02, 0xf2, 0x3d, + 0x28, 0xb0, 0x73, 0xd1, 0x67, 0x21, 0xe6, 0x28, 0x67, 0x00, 0x38, 0xe1, 0x6f, 0xed, 0x4b, 0x1a, + 0x9b, 0x12, 0x77, 0xd3, 0xc7, 0x21, 0x48, 0xbd, 0x0d, 0x93, 0xb6, 0x85, 0x1d, 0x62, 0x93, 0x8e, + 0xb1, 0x8f, 0x3b, 0x62, 0x39, 0x5f, 0xe9, 0x13, 0x74, 0xd6, 0x04, 0xcb, 0x2d, 0xdc, 0xd1, 0x0b, + 0x76, 0xb7, 0xa1, 0xfd, 0x3b, 0x0f, 0x67, 0x53, 0x44, 0xa6, 0x65, 0x0d, 0xca, 0x89, 0x64, 0x0d, + 0xdf, 0x86, 0x11, 0x76, 0xe6, 0x72, 0xbd, 0x9f, 0xef, 0x17, 0xa4, 0xa9, 0x46, 0x8c, 0xe1, 0x31, + 0xdc, 0xdb, 0x63, 0x87, 0xc6, 0xc8, 0xd1, 0x0f, 0x8d, 0x8b, 0x50, 0xe2, 0x9b, 0xc4, 0x30, 0x7d, + 0x8c, 0x08, 0xb6, 0xd8, 0xc6, 0x1b, 0xd1, 0x8b, 0xbc, 0xf7, 0x06, 0xef, 0xa4, 0xb1, 0x51, 0x90, + 0xf1, 0x58, 0x3d, 0x26, 0x63, 0x23, 0xef, 0x65, 0xa5, 0x23, 0x1a, 0xa6, 0xaa, 0x30, 0xe1, 0xb9, + 0x81, 0xcd, 0x62, 0xcd, 0x38, 0x03, 0x0a, 0xdb, 0xea, 0x3b, 0x30, 0x16, 0xb8, 0x2d, 0xdf, 0xc4, + 0x95, 0x89, 0x74, 0x7d, 0xe3, 0x19, 0x23, 0x75, 0xdf, 0x06, 0xa3, 0xd7, 0x05, 0x1f, 0x8b, 0xaa, + 0x51, 0x35, 0xb4, 0xbf, 0xe6, 0x01, 0xba, 0x47, 0x6d, 0x5a, 0xb6, 0xa2, 0x9c, 0x48, 0xb6, 0xf2, + 0xb6, 0x38, 0xf5, 0xf9, 0xc4, 0xbf, 0x98, 0x40, 0xb3, 0xf0, 0x61, 0xfc, 0xe4, 0x5f, 0x6f, 0x20, + 0xdb, 0x21, 0xf8, 0x90, 0xf0, 0xc3, 0x3f, 0xe6, 0x95, 0x7c, 0xc2, 0x2b, 0x27, 0x35, 0x91, 0xeb, + 0x50, 0xe0, 0x2f, 0xdf, 0xfc, 0xae, 0x3c, 0x9a, 0x1a, 0xe8, 0x63, 0x9a, 0xd6, 0x11, 0x31, 0xf7, + 0xa8, 0xba, 0xfc, 0x35, 0x97, 0xdd, 0x92, 0xc1, 0x0d, 0x7f, 0xab, 0x57, 0xba, 0x4b, 0xa3, 0x81, + 0xec, 0x26, 0xb6, 0xc2, 0x59, 0x97, 0x8b, 0x83, 0x77, 0xd3, 0x79, 0xef, 0xce, 0xed, 0xf8, 0x11, + 0xe7, 0xf6, 0x0c, 0x94, 0x8d, 0xb8, 0x38, 0xed, 0xef, 0x0a, 0xcc, 0xdc, 0x6d, 0x3b, 0xd8, 0x5a, + 0x17, 0xce, 0x5a, 0xb3, 0xc2, 0xa4, 0xe9, 0x3e, 0x94, 0xa4, 0x0b, 0xe9, 0x41, 0x1b, 0x26, 0xc2, + 0x8f, 0x9c, 0x1b, 0x89, 0xc3, 0xa6, 0x9b, 0xda, 0xe1, 0x45, 0x3b, 0xa8, 0x1d, 0x77, 0x61, 0x92, + 0xf8, 0x88, 0x5d, 0x62, 0x3d, 0x64, 0xcb, 0x74, 0xec, 0xf2, 0xa3, 0x40, 0xef, 0x71, 0xfa, 0x75, + 0x64, 0xfb, 0xab, 0x0a, 0x3b, 0x29, 0x65, 0x93, 0x26, 0x02, 0xd4, 0xac, 0xb8, 0xa2, 0x6c, 0x15, + 0x47, 0x85, 0x68, 0x26, 0x54, 0x7a, 0xcd, 0x0c, 0x9f, 0x32, 0x0b, 0x21, 0x7b, 0xe6, 0x07, 0x27, + 0xa9, 0x46, 0xae, 0x59, 0x3a, 0x78, 0xe1, 0xef, 0x85, 0x3f, 0x9c, 0x85, 0xb3, 0xf4, 0x74, 0x5c, + 0xf7, 0x5d, 0xe2, 0x9a, 0x6e, 0x63, 0x03, 0xfb, 0x07, 0xb6, 0x89, 0xd5, 0xf7, 0x61, 0x8c, 0x27, + 0x64, 0x6a, 0xe6, 0xab, 0x41, 0x2c, 0x5d, 0xad, 0x5e, 0xea, 0x47, 0x26, 0x34, 0xdf, 0x87, 0xc9, + 0x68, 0xc9, 0x5b, 0x7d, 0xe9, 0xd1, 0x7c, 0xb1, 0x12, 0x7d, 0xf5, 0xe5, 0xc1, 0x88, 0xb9, 0xa8, + 0xab, 0x8a, 0xba, 0x09, 0xa3, 0xec, 0x04, 0x53, 0x5f, 0xc8, 0x62, 0x8c, 0x56, 0xc2, 0xab, 0x17, + 0xfb, 0x50, 0x85, 0xb8, 0x1f, 0x43, 0x29, 0x7e, 0x32, 0xaa, 0xaf, 0x3c, 0x92, 0x35, 0x59, 0xdd, + 0xad, 0xd6, 0x06, 0x25, 0x0f, 0x45, 0x7e, 0x08, 0xe3, 0xa2, 0x2a, 0xa5, 0x66, 0xba, 0x3a, 0x5e, + 0x3e, 0xad, 0x5e, 0xee, 0x4b, 0x27, 0xe6, 0xc4, 0x0f, 0x2b, 0x87, 0xb2, 0xe2, 0xa5, 0xd6, 0xfa, + 0xf0, 0x26, 0x4a, 0x7f, 0xd5, 0xf9, 0x81, 0xe9, 0x85, 0xcc, 0x0f, 0x60, 0x8c, 0x17, 0x52, 0xb2, + 0x17, 0x58, 0xac, 0x2c, 0x96, 0xbd, 0xc0, 0xe2, 0xf5, 0x98, 0xab, 0x0a, 0x35, 0x27, 0x51, 0xd7, + 0xc8, 0x36, 0x27, 0xbd, 0xca, 0x92, 0x6d, 0x4e, 0x56, 0xed, 0xa5, 0x01, 0xc5, 0x58, 0x51, 0x44, + 0xcd, 0x5c, 0xaa, 0x69, 0x35, 0x95, 0xea, 0x2b, 0x03, 0x52, 0x0b, 0x69, 0x2e, 0x94, 0xe2, 0x6f, + 0xfd, 0xd9, 0xeb, 0x2f, 0xf5, 0x3b, 0x85, 0xec, 0xf5, 0x97, 0xf1, 0x09, 0x81, 0x0b, 0xa5, 0xf8, + 0x23, 0x7d, 0xb6, 0xc0, 0xd4, 0x0f, 0x05, 0xb2, 0x05, 0x66, 0xbc, 0xfd, 0xb7, 0x60, 0x2a, 0xf9, + 0xf6, 0xad, 0x66, 0x4e, 0x4a, 0xc6, 0xdb, 0x7d, 0xf5, 0xea, 0xe0, 0x0c, 0x42, 0xac, 0x01, 0x13, + 0xf2, 0x6d, 0x59, 0xcd, 0xdc, 0x3e, 0x89, 0x57, 0xf3, 0xea, 0x5c, 0x7f, 0xc2, 0x70, 0x6d, 0xb6, + 0x60, 0x2a, 0x59, 0xc5, 0xc9, 0xb6, 0x2b, 0xa3, 0xfe, 0x95, 0x6d, 0x57, 0x66, 0x81, 0xa8, 0x05, + 0x53, 0xc9, 0xda, 0x45, 0xb6, 0xd8, 0x8c, 0xaa, 0x4f, 0xb6, 0xd8, 0xcc, 0xb2, 0x88, 0x0f, 0xe5, + 0xc4, 0xfd, 0x3e, 0x7b, 0x27, 0xa6, 0x97, 0x41, 0xb2, 0x77, 0x62, 0x56, 0xe1, 0xe0, 0x53, 0x05, + 0xce, 0xa7, 0xde, 0xbc, 0xd4, 0xeb, 0x03, 0x5e, 0xb0, 0x62, 0x25, 0x85, 0xea, 0x6b, 0x43, 0x72, + 0x09, 0x35, 0x48, 0xef, 0x4d, 0xbe, 0x36, 0xe8, 0x05, 0xaf, 0x9f, 0xe9, 0x19, 0xb7, 0xd6, 0xab, + 0x8a, 0xfa, 0x53, 0x50, 0x7b, 0x3f, 0x80, 0x52, 0xaf, 0x0d, 0xfd, 0xc1, 0x60, 0x75, 0x61, 0x18, + 0x16, 0x61, 0xf2, 0x27, 0x0a, 0x9c, 0x4b, 0xfb, 0x3a, 0x56, 0x7d, 0x35, 0x73, 0x83, 0x64, 0x7f, + 0xe7, 0x5b, 0xbd, 0x3e, 0x1c, 0x93, 0xd0, 0xa1, 0x0d, 0x53, 0xc9, 0xa4, 0x29, 0x7b, 0xa1, 0x67, + 0x64, 0x91, 0xd9, 0x0b, 0x3d, 0x2b, 0x1f, 0xbb, 0xaa, 0xa8, 0x87, 0x70, 0xa6, 0xe7, 0x33, 0x69, + 0x35, 0x13, 0x28, 0xeb, 0x9b, 0xf1, 0xea, 0xb5, 0x21, 0x38, 0xb8, 0xec, 0x05, 0xaf, 0xfb, 0x35, + 0x89, 0xcc, 0xde, 0x3e, 0x82, 0x09, 0xd9, 0x95, 0x1d, 0xc6, 0x12, 0x9f, 0xa0, 0x64, 0x87, 0xb1, + 0xe4, 0x77, 0x25, 0xf5, 0xcf, 0x72, 0x7f, 0x7a, 0x38, 0xab, 0x7c, 0xf5, 0x70, 0x56, 0xf9, 0xfa, + 0xe1, 0xac, 0xf2, 0xcb, 0x6f, 0x66, 0x4f, 0x7d, 0xf5, 0xcd, 0xec, 0xa9, 0xbf, 0x7c, 0x33, 0x7b, + 0x0a, 0xaa, 0xa6, 0xdb, 0xcc, 0xc0, 0xa9, 0x9f, 0x0e, 0x13, 0xcd, 0x75, 0xe5, 0xc3, 0xbb, 0xbb, + 0x36, 0xd9, 0x6b, 0x6d, 0xd7, 0x4c, 0xb7, 0x39, 0x6f, 0xba, 0x41, 0xd3, 0x0d, 0xe6, 0x7d, 0xdc, + 0x40, 0x1d, 0xec, 0xcf, 0x1f, 0x2c, 0x84, 0x3f, 0xd9, 0x05, 0x21, 0x98, 0x4f, 0xff, 0x17, 0x85, + 0x37, 0x69, 0x4b, 0x36, 0x7e, 0x93, 0xcb, 0xaf, 0x6f, 0xfe, 0xe0, 0xb7, 0xb9, 0xe9, 0x75, 0x29, + 0x9c, 0x4a, 0xab, 0x6d, 0x8a, 0xe1, 0x3f, 0x77, 0x07, 0xb6, 0xe8, 0xc0, 0x96, 0x1c, 0x78, 0x98, + 0xd3, 0xd2, 0x07, 0xb6, 0x6e, 0xae, 0xd7, 0xe5, 0x7b, 0xcc, 0x3f, 0x72, 0x15, 0x49, 0xb4, 0xb8, + 0x48, 0xa9, 0x16, 0x17, 0x25, 0xd9, 0xf6, 0x18, 0xfb, 0x4f, 0x80, 0x57, 0xff, 0x13, 0x00, 0x00, + 0xff, 0xff, 0x56, 0x54, 0x09, 0x86, 0x48, 0x31, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -3727,7 +3727,7 @@ type ViewProtocolServiceClient interface { // Broadcast a transaction to the network, optionally waiting for full confirmation. BroadcastTransaction(ctx context.Context, in *BroadcastTransactionRequest, opts ...grpc.CallOption) (*BroadcastTransactionResponse, error) // Query for owned position IDs for the given trading pair and in the given position state. - OwnedPositionIds(ctx context.Context, in *OwnedPositionIdsRequest, opts ...grpc.CallOption) (*OwnedPositionIdsResponse, error) + OwnedPositionIds(ctx context.Context, in *OwnedPositionIdsRequest, opts ...grpc.CallOption) (ViewProtocolService_OwnedPositionIdsClient, error) // Authorize a transaction plan and build the transaction. AuthorizeAndBuild(ctx context.Context, in *AuthorizeAndBuildRequest, opts ...grpc.CallOption) (*AuthorizeAndBuildResponse, error) } @@ -4058,13 +4058,36 @@ func (c *viewProtocolServiceClient) BroadcastTransaction(ctx context.Context, in return out, nil } -func (c *viewProtocolServiceClient) OwnedPositionIds(ctx context.Context, in *OwnedPositionIdsRequest, opts ...grpc.CallOption) (*OwnedPositionIdsResponse, error) { - out := new(OwnedPositionIdsResponse) - err := c.cc.Invoke(ctx, "/penumbra.view.v1alpha1.ViewProtocolService/OwnedPositionIds", in, out, opts...) +func (c *viewProtocolServiceClient) OwnedPositionIds(ctx context.Context, in *OwnedPositionIdsRequest, opts ...grpc.CallOption) (ViewProtocolService_OwnedPositionIdsClient, error) { + stream, err := c.cc.NewStream(ctx, &_ViewProtocolService_serviceDesc.Streams[6], "/penumbra.view.v1alpha1.ViewProtocolService/OwnedPositionIds", opts...) if err != nil { return nil, err } - return out, nil + x := &viewProtocolServiceOwnedPositionIdsClient{stream} + if err := x.ClientStream.SendMsg(in); err != nil { + return nil, err + } + if err := x.ClientStream.CloseSend(); err != nil { + return nil, err + } + return x, nil +} + +type ViewProtocolService_OwnedPositionIdsClient interface { + Recv() (*OwnedPositionIdsResponse, error) + grpc.ClientStream +} + +type viewProtocolServiceOwnedPositionIdsClient struct { + grpc.ClientStream +} + +func (x *viewProtocolServiceOwnedPositionIdsClient) Recv() (*OwnedPositionIdsResponse, error) { + m := new(OwnedPositionIdsResponse) + if err := x.ClientStream.RecvMsg(m); err != nil { + return nil, err + } + return m, nil } func (c *viewProtocolServiceClient) AuthorizeAndBuild(ctx context.Context, in *AuthorizeAndBuildRequest, opts ...grpc.CallOption) (*AuthorizeAndBuildResponse, error) { @@ -4128,7 +4151,7 @@ type ViewProtocolServiceServer interface { // Broadcast a transaction to the network, optionally waiting for full confirmation. BroadcastTransaction(context.Context, *BroadcastTransactionRequest) (*BroadcastTransactionResponse, error) // Query for owned position IDs for the given trading pair and in the given position state. - OwnedPositionIds(context.Context, *OwnedPositionIdsRequest) (*OwnedPositionIdsResponse, error) + OwnedPositionIds(*OwnedPositionIdsRequest, ViewProtocolService_OwnedPositionIdsServer) error // Authorize a transaction plan and build the transaction. AuthorizeAndBuild(context.Context, *AuthorizeAndBuildRequest) (*AuthorizeAndBuildResponse, error) } @@ -4197,8 +4220,8 @@ func (*UnimplementedViewProtocolServiceServer) TransactionPlanner(ctx context.Co func (*UnimplementedViewProtocolServiceServer) BroadcastTransaction(ctx context.Context, req *BroadcastTransactionRequest) (*BroadcastTransactionResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method BroadcastTransaction not implemented") } -func (*UnimplementedViewProtocolServiceServer) OwnedPositionIds(ctx context.Context, req *OwnedPositionIdsRequest) (*OwnedPositionIdsResponse, error) { - return nil, status.Errorf(codes.Unimplemented, "method OwnedPositionIds not implemented") +func (*UnimplementedViewProtocolServiceServer) OwnedPositionIds(req *OwnedPositionIdsRequest, srv ViewProtocolService_OwnedPositionIdsServer) error { + return status.Errorf(codes.Unimplemented, "method OwnedPositionIds not implemented") } func (*UnimplementedViewProtocolServiceServer) AuthorizeAndBuild(ctx context.Context, req *AuthorizeAndBuildRequest) (*AuthorizeAndBuildResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method AuthorizeAndBuild not implemented") @@ -4586,22 +4609,25 @@ func _ViewProtocolService_BroadcastTransaction_Handler(srv interface{}, ctx cont return interceptor(ctx, in, info, handler) } -func _ViewProtocolService_OwnedPositionIds_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { - in := new(OwnedPositionIdsRequest) - if err := dec(in); err != nil { - return nil, err - } - if interceptor == nil { - return srv.(ViewProtocolServiceServer).OwnedPositionIds(ctx, in) - } - info := &grpc.UnaryServerInfo{ - Server: srv, - FullMethod: "/penumbra.view.v1alpha1.ViewProtocolService/OwnedPositionIds", - } - handler := func(ctx context.Context, req interface{}) (interface{}, error) { - return srv.(ViewProtocolServiceServer).OwnedPositionIds(ctx, req.(*OwnedPositionIdsRequest)) +func _ViewProtocolService_OwnedPositionIds_Handler(srv interface{}, stream grpc.ServerStream) error { + m := new(OwnedPositionIdsRequest) + if err := stream.RecvMsg(m); err != nil { + return err } - return interceptor(ctx, in, info, handler) + return srv.(ViewProtocolServiceServer).OwnedPositionIds(m, &viewProtocolServiceOwnedPositionIdsServer{stream}) +} + +type ViewProtocolService_OwnedPositionIdsServer interface { + Send(*OwnedPositionIdsResponse) error + grpc.ServerStream +} + +type viewProtocolServiceOwnedPositionIdsServer struct { + grpc.ServerStream +} + +func (x *viewProtocolServiceOwnedPositionIdsServer) Send(m *OwnedPositionIdsResponse) error { + return x.ServerStream.SendMsg(m) } func _ViewProtocolService_AuthorizeAndBuild_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { @@ -4682,10 +4708,6 @@ var _ViewProtocolService_serviceDesc = grpc.ServiceDesc{ MethodName: "BroadcastTransaction", Handler: _ViewProtocolService_BroadcastTransaction_Handler, }, - { - MethodName: "OwnedPositionIds", - Handler: _ViewProtocolService_OwnedPositionIds_Handler, - }, { MethodName: "AuthorizeAndBuild", Handler: _ViewProtocolService_AuthorizeAndBuild_Handler, @@ -4722,6 +4744,11 @@ var _ViewProtocolService_serviceDesc = grpc.ServiceDesc{ Handler: _ViewProtocolService_TransactionInfo_Handler, ServerStreams: true, }, + { + StreamName: "OwnedPositionIds", + Handler: _ViewProtocolService_OwnedPositionIds_Handler, + ServerStreams: true, + }, }, Metadata: "penumbra/view/v1alpha1/view.proto", } @@ -7587,19 +7614,17 @@ func (m *OwnedPositionIdsResponse) MarshalToSizedBuffer(dAtA []byte) (int, error _ = i var l int _ = l - if len(m.PositionIds) > 0 { - for iNdEx := len(m.PositionIds) - 1; iNdEx >= 0; iNdEx-- { - { - size, err := m.PositionIds[iNdEx].MarshalToSizedBuffer(dAtA[:i]) - if err != nil { - return 0, err - } - i -= size - i = encodeVarintView(dAtA, i, uint64(size)) + if m.PositionId != nil { + { + size, err := m.PositionId.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err } - i-- - dAtA[i] = 0xa + i -= size + i = encodeVarintView(dAtA, i, uint64(size)) } + i-- + dAtA[i] = 0xa } return len(dAtA) - i, nil } @@ -8716,11 +8741,9 @@ func (m *OwnedPositionIdsResponse) Size() (n int) { } var l int _ = l - if len(m.PositionIds) > 0 { - for _, e := range m.PositionIds { - l = e.Size() - n += 1 + l + sovView(uint64(l)) - } + if m.PositionId != nil { + l = m.PositionId.Size() + n += 1 + l + sovView(uint64(l)) } return n } @@ -15011,7 +15034,7 @@ func (m *OwnedPositionIdsResponse) Unmarshal(dAtA []byte) error { switch fieldNum { case 1: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field PositionIds", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field PositionId", wireType) } var msglen int for shift := uint(0); ; shift += 7 { @@ -15038,8 +15061,10 @@ func (m *OwnedPositionIdsResponse) Unmarshal(dAtA []byte) error { if postIndex > l { return io.ErrUnexpectedEOF } - m.PositionIds = append(m.PositionIds, &v1alpha15.PositionId{}) - if err := m.PositionIds[len(m.PositionIds)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if m.PositionId == nil { + m.PositionId = &v1alpha15.PositionId{} + } + if err := m.PositionId.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex From 21382210474855199b012ec72a7bb4a13ad7c26b Mon Sep 17 00:00:00 2001 From: mmsqe Date: Wed, 2 Aug 2023 01:06:23 +0800 Subject: [PATCH 13/37] fix: reduce get bech32 prefix when get signer (#1231) * add missing getFeePayer for clienttypes * add missing getFeePayer for feetypes * apply in penumbra * add change doc --------- Co-authored-by: Justin Tieri <37750742+jtieri@users.noreply.github.com> --- CHANGELOG.md | 1 + relayer/chains/cosmos/log.go | 8 ++++++++ relayer/chains/penumbra/log.go | 13 +++++++++++++ 3 files changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4d46967e8..93f9f9358 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -21,6 +21,7 @@ * [\#1208](https://github.com/cosmos/relayer/pull/1208) Replace gogo/protobuf to cosmos/gogoproto. * [\#1221](https://github.com/cosmos/relayer/pull/1221) Update cometbft to v0.37.2 and ibc-go to v7.2.0. * [\#1226](https://github.com/cosmos/relayer/pull/1226) Avoid invalid Bech32 prefix error in parallel tests when sdk Config get overwritten by each other in single process. +* [\#1231](https://github.com/cosmos/relayer/pull/1231) Reduce get bech32 prefix when get signer. ## v0.9.3 diff --git a/relayer/chains/cosmos/log.go b/relayer/chains/cosmos/log.go index f6e6564a0..22342e549 100644 --- a/relayer/chains/cosmos/log.go +++ b/relayer/chains/cosmos/log.go @@ -164,11 +164,19 @@ func getFeePayer(tx *typestx.Tx) string { case *clienttypes.MsgUpdateClient: // Same failure mode as MsgCreateClient. return firstMsg.Signer + case *clienttypes.MsgUpgradeClient: + return firstMsg.Signer case *clienttypes.MsgSubmitMisbehaviour: // Same failure mode as MsgCreateClient. return firstMsg.Signer + case *feetypes.MsgRegisterPayee: + return firstMsg.Relayer case *feetypes.MsgRegisterCounterpartyPayee: return firstMsg.Relayer + case *feetypes.MsgPayPacketFee: + return firstMsg.Signer + case *feetypes.MsgPayPacketFeeAsync: + return firstMsg.PacketFee.RefundAddress default: return firstMsg.GetSigners()[0].String() } diff --git a/relayer/chains/penumbra/log.go b/relayer/chains/penumbra/log.go index 3c4661cc5..b1f110cf0 100644 --- a/relayer/chains/penumbra/log.go +++ b/relayer/chains/penumbra/log.go @@ -6,6 +6,7 @@ import ( "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" typestx "github.com/cosmos/cosmos-sdk/types/tx" + feetypes "github.com/cosmos/ibc-go/v7/modules/apps/29-fee/types" transfertypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types" clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" "github.com/cosmos/relayer/v2/relayer/provider" @@ -151,6 +152,18 @@ func getFeePayer(tx *typestx.Tx) string { case *clienttypes.MsgUpdateClient: // Same failure mode as MsgCreateClient. return firstMsg.Signer + case *clienttypes.MsgUpgradeClient: + return firstMsg.Signer + case *clienttypes.MsgSubmitMisbehaviour: + return firstMsg.Signer + case *feetypes.MsgRegisterPayee: + return firstMsg.Relayer + case *feetypes.MsgRegisterCounterpartyPayee: + return firstMsg.Relayer + case *feetypes.MsgPayPacketFee: + return firstMsg.Signer + case *feetypes.MsgPayPacketFeeAsync: + return firstMsg.PacketFee.RefundAddress default: return firstMsg.GetSigners()[0].String() } From a63cd79b779d603fa89228e1b06fb99fcfb96119 Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Wed, 2 Aug 2023 14:10:39 -0700 Subject: [PATCH 14/37] update setup-go action (#1251) --- .github/workflows/build.yml | 2 +- .github/workflows/interchaintest.yml | 35 +++++++++++----------------- .github/workflows/release.yml | 4 ++-- 3 files changed, 17 insertions(+), 24 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 24fd93e17..ea896ce8f 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -15,7 +15,7 @@ jobs: - name: Set up Go 1.20 uses: actions/setup-go@v4 with: - go-version: 1.20.2 + go-version: '1.20' # setup gopath - name: Set PATH diff --git a/.github/workflows/interchaintest.yml b/.github/workflows/interchaintest.yml index cffb9647e..f136b26d1 100644 --- a/.github/workflows/interchaintest.yml +++ b/.github/workflows/interchaintest.yml @@ -11,10 +11,9 @@ jobs: runs-on: self-hosted steps: - name: Set up Go 1.20 - uses: actions/setup-go@v1 + uses: actions/setup-go@v4 with: - go-version: 1.20 - id: go + go-version: '1.20' - name: checkout relayer uses: actions/checkout@v2 @@ -33,10 +32,9 @@ jobs: runs-on: self-hosted steps: - name: Set up Go 1.20 - uses: actions/setup-go@v1 + uses: actions/setup-go@v4 with: - go-version: 1.20 - id: go + go-version: '1.20' - name: checkout relayer uses: actions/checkout@v2 @@ -55,10 +53,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up Go 1.20 - uses: actions/setup-go@v1 + uses: actions/setup-go@v4 with: - go-version: 1.20 - id: go + go-version: '1.20' - name: checkout relayer uses: actions/checkout@v2 @@ -77,10 +74,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up Go 1.20 - uses: actions/setup-go@v1 + uses: actions/setup-go@v4 with: - go-version: 1.20 - id: go + go-version: '1.20' - name: checkout relayer uses: actions/checkout@v2 @@ -99,10 +95,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up Go 1.20 - uses: actions/setup-go@v1 + uses: actions/setup-go@v4 with: - go-version: 1.20 - id: go + go-version: '1.20' - name: checkout relayer uses: actions/checkout@v2 @@ -121,10 +116,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up Go 1.20 - uses: actions/setup-go@v1 + uses: actions/setup-go@v4 with: - go-version: 1.20 - id: go + go-version: '1.20' - name: checkout relayer uses: actions/checkout@v2 @@ -143,10 +137,9 @@ jobs: runs-on: ubuntu-latest steps: - name: Set up Go 1.20 - uses: actions/setup-go@v1 + uses: actions/setup-go@v4 with: - go-version: 1.20 - id: go + go-version: '1.20' - name: checkout relayer uses: actions/checkout@v2 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5e9673730..97ca73ced 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -15,9 +15,9 @@ jobs: fetch-depth: 0 - name: Set up Go - uses: actions/setup-go@v2 + uses: actions/setup-go@v4 with: - go-version: 1.20 + go-version: '1.20' - run: echo https://github.com/cosmos/relayer/blob/${GITHUB_REF#refs/tags/}/CHANGELOG.md#${GITHUB_REF#refs/tags/} > ../release_notes.md From 4598b0ec8a1ecf65f3fd42c4d8931333c831c043 Mon Sep 17 00:00:00 2001 From: KyleMoser Date: Tue, 15 Aug 2023 13:32:39 -0400 Subject: [PATCH 15/37] fix for feegrants (#1256) * Feegrant support * Test case for address caching bugfix * Bugfix for SDK account prefix. Feegrant test passing. * Mutex for signer expanded to include feegrantees * Cleaned up feegrant test case * Cleaned up feegrant test case * Cleaned up feegrant test case * check round robin feegrant behavior by counting number of TXs each grantee signer * module updates from merge * v0.47.0 with bech32 address cache fix * Move SetAddrCacheEnabled to NewRelayer func for full coverage * Do not hardcode chain id in feegrant test case * Wait more blocks for ibc transfers * disable cosmos SDK bech32 address cache for rly start command * Fix sloppy comments/remove unnecessary code * Faster acc caching unit test * Penumbra provider feegrant support * Merge upstream * Fixed merge issue where feegrant config wasn't being written to file * feegrant patch for cosmos-sdk v0.47.1 * merge from main * Update to cosmos-sdk v0.47.2 * Increase test case blocks to wait * Fixed data race by moving test parallelization after relayer wallet build * Increased TestScenarioICAChannelClose timeout height * Cleanup feegrant test case * Fixed race condition in sequence guard w/ mutex * Automatic retry for TX lookup in feegrant test case * Disable cosmos SDK address cache on app initialization via main package init() * Added docs for feegrant in the advanced usage guide * Removed commented out code * Removed commented out code * Added detail to feegrant docs, fixed minor issue with test case * Added detail to feegrant docs, fixed minor issue with test case --------- Co-authored-by: Andrew Gouin Co-authored-by: Kyle --- cmd/feegrant.go | 20 +- docs/advanced_usage.md | 28 +- interchaintest/acc_cache_test.go | 3 +- interchaintest/feegrant_test.go | 779 +++++++++++++++--------------- main.go | 10 +- relayer/chains/cosmos/feegrant.go | 33 +- 6 files changed, 462 insertions(+), 411 deletions(-) diff --git a/cmd/feegrant.go b/cmd/feegrant.go index 3d0c86421..edb66d800 100644 --- a/cmd/feegrant.go +++ b/cmd/feegrant.go @@ -26,6 +26,7 @@ func feegrantConfigureBaseCmd(a *appState) *cobra.Command { func feegrantConfigureBasicCmd(a *appState) *cobra.Command { var numGrantees int var update bool + var delete bool var updateGrantees bool var grantees []string @@ -61,6 +62,19 @@ func feegrantConfigureBasicCmd(a *appState) *cobra.Command { return fmt.Errorf("could not get granter key from '%s'", granterKeyOrAddr) } + if delete { + fmt.Printf("Deleting %s feegrant configuration\n", chain) + + cfgErr := a.performConfigLockingOperation(cmd.Context(), func() error { + chain := a.config.Chains[chain] + oldProv := chain.ChainProvider.(*cosmos.CosmosProvider) + oldProv.PCfg.FeeGrants = nil + return nil + }) + cobra.CheckErr(cfgErr) + return nil + } + if prov.PCfg.FeeGrants != nil && granterKey != prov.PCfg.FeeGrants.GranterKey && !update { return fmt.Errorf("you specified granter '%s' which is different than configured feegranter '%s', but you did not specify the --overwrite-granter flag", granterKeyOrAddr, prov.PCfg.FeeGrants.GranterKey) } else if prov.PCfg.FeeGrants != nil && granterKey != prov.PCfg.FeeGrants.GranterKey && update { @@ -126,11 +140,13 @@ func feegrantConfigureBasicCmd(a *appState) *cobra.Command { return nil }, } + + cmd.Flags().BoolVar(&delete, "delete", false, "delete the feegrant configuration") cmd.Flags().BoolVar(&update, "overwrite-granter", false, "allow overwriting the existing granter") cmd.Flags().BoolVar(&updateGrantees, "overwrite-grantees", false, "allow overwriting existing grantees") cmd.Flags().IntVar(&numGrantees, "num-grantees", 10, "number of grantees that will be feegranted with basic allowances") - cmd.Flags().StringSliceVar(&grantees, "grantees", []string{}, "comma separated list of grantee key names (keys are created if they do not exist)") - cmd.MarkFlagsMutuallyExclusive("num-grantees", "grantees") + cmd.Flags().StringSliceVar(&grantees, "grantees", nil, "comma separated list of grantee key names (keys are created if they do not exist)") + cmd.MarkFlagsMutuallyExclusive("num-grantees", "grantees", "delete") memoFlag(a.viper, cmd) return cmd diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index 1b6c37595..bcfd1d2ac 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -51,7 +51,33 @@ Use cases for configuring the `--time-threshold` flag: \* It is not mandatory for relayers to include the `MsgUpdateClient` when relaying packets, however most, if not all relayers currently do. ---- +## Feegrants + +Feegrant configurations can be applied to each chain in the relayer. Note that Osmosis does not support Feegrants. + + - When feegrants are enabled, TXs will be signed in round robin by the grantees. + - Feegrants reduce sequencing error rates by using many signing addresses instead of a single signer, especially when broadcast-mode is set to single. + - Feegrants are especially useful when relaying on multiple paths with the same wallet. + - Funds are held on a single address, the "granter". + +For example, configure feegrants for Kujira: +- `rly chains configure feegrant basicallowance kujira default --num-grantees 10` +- Note: above, `default` is the key that will need to contain funds (the granter) +- 10 grantees will be configured, so those 10 address will sign TXs in round robin order. + + +You may also choose to specify the exact names of your grantees: +- `rly chains configure feegrant basicallowance kujira default --grantees "kuji1,kuji2,kuji3"` + +Rerunning the feegrant command will simply confirm your configuration is correct, e.g. "Valid grant found for granter `addr` and grantee `addr2`" but will not create additional TXs on chain. Rerunning the feegrant command can therefore be a good way to check what addresses exist. +To remove the feegrant configuration: +- `rly chains configure feegrant basicallowance kujira --delete` + + + + +--- + [<-- Create Path Across Chains](create-path-across-chain.md) - [Troubleshooting -->](./troubleshooting.md) diff --git a/interchaintest/acc_cache_test.go b/interchaintest/acc_cache_test.go index a2d0fbbc2..3c255bbaa 100644 --- a/interchaintest/acc_cache_test.go +++ b/interchaintest/acc_cache_test.go @@ -4,7 +4,6 @@ import ( "testing" "github.com/cometbft/cometbft/crypto/ed25519" - "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types" "github.com/stretchr/testify/require" ) @@ -14,7 +13,7 @@ import ( // This will cause the AccAddress.String() to print out unexpected prefixes. // If this function fails you are on an unsafe SDK version that should NOT be used with the relayer. func TestAccCacheBugfix(t *testing.T) { - types.SetAddrCacheEnabled(false) + sdk.SetAddrCacheEnabled(false) // Use a random key priv := ed25519.GenPrivKey() diff --git a/interchaintest/feegrant_test.go b/interchaintest/feegrant_test.go index d120c15b5..6c35f2793 100644 --- a/interchaintest/feegrant_test.go +++ b/interchaintest/feegrant_test.go @@ -93,429 +93,444 @@ func TestRelayerFeeGrant(t *testing.T) { // GasAdjustment: 1.3, // }} - // Chain Factory - cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ - {Name: "gaia", ChainName: "gaia", Version: "v7.0.3", NumValidators: &nv, NumFullNodes: &nf}, - {Name: "osmosis", ChainName: "osmosis", Version: "v14.0.1", NumValidators: &nv, NumFullNodes: &nf}, - }) - - chains, err := cf.Chains(t.Name()) - require.NoError(t, err) - gaia, osmosis := chains[0], chains[1] - - // Relayer Factory to construct relayer - r := NewRelayerFactory(RelayerConfig{ - Processor: relayer.ProcessorEvents, - InitialBlockHistory: 100, - }).Build(t, nil, "") - - processor.PathProcMessageCollector = make(chan *processor.PathProcessorMessageResp, 10000) - - // Prep Interchain - const ibcPath = "gaia-osmosis" - ic := interchaintest.NewInterchain(). - AddChain(gaia). - AddChain(osmosis). - AddRelayer(r, "relayer"). - AddLink(interchaintest.InterchainLink{ - Chain1: gaia, - Chain2: osmosis, - Relayer: r, - Path: ibcPath, - }) - - // Reporter/logs - rep := testreporter.NewNopReporter() - eRep := rep.RelayerExecReporter(t) - - client, network := interchaintest.DockerSetup(t) - - // Build interchain - require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ - TestName: t.Name(), - Client: client, - NetworkID: network, - - SkipPathCreation: false, - })) - - t.Parallel() - - // Get Channel ID - gaiaChans, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) - require.NoError(t, err) - gaiaChannel := gaiaChans[0] - osmosisChannel := gaiaChans[0].Counterparty - - // Create and Fund User Wallets - fundAmount := int64(10_000_000) - - // Tiny amount of funding, not enough to pay for a single TX fee (the GRANTER should be paying the fee) - granteeFundAmount := int64(10) - granteeKeyPrefix := "grantee1" - grantee2KeyPrefix := "grantee2" - grantee3KeyPrefix := "grantee3" - granterKeyPrefix := "default" - - mnemonicAny := genMnemonic(t) - gaiaGranterWallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, granterKeyPrefix, mnemonicAny, int64(fundAmount), gaia) - require.NoError(t, err) - - mnemonicAny = genMnemonic(t) - gaiaGranteeWallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, granteeKeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) - require.NoError(t, err) - - mnemonicAny = genMnemonic(t) - gaiaGrantee2Wallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, grantee2KeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) - require.NoError(t, err) - - mnemonicAny = genMnemonic(t) - gaiaGrantee3Wallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, grantee3KeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) - require.NoError(t, err) - - mnemonicAny = genMnemonic(t) - osmosisUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, "recipient", mnemonicAny, int64(fundAmount), osmosis) - require.NoError(t, err) - - mnemonicAny = genMnemonic(t) - gaiaUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, "recipient", mnemonicAny, int64(fundAmount), gaia) - require.NoError(t, err) - - mnemonic := gaiaGranterWallet.Mnemonic() - fmt.Printf("Wallet mnemonic: %s\n", mnemonic) - - rand.Seed(time.Now().UnixNano()) - - //IBC chain config is unrelated to RELAYER config so this step is necessary - if err := r.RestoreKey(ctx, - eRep, - gaia.Config(), - gaiaGranterWallet.KeyName(), - gaiaGranterWallet.Mnemonic(), - ); err != nil { - t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + var tests = [][]*interchaintest.ChainSpec{ + { + {Name: "gaia", ChainName: "gaia", Version: "v7.0.3", NumValidators: &nv, NumFullNodes: &nf}, + {Name: "osmosis", ChainName: "osmosis", Version: "v14.0.1", NumValidators: &nv, NumFullNodes: &nf}, + }, + { + {Name: "gaia", ChainName: "gaia", Version: "v7.0.3", NumValidators: &nv, NumFullNodes: &nf}, + {Name: "kujira", ChainName: "kujira", Version: "v0.8.7", NumValidators: &nv, NumFullNodes: &nf}, + }, } - //IBC chain config is unrelated to RELAYER config so this step is necessary - if err := r.RestoreKey(ctx, - eRep, - gaia.Config(), - gaiaGranteeWallet.KeyName(), - gaiaGranteeWallet.Mnemonic(), - ); err != nil { - t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) - } + for _, tt := range tests { + testname := fmt.Sprintf("%s,%s", tt[0].Name, tt[1].Name) + t.Run(testname, func(t *testing.T) { + + // Chain Factory + cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), tt) + + chains, err := cf.Chains(t.Name()) + require.NoError(t, err) + gaia, osmosis := chains[0], chains[1] + + // Relayer Factory to construct relayer + r := NewRelayerFactory(RelayerConfig{ + Processor: relayer.ProcessorEvents, + InitialBlockHistory: 100, + }).Build(t, nil, "") + + processor.PathProcMessageCollector = make(chan *processor.PathProcessorMessageResp, 10000) + + // Prep Interchain + const ibcPath = "gaia-osmosis" + ic := interchaintest.NewInterchain(). + AddChain(gaia). + AddChain(osmosis). + AddRelayer(r, "relayer"). + AddLink(interchaintest.InterchainLink{ + Chain1: gaia, + Chain2: osmosis, + Relayer: r, + Path: ibcPath, + }) + + // Reporter/logs + rep := testreporter.NewNopReporter() + eRep := rep.RelayerExecReporter(t) + + client, network := interchaintest.DockerSetup(t) + + // Build interchain + require.NoError(t, ic.Build(ctx, eRep, interchaintest.InterchainBuildOptions{ + TestName: t.Name(), + Client: client, + NetworkID: network, + + SkipPathCreation: false, + })) + + t.Parallel() + + // Get Channel ID + gaiaChans, err := r.GetChannels(ctx, eRep, gaia.Config().ChainID) + require.NoError(t, err) + gaiaChannel := gaiaChans[0] + osmosisChannel := gaiaChans[0].Counterparty + + // Create and Fund User Wallets + fundAmount := int64(10_000_000) + + // Tiny amount of funding, not enough to pay for a single TX fee (the GRANTER should be paying the fee) + granteeFundAmount := int64(10) + granteeKeyPrefix := "grantee1" + grantee2KeyPrefix := "grantee2" + grantee3KeyPrefix := "grantee3" + granterKeyPrefix := "default" + + mnemonicAny := genMnemonic(t) + gaiaGranterWallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, granterKeyPrefix, mnemonicAny, int64(fundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaGranteeWallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, granteeKeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaGrantee2Wallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, grantee2KeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaGrantee3Wallet, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, grantee3KeyPrefix, mnemonicAny, int64(granteeFundAmount), gaia) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + osmosisUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, "recipient", mnemonicAny, int64(fundAmount), osmosis) + require.NoError(t, err) + + mnemonicAny = genMnemonic(t) + gaiaUser, err := interchaintest.GetAndFundTestUserWithMnemonic(ctx, "recipient", mnemonicAny, int64(fundAmount), gaia) + require.NoError(t, err) + + mnemonic := gaiaGranterWallet.Mnemonic() + fmt.Printf("Wallet mnemonic: %s\n", mnemonic) + + rand.Seed(time.Now().UnixNano()) + + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGranterWallet.KeyName(), + gaiaGranterWallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } - //IBC chain config is unrelated to RELAYER config so this step is necessary - if err := r.RestoreKey(ctx, - eRep, - gaia.Config(), - gaiaGrantee2Wallet.KeyName(), - gaiaGrantee2Wallet.Mnemonic(), - ); err != nil { - t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) - } + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGranteeWallet.KeyName(), + gaiaGranteeWallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } - //IBC chain config is unrelated to RELAYER config so this step is necessary - if err := r.RestoreKey(ctx, - eRep, - gaia.Config(), - gaiaGrantee3Wallet.KeyName(), - gaiaGrantee3Wallet.Mnemonic(), - ); err != nil { - t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) - } + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGrantee2Wallet.KeyName(), + gaiaGrantee2Wallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } - //IBC chain config is unrelated to RELAYER config so this step is necessary - if err := r.RestoreKey(ctx, - eRep, - osmosis.Config(), - osmosisUser.KeyName(), - osmosisUser.Mnemonic(), - ); err != nil { - t.Fatalf("failed to restore granter key to relayer for chain %s: %s", osmosis.Config().ChainID, err.Error()) - } + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + gaia.Config(), + gaiaGrantee3Wallet.KeyName(), + gaiaGrantee3Wallet.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } - //IBC chain config is unrelated to RELAYER config so this step is necessary - if err := r.RestoreKey(ctx, - eRep, - osmosis.Config(), - gaiaUser.KeyName(), - gaiaUser.Mnemonic(), - ); err != nil { - t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) - } + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + osmosis.Config(), + osmosisUser.KeyName(), + osmosisUser.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", osmosis.Config().ChainID, err.Error()) + } - gaiaGranteeAddr := gaiaGranteeWallet.FormattedAddress() - gaiaGrantee2Addr := gaiaGrantee2Wallet.FormattedAddress() - gaiaGrantee3Addr := gaiaGrantee3Wallet.FormattedAddress() - gaiaGranterAddr := gaiaGranterWallet.FormattedAddress() + //IBC chain config is unrelated to RELAYER config so this step is necessary + if err := r.RestoreKey(ctx, + eRep, + osmosis.Config(), + gaiaUser.KeyName(), + gaiaUser.Mnemonic(), + ); err != nil { + t.Fatalf("failed to restore granter key to relayer for chain %s: %s", gaia.Config().ChainID, err.Error()) + } - granteeCsv := gaiaGranteeWallet.KeyName() + "," + gaiaGrantee2Wallet.KeyName() + "," + gaiaGrantee3Wallet.KeyName() + gaiaGranteeAddr := gaiaGranteeWallet.FormattedAddress() + gaiaGrantee2Addr := gaiaGrantee2Wallet.FormattedAddress() + gaiaGrantee3Addr := gaiaGrantee3Wallet.FormattedAddress() + gaiaGranterAddr := gaiaGranterWallet.FormattedAddress() - //You MUST run the configure feegrant command prior to starting the relayer, otherwise it'd be like you never set it up at all (within this test) - //Note that Gaia supports feegrants, but Osmosis does not (x/feegrant module, or any compatible module, is not included in Osmosis SDK app modules) - localRelayer := r.(*Relayer) - res := localRelayer.sys().Run(logger, "chains", "configure", "feegrant", "basicallowance", gaia.Config().ChainID, gaiaGranterWallet.KeyName(), "--grantees", granteeCsv, "--overwrite-granter") - if res.Err != nil { - fmt.Printf("configure feegrant results: %s\n", res.Stdout.String()) - t.Fatalf("failed to rly config feegrants: %v", res.Err) - } + granteeCsv := gaiaGranteeWallet.KeyName() + "," + gaiaGrantee2Wallet.KeyName() + "," + gaiaGrantee3Wallet.KeyName() - //Map of feegranted chains and the feegrant info for the chain - feegrantedChains := map[string]*chainFeegrantInfo{} - feegrantedChains[gaia.Config().ChainID] = &chainFeegrantInfo{granter: gaiaGranterAddr, grantees: []string{gaiaGranteeAddr, gaiaGrantee2Addr, gaiaGrantee3Addr}} + //You MUST run the configure feegrant command prior to starting the relayer, otherwise it'd be like you never set it up at all (within this test) + //Note that Gaia supports feegrants, but Osmosis does not (x/feegrant module, or any compatible module, is not included in Osmosis SDK app modules) + localRelayer := r.(*Relayer) + res := localRelayer.sys().Run(logger, "chains", "configure", "feegrant", "basicallowance", gaia.Config().ChainID, gaiaGranterWallet.KeyName(), "--grantees", granteeCsv, "--overwrite-granter") + if res.Err != nil { + fmt.Printf("configure feegrant results: %s\n", res.Stdout.String()) + t.Fatalf("failed to rly config feegrants: %v", res.Err) + } - time.Sleep(14 * time.Second) //commit a couple blocks - r.StartRelayer(ctx, eRep, ibcPath) + //Map of feegranted chains and the feegrant info for the chain + feegrantedChains := map[string]*chainFeegrantInfo{} + feegrantedChains[gaia.Config().ChainID] = &chainFeegrantInfo{granter: gaiaGranterAddr, grantees: []string{gaiaGranteeAddr, gaiaGrantee2Addr, gaiaGrantee3Addr}} - // Send Transaction - amountToSend := int64(1_000) + time.Sleep(14 * time.Second) //commit a couple blocks + r.StartRelayer(ctx, eRep, ibcPath) - gaiaDstAddress := types.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, gaiaUser.Address()) - osmosisDstAddress := types.MustBech32ifyAddressBytes(gaia.Config().Bech32Prefix, osmosisUser.Address()) + // Send Transaction + amountToSend := int64(1_000) - gaiaHeight, err := gaia.Height(ctx) - require.NoError(t, err) + gaiaDstAddress := types.MustBech32ifyAddressBytes(osmosis.Config().Bech32Prefix, gaiaUser.Address()) + osmosisDstAddress := types.MustBech32ifyAddressBytes(gaia.Config().Bech32Prefix, osmosisUser.Address()) - osmosisHeight, err := osmosis.Height(ctx) - require.NoError(t, err) + gaiaHeight, err := gaia.Height(ctx) + require.NoError(t, err) - var eg errgroup.Group - var gaiaTx ibc.Tx + osmosisHeight, err := osmosis.Height(ctx) + require.NoError(t, err) - eg.Go(func() error { - gaiaTx, err = gaia.SendIBCTransfer(ctx, gaiaChannel.ChannelID, gaiaUser.KeyName(), ibc.WalletAmount{ - Address: gaiaDstAddress, - Denom: gaia.Config().Denom, - Amount: amountToSend, - }, - ibc.TransferOptions{}, - ) - if err != nil { - return err - } - if err := gaiaTx.Validate(); err != nil { - return err - } - - _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+20, gaiaTx.Packet) - return err - }) + var eg errgroup.Group + var gaiaTx ibc.Tx - eg.Go(func() error { - tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ - Address: osmosisDstAddress, - Denom: osmosis.Config().Denom, - Amount: amountToSend, - }, - ibc.TransferOptions{}, - ) - if err != nil { - return err - } - if err := tx.Validate(); err != nil { - return err - } - _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) - return err - }) + eg.Go(func() error { + gaiaTx, err = gaia.SendIBCTransfer(ctx, gaiaChannel.ChannelID, gaiaUser.KeyName(), ibc.WalletAmount{ + Address: gaiaDstAddress, + Denom: gaia.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := gaiaTx.Validate(); err != nil { + return err + } - eg.Go(func() error { - tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ - Address: osmosisDstAddress, - Denom: osmosis.Config().Denom, - Amount: amountToSend, - }, - ibc.TransferOptions{}, - ) - if err != nil { - return err - } - if err := tx.Validate(); err != nil { - return err - } - _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) - return err - }) + _, err = testutil.PollForAck(ctx, gaia, gaiaHeight, gaiaHeight+20, gaiaTx.Packet) + return err + }) + + eg.Go(func() error { + tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ + Address: osmosisDstAddress, + Denom: osmosis.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := tx.Validate(); err != nil { + return err + } + _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) + return err + }) + + eg.Go(func() error { + tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ + Address: osmosisDstAddress, + Denom: osmosis.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := tx.Validate(); err != nil { + return err + } + _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) + return err + }) + + eg.Go(func() error { + tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ + Address: osmosisDstAddress, + Denom: osmosis.Config().Denom, + Amount: amountToSend, + }, + ibc.TransferOptions{}, + ) + if err != nil { + return err + } + if err := tx.Validate(); err != nil { + return err + } + _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) + return err + }) + + require.NoError(t, err) + require.NoError(t, eg.Wait()) + + feegrantMsgSigners := map[string][]string{} //chain to list of signers + + for len(processor.PathProcMessageCollector) > 0 { + select { + case curr, ok := <-processor.PathProcMessageCollector: + if ok && curr.Error == nil && curr.SuccessfulTx { + cProv, cosmProv := curr.DestinationChain.(*cosmos.CosmosProvider) + if cosmProv { + chain := cProv.PCfg.ChainID + feegrantInfo, isFeegrantedChain := feegrantedChains[chain] + if isFeegrantedChain && !strings.Contains(cProv.PCfg.KeyDirectory, t.Name()) { + //This would indicate that a parallel test is inserting msgs into the queue. + //We can safely skip over any messages inserted by other test cases. + fmt.Println("Skipping PathProcessorMessageResp from unrelated Parallel test case") + continue + } - eg.Go(func() error { - tx, err := osmosis.SendIBCTransfer(ctx, osmosisChannel.ChannelID, osmosisUser.KeyName(), ibc.WalletAmount{ - Address: osmosisDstAddress, - Denom: osmosis.Config().Denom, - Amount: amountToSend, - }, - ibc.TransferOptions{}, - ) - if err != nil { - return err - } - if err := tx.Validate(); err != nil { - return err - } - _, err = testutil.PollForAck(ctx, osmosis, osmosisHeight, osmosisHeight+20, tx.Packet) - return err - }) - - require.NoError(t, err) - require.NoError(t, eg.Wait()) - - feegrantMsgSigners := map[string][]string{} //chain to list of signers - - for len(processor.PathProcMessageCollector) > 0 { - select { - case curr, ok := <-processor.PathProcMessageCollector: - if ok && curr.Error == nil && curr.SuccessfulTx { - cProv, cosmProv := curr.DestinationChain.(*cosmos.CosmosProvider) - if cosmProv { - chain := cProv.PCfg.ChainID - feegrantInfo, isFeegrantedChain := feegrantedChains[chain] - if isFeegrantedChain && !strings.Contains(cProv.PCfg.KeyDirectory, t.Name()) { - //This would indicate that a parallel test is inserting msgs into the queue. - //We can safely skip over any messages inserted by other test cases. - fmt.Println("Skipping PathProcessorMessageResp from unrelated Parallel test case") - continue - } + done := cProv.SetSDKContext() + + hash, err := hex.DecodeString(curr.Response.TxHash) + require.Nil(t, err) + txResp, err := TxWithRetry(ctx, cProv.RPCClient, hash) + require.Nil(t, err) + + require.Nil(t, err) + dc := cProv.Cdc.TxConfig.TxDecoder() + tx, err := dc(txResp.Tx) + require.Nil(t, err) + builder, err := cProv.Cdc.TxConfig.WrapTxBuilder(tx) + require.Nil(t, err) + txFinder := builder.(protoTxProvider) + fullTx := txFinder.GetProtoTx() + isFeegrantedMsg := false + + msgs := "" + msgType := "" + for _, m := range fullTx.GetMsgs() { + msgType = types.MsgTypeURL(m) + //We want all IBC transfers (on an open channel/connection) to be feegranted in round robin fashion + if msgType == "/ibc.core.channel.v1.MsgRecvPacket" || msgType == "/ibc.core.channel.v1.MsgAcknowledgement" { + isFeegrantedMsg = true + msgs += msgType + ", " + } else { + msgs += msgType + ", " + } + } - done := cProv.SetSDKContext() - - hash, err := hex.DecodeString(curr.Response.TxHash) - require.Nil(t, err) - txResp, err := TxWithRetry(ctx, cProv.RPCClient, hash) - require.Nil(t, err) - - require.Nil(t, err) - dc := cProv.Cdc.TxConfig.TxDecoder() - tx, err := dc(txResp.Tx) - require.Nil(t, err) - builder, err := cProv.Cdc.TxConfig.WrapTxBuilder(tx) - require.Nil(t, err) - txFinder := builder.(protoTxProvider) - fullTx := txFinder.GetProtoTx() - isFeegrantedMsg := false - - msgs := "" - msgType := "" - for _, m := range fullTx.GetMsgs() { - msgType = types.MsgTypeURL(m) - //We want all IBC transfers (on an open channel/connection) to be feegranted in round robin fashion - if msgType == "/ibc.core.channel.v1.MsgRecvPacket" || msgType == "/ibc.core.channel.v1.MsgAcknowledgement" { - isFeegrantedMsg = true - msgs += msgType + ", " - } else { - msgs += msgType + ", " - } - } + //It's required that TXs be feegranted in a round robin fashion for this chain and message type + if isFeegrantedChain && isFeegrantedMsg { + fmt.Printf("Msg types: %+v\n", msgs) + signers := fullTx.GetSigners() + require.Equal(t, len(signers), 1) + granter := fullTx.FeeGranter() + + //Feegranter for the TX that was signed on chain must be the relayer chain's configured feegranter + require.Equal(t, feegrantInfo.granter, granter.String()) + require.NotEmpty(t, granter) + + for _, msg := range fullTx.GetMsgs() { + msgType = types.MsgTypeURL(msg) + //We want all IBC transfers (on an open channel/connection) to be feegranted in round robin fashion + if msgType == "/ibc.core.channel.v1.MsgRecvPacket" { + c := msg.(*chantypes.MsgRecvPacket) + appData := c.Packet.GetData() + tokenTransfer := &transfertypes.FungibleTokenPacketData{} + err := tokenTransfer.Unmarshal(appData) + if err == nil { + fmt.Printf("%+v\n", tokenTransfer) + } else { + fmt.Println(string(appData)) + } + } + } - //It's required that TXs be feegranted in a round robin fashion for this chain and message type - if isFeegrantedChain && isFeegrantedMsg { - fmt.Printf("Msg types: %+v\n", msgs) - signers := fullTx.GetSigners() - require.Equal(t, len(signers), 1) - granter := fullTx.FeeGranter() - - //Feegranter for the TX that was signed on chain must be the relayer chain's configured feegranter - require.Equal(t, feegrantInfo.granter, granter.String()) - require.NotEmpty(t, granter) - - for _, msg := range fullTx.GetMsgs() { - msgType = types.MsgTypeURL(msg) - //We want all IBC transfers (on an open channel/connection) to be feegranted in round robin fashion - if msgType == "/ibc.core.channel.v1.MsgRecvPacket" { - c := msg.(*chantypes.MsgRecvPacket) - appData := c.Packet.GetData() - tokenTransfer := &transfertypes.FungibleTokenPacketData{} - err := tokenTransfer.Unmarshal(appData) - if err == nil { - fmt.Printf("%+v\n", tokenTransfer) + //Grantee for the TX that was signed on chain must be a configured grantee in the relayer's chain feegrants. + //In addition, the grantee must be used in round robin fashion + //expectedGrantee := nextGrantee(feegrantInfo) + actualGrantee := signers[0].String() + signerList, ok := feegrantMsgSigners[chain] + if ok { + signerList = append(signerList, actualGrantee) + feegrantMsgSigners[chain] = signerList } else { - fmt.Println(string(appData)) + feegrantMsgSigners[chain] = []string{actualGrantee} } + fmt.Printf("Chain: %s, msg type: %s, height: %d, signer: %s, granter: %s\n", chain, msgType, curr.Response.Height, actualGrantee, granter.String()) } + done() } - - //Grantee for the TX that was signed on chain must be a configured grantee in the relayer's chain feegrants. - //In addition, the grantee must be used in round robin fashion - //expectedGrantee := nextGrantee(feegrantInfo) - actualGrantee := signers[0].String() - signerList, ok := feegrantMsgSigners[chain] - if ok { - signerList = append(signerList, actualGrantee) - feegrantMsgSigners[chain] = signerList - } else { - feegrantMsgSigners[chain] = []string{actualGrantee} - } - fmt.Printf("Chain: %s, msg type: %s, height: %d, signer: %s, granter: %s\n", chain, msgType, curr.Response.Height, actualGrantee, granter.String()) } - done() + default: + fmt.Println("Unknown channel message") } } - default: - fmt.Println("Unknown channel message") - } - } - for chain, signers := range feegrantMsgSigners { - require.Equal(t, chain, gaia.Config().ChainID) - signerCountMap := map[string]int{} + for chain, signers := range feegrantMsgSigners { + require.Equal(t, chain, gaia.Config().ChainID) + signerCountMap := map[string]int{} - for _, signer := range signers { - count, ok := signerCountMap[signer] - if ok { - signerCountMap[signer] = count + 1 - } else { - signerCountMap[signer] = 1 - } - } + for _, signer := range signers { + count, ok := signerCountMap[signer] + if ok { + signerCountMap[signer] = count + 1 + } else { + signerCountMap[signer] = 1 + } + } - highestCount := 0 - for _, count := range signerCountMap { - if count > highestCount { - highestCount = count - } - } + highestCount := 0 + for _, count := range signerCountMap { + if count > highestCount { + highestCount = count + } + } - //At least one feegranter must have signed a TX - require.GreaterOrEqual(t, highestCount, 1) + //At least one feegranter must have signed a TX + require.GreaterOrEqual(t, highestCount, 1) - //All of the feegrantees must have signed at least one TX - expectedFeegrantInfo := feegrantedChains[chain] - require.Equal(t, len(signerCountMap), len(expectedFeegrantInfo.grantees)) + //All of the feegrantees must have signed at least one TX + expectedFeegrantInfo := feegrantedChains[chain] + require.Equal(t, len(signerCountMap), len(expectedFeegrantInfo.grantees)) - // verify that TXs were signed in a round robin fashion. - // no grantee should have signed more TXs than any other grantee (off by one is allowed). - for signer, count := range signerCountMap { - fmt.Printf("signer %s signed %d feegranted TXs \n", signer, count) - require.LessOrEqual(t, highestCount-count, 1) - } - } + // verify that TXs were signed in a round robin fashion. + // no grantee should have signed more TXs than any other grantee (off by one is allowed). + for signer, count := range signerCountMap { + fmt.Printf("signer %s signed %d feegranted TXs \n", signer, count) + require.LessOrEqual(t, highestCount-count, 1) + } + } + + // Trace IBC Denom + gaiaDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(osmosisChannel.PortID, osmosisChannel.ChannelID, gaia.Config().Denom)) + gaiaIbcDenom := gaiaDenomTrace.IBCDenom() - // Trace IBC Denom - gaiaDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(osmosisChannel.PortID, osmosisChannel.ChannelID, gaia.Config().Denom)) - gaiaIbcDenom := gaiaDenomTrace.IBCDenom() + osmosisDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(gaiaChannel.PortID, gaiaChannel.ChannelID, osmosis.Config().Denom)) + osmosisIbcDenom := osmosisDenomTrace.IBCDenom() - osmosisDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom(gaiaChannel.PortID, gaiaChannel.ChannelID, osmosis.Config().Denom)) - osmosisIbcDenom := osmosisDenomTrace.IBCDenom() + // Test destination wallets have increased funds + gaiaIBCBalance, err := osmosis.GetBalance(ctx, gaiaDstAddress, gaiaIbcDenom) + require.NoError(t, err) + require.Equal(t, amountToSend, gaiaIBCBalance) - // Test destination wallets have increased funds - gaiaIBCBalance, err := osmosis.GetBalance(ctx, gaiaDstAddress, gaiaIbcDenom) - require.NoError(t, err) - require.Equal(t, amountToSend, gaiaIBCBalance) + osmosisIBCBalance, err := gaia.GetBalance(ctx, osmosisDstAddress, osmosisIbcDenom) + require.NoError(t, err) + require.Equal(t, 3*amountToSend, osmosisIBCBalance) - osmosisIBCBalance, err := gaia.GetBalance(ctx, osmosisDstAddress, osmosisIbcDenom) - require.NoError(t, err) - require.Equal(t, 3*amountToSend, osmosisIBCBalance) + // Test grantee still has exact amount expected + gaiaGranteeIBCBalance, err := gaia.GetBalance(ctx, gaiaGranteeAddr, gaia.Config().Denom) + require.NoError(t, err) + require.Equal(t, granteeFundAmount, gaiaGranteeIBCBalance) - // Test grantee still has exact amount expected - gaiaGranteeIBCBalance, err := gaia.GetBalance(ctx, gaiaGranteeAddr, gaia.Config().Denom) - require.NoError(t, err) - require.Equal(t, granteeFundAmount, gaiaGranteeIBCBalance) + // Test granter has less than they started with, meaning fees came from their account + gaiaGranterIBCBalance, err := gaia.GetBalance(ctx, gaiaGranterAddr, gaia.Config().Denom) + require.NoError(t, err) + require.Less(t, gaiaGranterIBCBalance, fundAmount) + r.StopRelayer(ctx, eRep) - // Test granter has less than they started with, meaning fees came from their account - gaiaGranterIBCBalance, err := gaia.GetBalance(ctx, gaiaGranterAddr, gaia.Config().Denom) - require.NoError(t, err) - require.Less(t, gaiaGranterIBCBalance, fundAmount) - r.StopRelayer(ctx, eRep) + }) + } } func TxWithRetry(ctx context.Context, client rpcclient.Client, hash []byte) (*ctypes.ResultTx, error) { diff --git a/main.go b/main.go index 2dd1b6e4d..958a04ad7 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,15 @@ package main -import "github.com/cosmos/relayer/v2/cmd" +import ( + sdk "github.com/cosmos/cosmos-sdk/types" + "github.com/cosmos/relayer/v2/cmd" +) func main() { cmd.Execute() } + +func init() { + //prevent incorrect bech32 address prefixed addresses when calling AccAddress.String() + sdk.SetAddrCacheEnabled(false) +} diff --git a/relayer/chains/cosmos/feegrant.go b/relayer/chains/cosmos/feegrant.go index 92b14b6d3..e2ffbab45 100644 --- a/relayer/chains/cosmos/feegrant.go +++ b/relayer/chains/cosmos/feegrant.go @@ -8,6 +8,7 @@ import ( "strconv" "time" + "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/types" sdk "github.com/cosmos/cosmos-sdk/types" @@ -290,30 +291,16 @@ func (cc *CosmosProvider) EnsureBasicGrants(ctx context.Context, memo string) (* } if len(msgs) > 0 { - //Make sure the granter has funds on chain, if not, we can't even pay TX fees. - //Also, depending how the config was initialized, the key might only exist locally, not on chain. - balance, err := cc.QueryBalanceWithAddress(ctx, granterAddr) - if err != nil { - return nil, err - } - - //Check to ensure the feegranter has funds on chain that can pay TX fees - weBroke := true - gasDenom, err := getGasTokenDenom(cc.PCfg.GasPrices) - if err != nil { - return nil, err - } + cliCtx := client.Context{}.WithClient(cc.RPCClient). + WithInterfaceRegistry(cc.Cdc.InterfaceRegistry). + WithChainID(cc.PCfg.ChainID). + WithCodec(cc.Cdc.Marshaler). + WithFromAddress(granterAcc) - for _, coin := range balance { - if coin.Denom == gasDenom { - if coin.Amount.GT(sdk.ZeroInt()) { - weBroke = false - } - } - } + granterExists := cc.EnsureExists(cliCtx, granterAcc) == nil - //Feegranter can pay TX fees - if !weBroke { + //Feegranter exists on chain + if granterExists { txResp, err := cc.SubmitTxAwaitResponse(ctx, msgs, memo, 0, granterKey) if err != nil { fmt.Printf("Error: SubmitTxAwaitResponse: %s", err.Error()) @@ -326,7 +313,7 @@ func (cc *CosmosProvider) EnsureBasicGrants(ctx context.Context, memo string) (* fmt.Printf("TX succeeded, %d new grants configured, %d grants already in place. TX hash: %s\n", grantsNeeded, numGrantees-grantsNeeded, txResp.TxResponse.TxHash) return txResp.TxResponse, err } else { - return nil, fmt.Errorf("granter %s does not have funds on chain in fee denom '%s' (no TXs submitted)", granterKey, gasDenom) + return nil, fmt.Errorf("granter %s does not exist on chain", granterKey) } } else { fmt.Printf("All grantees (%d total) already had valid feegrants. Feegrant configuration verified.\n", numGrantees) From 811004c2dc43fe09f8ab007e4b92eb3cb6742e18 Mon Sep 17 00:00:00 2001 From: Conor Schaefer Date: Tue, 15 Aug 2023 13:11:01 -0700 Subject: [PATCH 16/37] chore: update penumbra protos (#1260) Updating to the latest Penumbra upstream protos. We'll likely submit another round of changes ahead of the next public testnet release, as a heads up. Co-authored-by: Conor Schaefer --- .../penumbra/core/ibc/v1alpha1/ibc.pb.go | 155 ++-- .../transaction/v1alpha1/transaction.pb.go | 20 +- .../chains/penumbra/view/v1alpha1/view.pb.go | 673 ++++++++++++------ 3 files changed, 532 insertions(+), 316 deletions(-) diff --git a/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go b/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go index cf5d9ad90..8bf6ff767 100644 --- a/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go +++ b/relayer/chains/penumbra/core/ibc/v1alpha1/ibc.pb.go @@ -183,10 +183,8 @@ type Ics20Withdrawal struct { TimeoutHeight uint64 `protobuf:"varint,5,opt,name=timeout_height,json=timeoutHeight,proto3" json:"timeout_height,omitempty"` // the timestamp at which this transfer expires. TimeoutTime uint64 `protobuf:"varint,6,opt,name=timeout_time,json=timeoutTime,proto3" json:"timeout_time,omitempty"` - // the source port that identifies the channel used for the withdrawal - SourcePort string `protobuf:"bytes,7,opt,name=source_port,json=sourcePort,proto3" json:"source_port,omitempty"` // the source channel used for the withdrawal - SourceChannel string `protobuf:"bytes,8,opt,name=source_channel,json=sourceChannel,proto3" json:"source_channel,omitempty"` + SourceChannel string `protobuf:"bytes,7,opt,name=source_channel,json=sourceChannel,proto3" json:"source_channel,omitempty"` } func (m *Ics20Withdrawal) Reset() { *m = Ics20Withdrawal{} } @@ -264,13 +262,6 @@ func (m *Ics20Withdrawal) GetTimeoutTime() uint64 { return 0 } -func (m *Ics20Withdrawal) GetSourcePort() string { - if m != nil { - return m.SourcePort - } - return "" -} - func (m *Ics20Withdrawal) GetSourceChannel() string { if m != nil { return m.SourceChannel @@ -583,57 +574,56 @@ func init() { } var fileDescriptor_6509740287584c65 = []byte{ - // 791 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x94, 0x41, 0x8f, 0x1b, 0x35, - 0x14, 0xc7, 0x77, 0x92, 0x74, 0x37, 0x71, 0x9a, 0x84, 0x8e, 0x2a, 0x3a, 0x0d, 0x22, 0x0d, 0xa3, - 0xb6, 0xda, 0x22, 0x31, 0x43, 0x52, 0x10, 0xd2, 0xa0, 0x4a, 0x64, 0xa7, 0xa2, 0xcc, 0xa1, 0x22, - 0x1a, 0xaa, 0x22, 0xa1, 0x48, 0x91, 0xc7, 0xe3, 0x26, 0x56, 0x33, 0x76, 0x64, 0x7b, 0xb2, 0x8a, - 0xf8, 0x12, 0x7c, 0x05, 0xb8, 0xc1, 0x99, 0x0f, 0x81, 0x38, 0xf5, 0xc8, 0x11, 0x65, 0x6f, 0x7c, - 0x0a, 0x64, 0x7b, 0x9c, 0xec, 0x4a, 0x2c, 0x7b, 0x8a, 0xdf, 0xff, 0xfd, 0xde, 0xcb, 0x7b, 0x6f, - 0x9e, 0x0d, 0x1e, 0xae, 0x31, 0x2d, 0x8b, 0x8c, 0xc3, 0x10, 0x31, 0x8e, 0x43, 0x92, 0xa1, 0x70, - 0x33, 0x82, 0xab, 0xf5, 0x12, 0x8e, 0x94, 0x11, 0xac, 0x39, 0x93, 0xcc, 0xed, 0x5b, 0x2a, 0x50, - 0x54, 0xa0, 0x1c, 0x96, 0xea, 0x7f, 0x7c, 0x35, 0x03, 0xe2, 0xdb, 0xb5, 0x64, 0x87, 0x24, 0xc6, - 0x36, 0x79, 0xfa, 0x0f, 0x54, 0x7e, 0x83, 0xad, 0x08, 0xa6, 0x32, 0xdc, 0x8c, 0xaa, 0x53, 0x05, - 0xdc, 0x5f, 0x30, 0xb6, 0x58, 0xe1, 0x50, 0x5b, 0x59, 0xf9, 0x26, 0x84, 0x74, 0x6b, 0x5c, 0xfe, - 0x57, 0xa0, 0x95, 0x64, 0x68, 0x82, 0x24, 0x61, 0xd4, 0x7d, 0x0a, 0x00, 0x87, 0xe7, 0x73, 0xa8, - 0x2d, 0xcf, 0x19, 0x3a, 0xa7, 0xed, 0xf1, 0xdd, 0xc0, 0x04, 0x07, 0x36, 0x38, 0x98, 0xd0, 0x6d, - 0xda, 0xe2, 0xf0, 0xdc, 0x04, 0xf9, 0x3f, 0x82, 0x7b, 0x5f, 0x97, 0x74, 0x41, 0xb2, 0x15, 0x7e, - 0xc5, 0xde, 0x62, 0x3a, 0x85, 0xe8, 0x2d, 0x96, 0xcf, 0xa1, 0x84, 0xee, 0x5d, 0x70, 0x2b, 0xc7, - 0x94, 0x15, 0x3a, 0x55, 0x2b, 0x35, 0x86, 0xfb, 0x3e, 0x38, 0x86, 0x05, 0x2b, 0xa9, 0xf4, 0x6a, - 0x5a, 0xae, 0x2c, 0xa5, 0x0b, 0x4c, 0x73, 0xcc, 0xbd, 0xba, 0xd1, 0x8d, 0xe5, 0xf6, 0x41, 0x93, - 0x63, 0x84, 0xc9, 0x06, 0x73, 0xaf, 0xa1, 0x3d, 0x7b, 0xdb, 0xff, 0xb5, 0x0e, 0x7a, 0x09, 0x12, - 0xe3, 0x4f, 0xbf, 0x27, 0x72, 0x99, 0x73, 0x78, 0x0e, 0x57, 0xee, 0xb3, 0x7d, 0x7e, 0xd3, 0xc1, - 0xa3, 0xe0, 0xea, 0x9c, 0xab, 0xd9, 0xd9, 0x59, 0x06, 0x13, 0x0d, 0xef, 0xcb, 0x88, 0x6c, 0xd1, - 0x35, 0x1d, 0xfd, 0xf0, 0x86, 0xe8, 0xe7, 0x8a, 0xb5, 0xad, 0x45, 0xe0, 0x7e, 0x8e, 0x85, 0x24, - 0x14, 0xaa, 0xd1, 0xcc, 0xd1, 0x12, 0x12, 0x3a, 0x87, 0x79, 0xce, 0xb1, 0x10, 0x55, 0x57, 0xf7, - 0x2e, 0x01, 0xb1, 0xf2, 0x4f, 0x8c, 0xdb, 0x7d, 0x09, 0xba, 0x1c, 0xcb, 0x92, 0x1f, 0x02, 0x1a, - 0xba, 0x80, 0xc7, 0x37, 0x95, 0x6f, 0xe8, 0xb4, 0x63, 0xa2, 0x6d, 0xba, 0x47, 0xa0, 0x2b, 0x49, - 0x81, 0x59, 0x29, 0xe7, 0x4b, 0x4c, 0x16, 0x4b, 0xe9, 0xdd, 0x1a, 0x3a, 0xa7, 0x8d, 0xb4, 0x53, - 0xa9, 0xdf, 0x68, 0xd1, 0xfd, 0x08, 0xdc, 0xb6, 0x98, 0xfa, 0xf5, 0x8e, 0x35, 0xd4, 0xae, 0xb4, - 0x57, 0xa4, 0xc0, 0xee, 0x03, 0xd0, 0x16, 0xac, 0xe4, 0x08, 0xcf, 0xd7, 0x8c, 0x4b, 0xef, 0x44, - 0xb7, 0x01, 0x8c, 0x34, 0x65, 0x5c, 0xaa, 0xbf, 0xaa, 0x00, 0xb4, 0x84, 0x94, 0xe2, 0x95, 0xd7, - 0xd4, 0x4c, 0xc7, 0xa8, 0xb1, 0x11, 0xfd, 0xdf, 0x1d, 0x00, 0x62, 0xbd, 0x96, 0x7a, 0x39, 0x3e, - 0x00, 0x2d, 0xb3, 0xa4, 0x73, 0x92, 0x57, 0x0b, 0xd2, 0x34, 0x42, 0x92, 0xbb, 0x5f, 0x80, 0xdb, - 0x95, 0x53, 0x48, 0x28, 0x71, 0xf5, 0x2d, 0xfe, 0x7b, 0x17, 0xdb, 0x86, 0xfc, 0x4e, 0x81, 0xaa, - 0x96, 0x35, 0x67, 0x08, 0x0b, 0x81, 0x73, 0xd3, 0x91, 0x19, 0x7b, 0x67, 0xaf, 0xea, 0x9e, 0x9e, - 0x80, 0xf7, 0x0e, 0x58, 0x35, 0x9f, 0x86, 0x6e, 0xbd, 0xb7, 0xd7, 0xcd, 0x84, 0xfc, 0x27, 0xa0, - 0x63, 0xaa, 0x8e, 0xd5, 0x7a, 0x60, 0xee, 0x7a, 0xe0, 0x04, 0x99, 0xa3, 0x2e, 0xbb, 0x91, 0x5a, - 0xd3, 0xff, 0x16, 0x74, 0x63, 0x46, 0x05, 0xa6, 0xa2, 0x14, 0xa6, 0x9c, 0x67, 0xa0, 0x87, 0xac, - 0x52, 0xb5, 0xf2, 0x7f, 0xd7, 0xaa, 0x8b, 0xae, 0x84, 0xfb, 0x2f, 0x40, 0xef, 0x35, 0xe6, 0xe4, - 0x0d, 0xb1, 0xd5, 0x08, 0xf7, 0x33, 0x70, 0x62, 0xea, 0x15, 0x9e, 0x33, 0xac, 0x9f, 0xb6, 0xc7, - 0x7d, 0xfd, 0x70, 0x98, 0xd5, 0x30, 0x97, 0x7e, 0x33, 0x0a, 0x0c, 0x9d, 0x5a, 0xd4, 0xff, 0x04, - 0xdc, 0x89, 0x19, 0xa5, 0x58, 0x5f, 0xd9, 0x9b, 0x1b, 0xf9, 0x1c, 0xdc, 0xb1, 0x3d, 0xdb, 0x20, - 0xe1, 0x0e, 0x41, 0x1b, 0x1d, 0x4c, 0xfd, 0xef, 0xad, 0xf4, 0xb2, 0x74, 0xf6, 0x73, 0xed, 0x8f, - 0xdd, 0xc0, 0x79, 0xb7, 0x1b, 0x38, 0x7f, 0xef, 0x06, 0xce, 0x4f, 0x17, 0x83, 0xa3, 0x77, 0x17, - 0x83, 0xa3, 0xbf, 0x2e, 0x06, 0x47, 0x60, 0x80, 0x58, 0x11, 0x5c, 0xff, 0xde, 0x9d, 0x35, 0x93, - 0x0c, 0x4d, 0xd5, 0x28, 0xa6, 0xce, 0x0f, 0xe9, 0x82, 0xc8, 0x65, 0x99, 0x05, 0x88, 0x15, 0x21, - 0x62, 0xa2, 0x60, 0x22, 0xe4, 0x78, 0x05, 0xb7, 0x98, 0x87, 0x9b, 0xf1, 0xfe, 0xa8, 0x2f, 0x97, - 0x08, 0xaf, 0x7f, 0x69, 0xbf, 0x24, 0x19, 0xb2, 0xe7, 0x5f, 0x6a, 0xf5, 0x69, 0x9c, 0xfc, 0x56, - 0xeb, 0x4f, 0x6d, 0x09, 0xb1, 0x2a, 0x21, 0xc9, 0x50, 0xf0, 0xba, 0x42, 0xfe, 0x3c, 0x38, 0x67, - 0xca, 0x39, 0x4b, 0x32, 0x34, 0xb3, 0xce, 0x5d, 0xed, 0xf1, 0xf5, 0xce, 0xd9, 0x8b, 0xe9, 0xd9, - 0x4b, 0x2c, 0x61, 0x0e, 0x25, 0xfc, 0xa7, 0xf6, 0xa1, 0x05, 0xa3, 0x48, 0x91, 0x51, 0x94, 0x64, - 0x28, 0x8a, 0x2c, 0x9b, 0x1d, 0xeb, 0x0f, 0xfe, 0xf4, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xec, - 0xc7, 0x3e, 0x41, 0x23, 0x06, 0x00, 0x00, + // 773 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x84, 0x54, 0x41, 0x8f, 0x1b, 0x35, + 0x14, 0xde, 0x49, 0xd2, 0xdd, 0x8d, 0xd3, 0x24, 0x74, 0x54, 0xd1, 0x69, 0x10, 0x21, 0x8c, 0xda, + 0x6a, 0x8b, 0xc4, 0x0c, 0x49, 0x41, 0x48, 0x83, 0x2a, 0x91, 0x9d, 0x8a, 0x32, 0x87, 0x8a, 0x68, + 0xa8, 0x8a, 0x84, 0x22, 0x45, 0x1e, 0x8f, 0x9b, 0x58, 0x9b, 0xb1, 0x23, 0xdb, 0x93, 0x55, 0xc4, + 0x1f, 0xe0, 0xc8, 0x5f, 0x80, 0x23, 0x67, 0x7e, 0x04, 0xe2, 0xb4, 0x47, 0x8e, 0x28, 0x7b, 0xe3, + 0x57, 0x20, 0xdb, 0xe3, 0x64, 0x57, 0x62, 0xbb, 0xa7, 0xf8, 0x7d, 0xef, 0x7b, 0x2f, 0xdf, 0xf7, + 0xde, 0xd8, 0xe0, 0xd1, 0x0a, 0xd3, 0xb2, 0xc8, 0x38, 0x0c, 0x11, 0xe3, 0x38, 0x24, 0x19, 0x0a, + 0xd7, 0x43, 0xb8, 0x5c, 0x2d, 0xe0, 0x50, 0x05, 0xc1, 0x8a, 0x33, 0xc9, 0xdc, 0x9e, 0x65, 0x05, + 0x8a, 0x15, 0xa8, 0x84, 0x65, 0xf5, 0x3e, 0xb9, 0xde, 0x01, 0xf1, 0xcd, 0x4a, 0xb2, 0x7d, 0x13, + 0x13, 0x9b, 0x3e, 0xbd, 0x8f, 0x54, 0x7f, 0x43, 0x5b, 0x12, 0x4c, 0x65, 0xb8, 0x1e, 0x56, 0xa7, + 0x8a, 0xf0, 0x70, 0xce, 0xd8, 0x7c, 0x89, 0x43, 0x1d, 0x65, 0xe5, 0xdb, 0x10, 0xd2, 0x8d, 0x49, + 0xf9, 0x5f, 0x83, 0x66, 0x92, 0xa1, 0x31, 0x92, 0x84, 0x51, 0xf7, 0x19, 0x00, 0x1c, 0x9e, 0xcf, + 0xa0, 0x8e, 0x3c, 0x67, 0xe0, 0x9c, 0xb4, 0x46, 0xf7, 0x03, 0x53, 0x1c, 0xd8, 0xe2, 0x60, 0x4c, + 0x37, 0x69, 0x93, 0xc3, 0x73, 0x53, 0xe4, 0xff, 0x04, 0x1e, 0x7c, 0x53, 0xd2, 0x39, 0xc9, 0x96, + 0xf8, 0x35, 0x3b, 0xc3, 0x74, 0x02, 0xd1, 0x19, 0x96, 0x2f, 0xa0, 0x84, 0xee, 0x7d, 0x70, 0x27, + 0xc7, 0x94, 0x15, 0xba, 0x55, 0x33, 0x35, 0x81, 0xfb, 0x3e, 0x38, 0x84, 0x05, 0x2b, 0xa9, 0xf4, + 0x6a, 0x1a, 0xae, 0x22, 0x85, 0x0b, 0x4c, 0x73, 0xcc, 0xbd, 0xba, 0xc1, 0x4d, 0xe4, 0xf6, 0xc0, + 0x31, 0xc7, 0x08, 0x93, 0x35, 0xe6, 0x5e, 0x43, 0x67, 0x76, 0xb1, 0xff, 0x73, 0x1d, 0x74, 0x13, + 0x24, 0x46, 0x9f, 0xfd, 0x40, 0xe4, 0x22, 0xe7, 0xf0, 0x1c, 0x2e, 0xdd, 0xe7, 0xbb, 0xfe, 0xc6, + 0xc1, 0xe3, 0xe0, 0xfa, 0x9c, 0xab, 0xd9, 0xd9, 0x59, 0x06, 0x63, 0x4d, 0xde, 0xc9, 0x88, 0xac, + 0xe8, 0x9a, 0xae, 0x7e, 0x74, 0x4b, 0xf5, 0x0b, 0xc5, 0xb5, 0xd6, 0x22, 0xf0, 0x30, 0xc7, 0x42, + 0x12, 0x0a, 0xd5, 0x68, 0x66, 0x68, 0x01, 0x09, 0x9d, 0xc1, 0x3c, 0xe7, 0x58, 0x88, 0xca, 0xd5, + 0x83, 0x2b, 0x84, 0x58, 0xe5, 0xc7, 0x26, 0xed, 0xbe, 0x02, 0x1d, 0x8e, 0x65, 0xc9, 0xf7, 0x05, + 0x0d, 0x2d, 0xe0, 0xc9, 0x6d, 0xf2, 0x0d, 0x3b, 0x6d, 0x9b, 0x6a, 0xdb, 0xee, 0x31, 0xe8, 0x48, + 0x52, 0x60, 0x56, 0xca, 0xd9, 0x02, 0x93, 0xf9, 0x42, 0x7a, 0x77, 0x06, 0xce, 0x49, 0x23, 0x6d, + 0x57, 0xe8, 0xb7, 0x1a, 0x74, 0x3f, 0x06, 0x77, 0x2d, 0x4d, 0xfd, 0x7a, 0x87, 0x9a, 0xd4, 0xaa, + 0xb0, 0xd7, 0xa4, 0xc0, 0xaa, 0x93, 0x60, 0x25, 0x47, 0x58, 0xf9, 0xa1, 0x14, 0x2f, 0xbd, 0x23, + 0xed, 0xa4, 0x6d, 0xd0, 0xd8, 0x80, 0xfe, 0x1f, 0x0e, 0x00, 0xb1, 0xfe, 0xea, 0xf4, 0xee, 0x3f, + 0x00, 0x4d, 0xf3, 0x0d, 0xce, 0x48, 0x5e, 0xed, 0xff, 0xd8, 0x00, 0x49, 0xee, 0x7e, 0x09, 0xee, + 0x56, 0x49, 0x21, 0xa1, 0xc4, 0xd5, 0xa8, 0xff, 0xff, 0x53, 0x6b, 0x19, 0xe6, 0xf7, 0x8a, 0xa8, + 0xb4, 0xac, 0x38, 0x43, 0x58, 0x08, 0x9c, 0x1b, 0xc1, 0x66, 0xaa, 0xed, 0x1d, 0xaa, 0x25, 0x3f, + 0x05, 0xef, 0xed, 0x69, 0x95, 0xfd, 0x86, 0x76, 0xd6, 0xdd, 0xe1, 0x66, 0x00, 0xfe, 0x53, 0xd0, + 0x36, 0xaa, 0x63, 0xb5, 0x7d, 0xcc, 0x5d, 0x0f, 0x1c, 0x21, 0x73, 0xd4, 0xb2, 0x1b, 0xa9, 0x0d, + 0xfd, 0xef, 0x40, 0x27, 0x66, 0x54, 0x60, 0x2a, 0x4a, 0x61, 0xe4, 0x3c, 0x07, 0x5d, 0x64, 0x91, + 0xca, 0xca, 0xbb, 0x6e, 0x4d, 0x07, 0x5d, 0x2b, 0xf7, 0x5f, 0x82, 0xee, 0x1b, 0xcc, 0xc9, 0x5b, + 0x62, 0xd5, 0x08, 0xf7, 0x73, 0x70, 0x64, 0xf4, 0x0a, 0xcf, 0x19, 0xd4, 0x4f, 0x5a, 0xa3, 0x9e, + 0x7e, 0x17, 0xcc, 0xe6, 0xcd, 0x9d, 0x5e, 0x0f, 0x03, 0xc3, 0x4e, 0x2d, 0xd5, 0xff, 0x14, 0xdc, + 0x8b, 0x19, 0xa5, 0x58, 0xdf, 0xc8, 0xdb, 0x8d, 0x7c, 0x01, 0xee, 0x59, 0xcf, 0xb6, 0x48, 0xb8, + 0x03, 0xd0, 0x42, 0xfb, 0x50, 0xff, 0x7b, 0x33, 0xbd, 0x0a, 0x9d, 0xfe, 0x5a, 0xfb, 0x73, 0xdb, + 0x77, 0x2e, 0xb6, 0x7d, 0xe7, 0x9f, 0x6d, 0xdf, 0xf9, 0xe5, 0xb2, 0x7f, 0x70, 0x71, 0xd9, 0x3f, + 0xf8, 0xfb, 0xb2, 0x7f, 0x00, 0xfa, 0x88, 0x15, 0xc1, 0xcd, 0xcf, 0xd9, 0xe9, 0x71, 0x92, 0xa1, + 0x89, 0x1a, 0xc5, 0xc4, 0xf9, 0x31, 0x9d, 0x13, 0xb9, 0x28, 0xb3, 0x00, 0xb1, 0x22, 0x44, 0x4c, + 0x14, 0x4c, 0x84, 0x1c, 0x2f, 0xe1, 0x06, 0xf3, 0x70, 0x3d, 0xda, 0x1d, 0xf5, 0xdd, 0x11, 0xe1, + 0xcd, 0x0f, 0xe9, 0x57, 0x24, 0x43, 0xf6, 0xfc, 0x5b, 0xad, 0x3e, 0x89, 0x93, 0xdf, 0x6b, 0xbd, + 0x89, 0x95, 0x10, 0x2b, 0x09, 0x49, 0x86, 0x82, 0x37, 0x15, 0xe5, 0xaf, 0x7d, 0x72, 0xaa, 0x92, + 0xd3, 0x24, 0x43, 0x53, 0x9b, 0xdc, 0xd6, 0x9e, 0xdc, 0x9c, 0x9c, 0xbe, 0x9c, 0x9c, 0xbe, 0xc2, + 0x12, 0xe6, 0x50, 0xc2, 0x7f, 0x6b, 0x1f, 0x5a, 0x62, 0x14, 0x29, 0x66, 0x14, 0x25, 0x19, 0x8a, + 0x22, 0xcb, 0xcd, 0x0e, 0xf5, 0xc2, 0x9f, 0xfd, 0x17, 0x00, 0x00, 0xff, 0xff, 0x1b, 0x2a, 0x21, + 0xe0, 0x02, 0x06, 0x00, 0x00, } func (m *IbcAction) Marshal() (dAtA []byte, err error) { @@ -747,13 +737,6 @@ func (m *Ics20Withdrawal) MarshalToSizedBuffer(dAtA []byte) (int, error) { copy(dAtA[i:], m.SourceChannel) i = encodeVarintIbc(dAtA, i, uint64(len(m.SourceChannel))) i-- - dAtA[i] = 0x42 - } - if len(m.SourcePort) > 0 { - i -= len(m.SourcePort) - copy(dAtA[i:], m.SourcePort) - i = encodeVarintIbc(dAtA, i, uint64(len(m.SourcePort))) - i-- dAtA[i] = 0x3a } if m.TimeoutTime != 0 { @@ -1103,10 +1086,6 @@ func (m *Ics20Withdrawal) Size() (n int) { if m.TimeoutTime != 0 { n += 1 + sovIbc(uint64(m.TimeoutTime)) } - l = len(m.SourcePort) - if l > 0 { - n += 1 + l + sovIbc(uint64(l)) - } l = len(m.SourceChannel) if l > 0 { n += 1 + l + sovIbc(uint64(l)) @@ -1683,38 +1662,6 @@ func (m *Ics20Withdrawal) Unmarshal(dAtA []byte) error { } } case 7: - if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field SourcePort", wireType) - } - var stringLen uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowIbc - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - stringLen |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - intStringLen := int(stringLen) - if intStringLen < 0 { - return ErrInvalidLengthIbc - } - postIndex := iNdEx + intStringLen - if postIndex < 0 { - return ErrInvalidLengthIbc - } - if postIndex > l { - return io.ErrUnexpectedEOF - } - m.SourcePort = string(dAtA[iNdEx:postIndex]) - iNdEx = postIndex - case 8: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field SourceChannel", wireType) } diff --git a/relayer/chains/penumbra/core/transaction/v1alpha1/transaction.pb.go b/relayer/chains/penumbra/core/transaction/v1alpha1/transaction.pb.go index bb0efd7c7..c22d6f2ae 100644 --- a/relayer/chains/penumbra/core/transaction/v1alpha1/transaction.pb.go +++ b/relayer/chains/penumbra/core/transaction/v1alpha1/transaction.pb.go @@ -2500,14 +2500,20 @@ func (m *WitnessData) GetStateCommitmentProofs() []*v1alpha1.StateCommitmentProo return nil } -// Describes a planned transaction. +// Describes a planned transaction. Permits clients to prepare a transaction +// prior submission, so that a user can review it prior to authorizing its execution. type TransactionPlan struct { - Actions []*ActionPlan `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` - ExpiryHeight uint64 `protobuf:"varint,2,opt,name=expiry_height,json=expiryHeight,proto3" json:"expiry_height,omitempty"` - ChainId string `protobuf:"bytes,3,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` - Fee *v1alpha1.Fee `protobuf:"bytes,4,opt,name=fee,proto3" json:"fee,omitempty"` - CluePlans []*CluePlan `protobuf:"bytes,5,rep,name=clue_plans,json=cluePlans,proto3" json:"clue_plans,omitempty"` - MemoPlan *MemoPlan `protobuf:"bytes,6,opt,name=memo_plan,json=memoPlan,proto3" json:"memo_plan,omitempty"` + // The planner interface(s) for Actions to be performed, such as a Spend, Swap, + // or Delegation. See the ActionPlan docs for a full list of options. + Actions []*ActionPlan `protobuf:"bytes,1,rep,name=actions,proto3" json:"actions,omitempty"` + // Time, as block height, after which TransactionPlan should be considered invalid. + ExpiryHeight uint64 `protobuf:"varint,2,opt,name=expiry_height,json=expiryHeight,proto3" json:"expiry_height,omitempty"` + // The name of the network for which this TransactionPlan was built. + ChainId string `protobuf:"bytes,3,opt,name=chain_id,json=chainId,proto3" json:"chain_id,omitempty"` + Fee *v1alpha1.Fee `protobuf:"bytes,4,opt,name=fee,proto3" json:"fee,omitempty"` + CluePlans []*CluePlan `protobuf:"bytes,5,rep,name=clue_plans,json=cluePlans,proto3" json:"clue_plans,omitempty"` + // Planning interface for constructing an optional Memo for the Transaction. + MemoPlan *MemoPlan `protobuf:"bytes,6,opt,name=memo_plan,json=memoPlan,proto3" json:"memo_plan,omitempty"` } func (m *TransactionPlan) Reset() { *m = TransactionPlan{} } diff --git a/relayer/chains/penumbra/view/v1alpha1/view.pb.go b/relayer/chains/penumbra/view/v1alpha1/view.pb.go index 603de4d9b..35056567e 100644 --- a/relayer/chains/penumbra/view/v1alpha1/view.pb.go +++ b/relayer/chains/penumbra/view/v1alpha1/view.pb.go @@ -247,13 +247,14 @@ type TransactionPlannerRequest struct { // The fee for the requested TransactionPlan, if any. Fee *v1alpha11.Fee `protobuf:"bytes,2,opt,name=fee,proto3" json:"fee,omitempty"` // The memo for the requested TransactionPlan - Memo string `protobuf:"bytes,3,opt,name=memo,proto3" json:"memo,omitempty"` + Memo *v1alpha1.MemoPlaintext `protobuf:"bytes,3,opt,name=memo,proto3" json:"memo,omitempty"` // Types that are valid to be assigned to XAccountGroupId: // *TransactionPlannerRequest_AccountGroupId XAccountGroupId isTransactionPlannerRequest_XAccountGroupId `protobuf_oneof:"_account_group_id"` // Request contents Outputs []*TransactionPlannerRequest_Output `protobuf:"bytes,20,rep,name=outputs,proto3" json:"outputs,omitempty"` Swaps []*TransactionPlannerRequest_Swap `protobuf:"bytes,30,rep,name=swaps,proto3" json:"swaps,omitempty"` + SwapClaims []*TransactionPlannerRequest_SwapClaim `protobuf:"bytes,31,rep,name=swap_claims,json=swapClaims,proto3" json:"swap_claims,omitempty"` Delegations []*TransactionPlannerRequest_Delegate `protobuf:"bytes,40,rep,name=delegations,proto3" json:"delegations,omitempty"` Undelegations []*TransactionPlannerRequest_Undelegate `protobuf:"bytes,50,rep,name=undelegations,proto3" json:"undelegations,omitempty"` IbcActions []*v1alpha12.IbcAction `protobuf:"bytes,60,rep,name=ibc_actions,json=ibcActions,proto3" json:"ibc_actions,omitempty"` @@ -325,11 +326,11 @@ func (m *TransactionPlannerRequest) GetFee() *v1alpha11.Fee { return nil } -func (m *TransactionPlannerRequest) GetMemo() string { +func (m *TransactionPlannerRequest) GetMemo() *v1alpha1.MemoPlaintext { if m != nil { return m.Memo } - return "" + return nil } func (m *TransactionPlannerRequest) GetAccountGroupId() *v1alpha11.AccountGroupId { @@ -353,6 +354,13 @@ func (m *TransactionPlannerRequest) GetSwaps() []*TransactionPlannerRequest_Swap return nil } +func (m *TransactionPlannerRequest) GetSwapClaims() []*TransactionPlannerRequest_SwapClaim { + if m != nil { + return m.SwapClaims + } + return nil +} + func (m *TransactionPlannerRequest) GetDelegations() []*TransactionPlannerRequest_Delegate { if m != nil { return m.Delegations @@ -383,7 +391,9 @@ func (*TransactionPlannerRequest) XXX_OneofWrappers() []interface{} { // Request message subtypes type TransactionPlannerRequest_Output struct { - Value *v1alpha11.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + // The amount and denomination in which the Output is issued. + Value *v1alpha11.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + // The address to which Output will be sent. Address *v1alpha11.Address `protobuf:"bytes,2,opt,name=address,proto3" json:"address,omitempty"` } @@ -435,9 +445,12 @@ func (m *TransactionPlannerRequest_Output) GetAddress() *v1alpha11.Address { } type TransactionPlannerRequest_Swap struct { - Value *v1alpha11.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + // The amount and denomination to be traded in the Swap. + Value *v1alpha11.Value `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` + // The denomination to be received as a Output of the Swap. TargetAsset *v1alpha11.AssetId `protobuf:"bytes,2,opt,name=target_asset,json=targetAsset,proto3" json:"target_asset,omitempty"` - Fee *v1alpha11.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` + // An optional fee to be paid for performing the Swap. + Fee *v1alpha11.Fee `protobuf:"bytes,3,opt,name=fee,proto3" json:"fee,omitempty"` } func (m *TransactionPlannerRequest_Swap) Reset() { *m = TransactionPlannerRequest_Swap{} } @@ -494,6 +507,53 @@ func (m *TransactionPlannerRequest_Swap) GetFee() *v1alpha11.Fee { return nil } +type TransactionPlannerRequest_SwapClaim struct { + // SwapCommitment to identify the Swap to be claimed. + // Use the commitment from the Swap message: + // penumbra.core.dex.v1alpha1.Swap.body.payload.commitment. + SwapCommitment *v1alpha11.StateCommitment `protobuf:"bytes,1,opt,name=swap_commitment,json=swapCommitment,proto3" json:"swap_commitment,omitempty"` +} + +func (m *TransactionPlannerRequest_SwapClaim) Reset() { *m = TransactionPlannerRequest_SwapClaim{} } +func (m *TransactionPlannerRequest_SwapClaim) String() string { return proto.CompactTextString(m) } +func (*TransactionPlannerRequest_SwapClaim) ProtoMessage() {} +func (*TransactionPlannerRequest_SwapClaim) Descriptor() ([]byte, []int) { + return fileDescriptor_0aa947b204e6a7c2, []int{4, 2} +} +func (m *TransactionPlannerRequest_SwapClaim) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *TransactionPlannerRequest_SwapClaim) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_TransactionPlannerRequest_SwapClaim.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *TransactionPlannerRequest_SwapClaim) XXX_Merge(src proto.Message) { + xxx_messageInfo_TransactionPlannerRequest_SwapClaim.Merge(m, src) +} +func (m *TransactionPlannerRequest_SwapClaim) XXX_Size() int { + return m.Size() +} +func (m *TransactionPlannerRequest_SwapClaim) XXX_DiscardUnknown() { + xxx_messageInfo_TransactionPlannerRequest_SwapClaim.DiscardUnknown(m) +} + +var xxx_messageInfo_TransactionPlannerRequest_SwapClaim proto.InternalMessageInfo + +func (m *TransactionPlannerRequest_SwapClaim) GetSwapCommitment() *v1alpha11.StateCommitment { + if m != nil { + return m.SwapCommitment + } + return nil +} + type TransactionPlannerRequest_Delegate struct { Amount *v1alpha11.Amount `protobuf:"bytes,1,opt,name=amount,proto3" json:"amount,omitempty"` RateData *v1alpha13.RateData `protobuf:"bytes,3,opt,name=rate_data,json=rateData,proto3" json:"rate_data,omitempty"` @@ -503,7 +563,7 @@ func (m *TransactionPlannerRequest_Delegate) Reset() { *m = TransactionP func (m *TransactionPlannerRequest_Delegate) String() string { return proto.CompactTextString(m) } func (*TransactionPlannerRequest_Delegate) ProtoMessage() {} func (*TransactionPlannerRequest_Delegate) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{4, 2} + return fileDescriptor_0aa947b204e6a7c2, []int{4, 3} } func (m *TransactionPlannerRequest_Delegate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -555,7 +615,7 @@ func (m *TransactionPlannerRequest_Undelegate) Reset() { *m = Transactio func (m *TransactionPlannerRequest_Undelegate) String() string { return proto.CompactTextString(m) } func (*TransactionPlannerRequest_Undelegate) ProtoMessage() {} func (*TransactionPlannerRequest_Undelegate) Descriptor() ([]byte, []int) { - return fileDescriptor_0aa947b204e6a7c2, []int{4, 3} + return fileDescriptor_0aa947b204e6a7c2, []int{4, 4} } func (m *TransactionPlannerRequest_Undelegate) XXX_Unmarshal(b []byte) error { return m.Unmarshal(b) @@ -3425,6 +3485,7 @@ func init() { proto.RegisterType((*TransactionPlannerRequest)(nil), "penumbra.view.v1alpha1.TransactionPlannerRequest") proto.RegisterType((*TransactionPlannerRequest_Output)(nil), "penumbra.view.v1alpha1.TransactionPlannerRequest.Output") proto.RegisterType((*TransactionPlannerRequest_Swap)(nil), "penumbra.view.v1alpha1.TransactionPlannerRequest.Swap") + proto.RegisterType((*TransactionPlannerRequest_SwapClaim)(nil), "penumbra.view.v1alpha1.TransactionPlannerRequest.SwapClaim") proto.RegisterType((*TransactionPlannerRequest_Delegate)(nil), "penumbra.view.v1alpha1.TransactionPlannerRequest.Delegate") proto.RegisterType((*TransactionPlannerRequest_Undelegate)(nil), "penumbra.view.v1alpha1.TransactionPlannerRequest.Undelegate") proto.RegisterType((*TransactionPlannerResponse)(nil), "penumbra.view.v1alpha1.TransactionPlannerResponse") @@ -3477,192 +3538,195 @@ func init() { func init() { proto.RegisterFile("penumbra/view/v1alpha1/view.proto", fileDescriptor_0aa947b204e6a7c2) } var fileDescriptor_0aa947b204e6a7c2 = []byte{ - // 2954 bytes of a gzipped FileDescriptorProto + // 3002 bytes of a gzipped FileDescriptorProto 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xdc, 0x5b, 0xcd, 0x6f, 0x1b, 0xc7, - 0x15, 0xf7, 0x92, 0xfa, 0xf2, 0xa3, 0x48, 0xca, 0x6b, 0x5b, 0xa2, 0x99, 0x44, 0x49, 0x37, 0xb1, - 0xad, 0x38, 0x09, 0x65, 0x2b, 0x4e, 0x9a, 0x2a, 0x49, 0x1b, 0xd1, 0x8a, 0x2c, 0xc1, 0xb1, 0xad, - 0xae, 0x6c, 0xa5, 0x49, 0x95, 0x2e, 0x46, 0xbb, 0x23, 0x69, 0x2b, 0x72, 0x77, 0xb3, 0x3b, 0x14, - 0xc5, 0xf6, 0x94, 0x22, 0x28, 0x8c, 0x00, 0x0d, 0x8a, 0xa2, 0x97, 0x5c, 0x7b, 0x2c, 0x7a, 0xcd, - 0xb5, 0x28, 0xd0, 0x4b, 0xd1, 0x53, 0x8e, 0x05, 0x0a, 0x14, 0x81, 0x83, 0x5e, 0xda, 0x7f, 0xa1, - 0x40, 0x8b, 0xf9, 0x5a, 0xee, 0x2e, 0x77, 0x4d, 0x52, 0x92, 0xe1, 0xb6, 0x27, 0x71, 0x66, 0xde, - 0xfb, 0xbd, 0x8f, 0x99, 0x79, 0xf3, 0xe6, 0xcd, 0x0a, 0xbe, 0xe5, 0x61, 0xa7, 0xd5, 0xdc, 0xf6, - 0xd1, 0xfc, 0x81, 0x8d, 0xdb, 0xf3, 0x07, 0xd7, 0x50, 0xc3, 0xdb, 0x43, 0xd7, 0x58, 0xab, 0xe6, - 0xf9, 0x2e, 0x71, 0xd5, 0x69, 0x49, 0x52, 0x63, 0x9d, 0x92, 0xa4, 0x3a, 0x17, 0xb2, 0x9a, 0xae, - 0x8f, 0xe7, 0xcd, 0x3d, 0x64, 0x3b, 0x5d, 0x00, 0xd6, 0xe4, 0x08, 0xd5, 0x2b, 0x09, 0x4a, 0xbf, - 0xe3, 0x11, 0x37, 0x42, 0xca, 0xda, 0x82, 0xf6, 0x85, 0x38, 0xad, 0x85, 0x0f, 0xbb, 0x84, 0x16, - 0x3e, 0x14, 0x54, 0xd7, 0xe3, 0x54, 0xc4, 0x47, 0x4e, 0x80, 0x4c, 0x62, 0xbb, 0x11, 0x0d, 0x22, - 0x9d, 0xe9, 0xd8, 0xf6, 0xb6, 0xd9, 0xa5, 0xb6, 0xb7, 0x4d, 0x41, 0x95, 0xb0, 0x2b, 0x20, 0x68, - 0x1f, 0x77, 0xe9, 0x58, 0x93, 0x53, 0x6a, 0x5f, 0x2b, 0x50, 0x59, 0x6a, 0x91, 0x3d, 0xd7, 0xb7, - 0x7f, 0x82, 0x97, 0x1c, 0xab, 0xde, 0xb2, 0x1b, 0x96, 0x8e, 0x3f, 0x6e, 0xe1, 0x80, 0xa8, 0x3f, - 0x82, 0xa9, 0x88, 0x06, 0x86, 0xd7, 0x40, 0x4e, 0x45, 0x79, 0x4e, 0x99, 0x2b, 0x2c, 0xbc, 0x5a, - 0x0b, 0x3d, 0x4a, 0x25, 0xd4, 0xa2, 0x8a, 0x4a, 0x39, 0xb5, 0x7b, 0xdd, 0xce, 0xf5, 0x06, 0x72, - 0xf4, 0x32, 0x89, 0x77, 0xa8, 0x16, 0xa8, 0x48, 0xc8, 0x46, 0x4c, 0x82, 0x85, 0x08, 0xaa, 0xe4, - 0x98, 0x84, 0xd7, 0x06, 0x91, 0xb0, 0x14, 0xe5, 0x5e, 0x46, 0x04, 0xe9, 0x67, 0x50, 0xb2, 0x4b, - 0x73, 0xe0, 0x42, 0x8a, 0x85, 0x81, 0xe7, 0x3a, 0x01, 0x56, 0xbf, 0x0f, 0x85, 0x08, 0xb2, 0xb0, - 0x6e, 0x7e, 0x48, 0xeb, 0xf4, 0x28, 0x86, 0xf6, 0x85, 0x02, 0x4f, 0xd5, 0x7d, 0x17, 0x59, 0x26, - 0x0a, 0x48, 0x94, 0x4a, 0x78, 0xf5, 0xe4, 0x45, 0xaa, 0x97, 0xa1, 0x8c, 0xda, 0xc8, 0x26, 0x86, - 0x85, 0x09, 0xe6, 0xb0, 0xd4, 0x8b, 0x13, 0x7a, 0x89, 0x75, 0x2f, 0xcb, 0x5e, 0xed, 0x13, 0x05, - 0x9e, 0x4e, 0xd7, 0x4d, 0xf8, 0xe3, 0x75, 0xc8, 0xd9, 0x96, 0xd0, 0xe9, 0xd2, 0x20, 0x3a, 0xad, - 0x59, 0x7a, 0xce, 0xb6, 0xd4, 0x17, 0x61, 0x2a, 0x94, 0x6d, 0xec, 0x61, 0x7b, 0x77, 0x8f, 0x30, - 0x15, 0x46, 0xf4, 0x72, 0xd8, 0xbf, 0xca, 0xba, 0xb5, 0x2f, 0x00, 0x2e, 0x24, 0x96, 0x86, 0x83, - 0x7d, 0xe9, 0x9d, 0xe7, 0xa1, 0x88, 0x0f, 0x3d, 0xdb, 0xef, 0x48, 0x14, 0x85, 0xa1, 0x4c, 0xf2, - 0x4e, 0x0e, 0xa1, 0x5e, 0x87, 0xfc, 0x0e, 0xc6, 0x62, 0xa5, 0x68, 0x09, 0x35, 0xc5, 0x5e, 0x0c, - 0x35, 0x5c, 0xc1, 0x58, 0xa7, 0xe4, 0xaa, 0x0a, 0x23, 0x4d, 0xdc, 0x74, 0x2b, 0xf9, 0xe7, 0x94, - 0xb9, 0xd3, 0x3a, 0xfb, 0xad, 0x6e, 0xc1, 0x14, 0x32, 0x4d, 0xb7, 0xe5, 0x10, 0x63, 0xd7, 0x77, - 0x5b, 0x9e, 0x61, 0x5b, 0x95, 0x12, 0x83, 0x7d, 0xa5, 0x0f, 0xec, 0x12, 0x67, 0xbb, 0x49, 0xb9, - 0xd6, 0xac, 0xd5, 0x53, 0x7a, 0x09, 0xc5, 0x7a, 0x1e, 0x28, 0x8a, 0xaa, 0xc3, 0xb8, 0xdb, 0x22, - 0x5e, 0x8b, 0x04, 0x95, 0x73, 0xcf, 0xe5, 0xe7, 0x0a, 0x0b, 0x6f, 0xd4, 0xd2, 0x23, 0x51, 0x2d, - 0xd3, 0x21, 0xb5, 0xbb, 0x0c, 0x40, 0x97, 0x40, 0xea, 0x7b, 0x30, 0x1a, 0xb4, 0x91, 0x17, 0x54, - 0x66, 0x19, 0xe2, 0xeb, 0xc3, 0x23, 0x6e, 0xb4, 0x91, 0xa7, 0x73, 0x10, 0x75, 0x0b, 0x0a, 0x16, - 0x6e, 0xe0, 0x5d, 0xb6, 0x5d, 0x82, 0xca, 0x1c, 0xc3, 0x5c, 0x1c, 0x1e, 0x73, 0x99, 0x83, 0x60, - 0x3d, 0x0a, 0xa7, 0x6e, 0x43, 0xb1, 0xe5, 0x44, 0xf1, 0x17, 0x18, 0xfe, 0x5b, 0xc3, 0xe3, 0xdf, - 0x97, 0x30, 0x58, 0x8f, 0x43, 0xaa, 0x2b, 0x50, 0xb0, 0xb7, 0x4d, 0x83, 0x73, 0x05, 0x95, 0xb7, - 0x98, 0x84, 0x8b, 0x89, 0xc9, 0xa3, 0xa1, 0xb1, 0xbb, 0x64, 0xb7, 0xcd, 0x25, 0xbe, 0xea, 0xc1, - 0x96, 0x3f, 0x83, 0xea, 0xcf, 0x15, 0x18, 0xe3, 0xbe, 0x56, 0x17, 0x61, 0xf4, 0x00, 0x35, 0x5a, - 0x58, 0xec, 0x83, 0x17, 0xfa, 0xac, 0x84, 0x4d, 0x4a, 0xab, 0x73, 0x16, 0xf5, 0x1d, 0x18, 0x47, - 0x96, 0xe5, 0xe3, 0x20, 0x10, 0xcb, 0xf3, 0x52, 0xbf, 0x75, 0xc4, 0xa9, 0x75, 0xc9, 0x56, 0xfd, - 0xa3, 0x02, 0x23, 0x74, 0x8a, 0x8e, 0xa5, 0xc6, 0x1a, 0x4c, 0x12, 0xe4, 0xef, 0x62, 0x62, 0xa0, - 0x20, 0xc0, 0x64, 0x50, 0x5d, 0x28, 0xed, 0x9a, 0xa5, 0x17, 0x38, 0x2f, 0x6b, 0xca, 0xcd, 0x96, - 0x1f, 0x6a, 0xb3, 0x55, 0x3f, 0x57, 0x60, 0x42, 0x2e, 0x0a, 0xf5, 0x6d, 0x18, 0x43, 0x4d, 0xba, - 0x37, 0x84, 0x29, 0x17, 0xfb, 0xe9, 0xc1, 0x88, 0x75, 0xc1, 0xa4, 0xde, 0x80, 0xd3, 0x3e, 0x22, - 0x98, 0x1f, 0x0f, 0xf9, 0x54, 0x4b, 0xf8, 0x99, 0x16, 0x02, 0xe8, 0x88, 0x60, 0x76, 0x1e, 0x4c, - 0xf8, 0xe2, 0x57, 0xf5, 0x17, 0x0a, 0x40, 0x77, 0x15, 0x1d, 0xcb, 0xb9, 0x31, 0x7d, 0x72, 0x47, - 0xd3, 0xa7, 0x7e, 0x16, 0xce, 0x18, 0xc9, 0xd0, 0xa3, 0x61, 0xa8, 0xa6, 0xed, 0x01, 0x11, 0x9c, - 0x6f, 0xc2, 0xc8, 0x71, 0xcf, 0x60, 0x06, 0xa0, 0xfd, 0x4a, 0x81, 0xf3, 0x62, 0xdd, 0xd5, 0x3b, - 0x6b, 0x8e, 0x85, 0x0f, 0x65, 0xf8, 0x5d, 0x87, 0xa2, 0x58, 0x87, 0x86, 0x4d, 0xfb, 0x85, 0xac, - 0x97, 0x06, 0x5b, 0xc4, 0x1c, 0x6a, 0x12, 0x45, 0x5a, 0xf4, 0x6c, 0xb2, 0xec, 0xc0, 0x6b, 0xa0, - 0x8e, 0x61, 0xba, 0xce, 0x8e, 0xed, 0x37, 0xe5, 0xd9, 0x24, 0xba, 0x6f, 0xf0, 0x5e, 0xed, 0x43, - 0x98, 0x4e, 0xea, 0x24, 0xec, 0x8e, 0xec, 0x29, 0xe5, 0x48, 0x7b, 0x4a, 0xfb, 0x00, 0xce, 0x33, - 0xc8, 0x7a, 0x47, 0x0e, 0x09, 0x7b, 0x8f, 0x0f, 0xfd, 0x89, 0x02, 0xd3, 0x49, 0x6c, 0xa1, 0xf7, - 0xfd, 0xe3, 0x3b, 0x73, 0xf5, 0x54, 0xdc, 0x9d, 0x0f, 0x14, 0xa5, 0x3e, 0x05, 0x25, 0x23, 0x86, - 0xab, 0xfd, 0x5a, 0x81, 0x99, 0x77, 0xbd, 0x3d, 0xdc, 0xc4, 0x3e, 0x6a, 0x24, 0x2c, 0x7c, 0x82, - 0x33, 0xba, 0x05, 0x95, 0x5e, 0xad, 0x4e, 0x6c, 0x4e, 0xbf, 0x54, 0xa0, 0x5c, 0x47, 0x0d, 0xe4, - 0x98, 0x38, 0x34, 0x56, 0x07, 0x79, 0x0a, 0x1b, 0x3b, 0x76, 0x83, 0x60, 0xff, 0x28, 0xd6, 0x16, - 0x05, 0xc4, 0x0a, 0x43, 0x50, 0xef, 0x40, 0x99, 0xc5, 0x50, 0xc3, 0xb6, 0x24, 0xe8, 0x70, 0xd1, - 0xb4, 0x88, 0xf8, 0x0f, 0x8e, 0x47, 0xf3, 0xc3, 0xa9, 0xae, 0xde, 0xc2, 0x1d, 0xef, 0xc2, 0xb8, - 0x90, 0x7a, 0x14, 0x8d, 0x25, 0xaf, 0xfa, 0x5d, 0x18, 0xdf, 0xe6, 0xd0, 0x42, 0xc7, 0xc1, 0xe2, - 0x9a, 0x64, 0xd2, 0x2e, 0x42, 0x71, 0xd3, 0xc6, 0x6d, 0x9a, 0x2f, 0xdf, 0x73, 0xf7, 0xb1, 0xa3, - 0x9e, 0x83, 0x51, 0x9b, 0xc6, 0x20, 0xa6, 0xd5, 0xa4, 0xce, 0x1b, 0x9a, 0x0e, 0x65, 0x49, 0x26, - 0x3d, 0xff, 0x3d, 0xc8, 0xef, 0x1c, 0xec, 0x0b, 0xe5, 0xfb, 0xe5, 0x4e, 0x2b, 0xad, 0x46, 0x83, - 0x02, 0xd8, 0xce, 0xee, 0x2d, 0xdc, 0xd1, 0x29, 0xa7, 0x76, 0x17, 0xa6, 0xba, 0x98, 0xc2, 0x2b, - 0x6f, 0xc2, 0x28, 0xa1, 0x6a, 0xf4, 0x1e, 0x1b, 0xf1, 0xbc, 0x21, 0xa6, 0xb3, 0xce, 0x79, 0xb4, - 0x9f, 0x29, 0x50, 0xdc, 0x20, 0x88, 0xb4, 0xc2, 0xd5, 0xf1, 0x58, 0x93, 0xbd, 0xf4, 0x80, 0xae, - 0x43, 0x49, 0xea, 0x20, 0x6c, 0x7a, 0x16, 0x0a, 0x41, 0xc7, 0x31, 0xe3, 0xe9, 0x2d, 0xd0, 0x2e, - 0x91, 0xdc, 0x3e, 0x0b, 0x05, 0x13, 0x11, 0x73, 0xcf, 0x76, 0x76, 0x8d, 0x96, 0x27, 0xb6, 0x16, - 0xc8, 0xae, 0xfb, 0x9e, 0xf6, 0x40, 0x81, 0xb3, 0x1c, 0x74, 0x83, 0xf8, 0x18, 0x35, 0x9f, 0xa0, - 0x79, 0x3e, 0x9c, 0x8b, 0x6b, 0x22, 0x8c, 0xfc, 0x0e, 0x5c, 0x68, 0x20, 0x82, 0x03, 0x62, 0xec, - 0x3b, 0x6e, 0xdb, 0x31, 0xb6, 0x1b, 0xae, 0xb9, 0x1f, 0x37, 0x79, 0x9a, 0x13, 0xdc, 0xa2, 0xe3, - 0x75, 0x3a, 0xdc, 0x35, 0x3f, 0xea, 0x9f, 0x5c, 0xd2, 0x3f, 0xda, 0x67, 0x79, 0x98, 0xbc, 0xe3, - 0x92, 0xee, 0xa6, 0x7f, 0x1e, 0x8a, 0xb6, 0x63, 0x36, 0x5a, 0x16, 0x36, 0x02, 0x0f, 0x3b, 0x44, - 0xb8, 0x6c, 0x52, 0x74, 0x6e, 0xd0, 0x3e, 0x75, 0x09, 0x26, 0xe4, 0x2e, 0xce, 0x48, 0x21, 0xb2, - 0xb6, 0xef, 0xb8, 0xd8, 0xbe, 0xbd, 0x91, 0x74, 0xe4, 0xb8, 0x91, 0xf4, 0x36, 0x94, 0x79, 0x8a, - 0x63, 0x10, 0x97, 0xe9, 0x6e, 0x55, 0xc6, 0x86, 0x49, 0x90, 0x8a, 0x9c, 0xfb, 0x9e, 0x4b, 0x6d, - 0xb4, 0x9e, 0xc4, 0x02, 0x78, 0x90, 0x83, 0xf3, 0x6c, 0x32, 0x56, 0x5c, 0x7f, 0xd3, 0x25, 0xb6, - 0xb3, 0x2b, 0x67, 0xe5, 0x0a, 0x9c, 0x39, 0x70, 0x09, 0xda, 0x6e, 0x60, 0x03, 0x91, 0xf8, 0xd4, - 0x97, 0xc5, 0xc0, 0x12, 0x11, 0x73, 0xde, 0xe3, 0xd9, 0xfc, 0x71, 0x3d, 0xfb, 0x04, 0x5c, 0xf1, - 0xfb, 0x1c, 0x94, 0xde, 0xb7, 0x89, 0x13, 0x39, 0x7b, 0x3f, 0x80, 0x29, 0xc7, 0x25, 0xd8, 0x30, - 0xdd, 0x66, 0xd3, 0x26, 0x4d, 0xec, 0x10, 0x7a, 0x2b, 0xa0, 0x17, 0x94, 0x5a, 0x1f, 0x2d, 0xe8, - 0xae, 0xc2, 0x37, 0x42, 0x36, 0xbd, 0x4c, 0x71, 0xba, 0xed, 0x20, 0xb5, 0x36, 0x93, 0x3f, 0xc1, - 0xda, 0xcc, 0x13, 0x70, 0x20, 0x86, 0x72, 0xe8, 0x3f, 0x11, 0x47, 0x74, 0x98, 0x6c, 0xf3, 0x2e, - 0x9e, 0x6c, 0x0f, 0x51, 0x2c, 0x11, 0x50, 0x2c, 0xeb, 0x2e, 0xb4, 0xbb, 0x0d, 0xed, 0x6f, 0x0a, - 0x4c, 0x8b, 0xc1, 0xff, 0xcf, 0x82, 0x57, 0x03, 0x66, 0x7a, 0xec, 0x7b, 0x7c, 0xe5, 0xae, 0xdf, - 0xe5, 0xa1, 0xc8, 0x42, 0x65, 0xb8, 0xea, 0xab, 0x30, 0xc1, 0xf3, 0x24, 0xcc, 0x2b, 0x49, 0x13, - 0x7a, 0xd8, 0x56, 0x7f, 0x0c, 0xb3, 0x91, 0x58, 0x6d, 0xda, 0x3b, 0xb6, 0x69, 0x58, 0xd8, 0x71, - 0x9b, 0xb6, 0x23, 0x4a, 0x04, 0x7c, 0x7f, 0xf4, 0xcb, 0x5b, 0x96, 0x29, 0x8f, 0xfe, 0x74, 0x37, - 0xc4, 0x33, 0xa8, 0xe5, 0x28, 0x92, 0xba, 0x08, 0x17, 0xa4, 0xac, 0x6e, 0xc1, 0xc0, 0x60, 0xc9, - 0x41, 0xc0, 0xf6, 0xca, 0x84, 0x3e, 0x23, 0x08, 0x96, 0xc3, 0x71, 0x96, 0x42, 0x04, 0xea, 0x1b, - 0x50, 0x91, 0xbc, 0x2d, 0x67, 0xdb, 0x75, 0x2c, 0x7a, 0x1a, 0x0b, 0xd6, 0x11, 0xc6, 0x3a, 0x2d, - 0xc6, 0xef, 0xcb, 0x61, 0xc1, 0x79, 0x09, 0xca, 0x92, 0xb3, 0xe1, 0x19, 0xce, 0x0e, 0x09, 0x2a, - 0xa3, 0x8c, 0x41, 0x1e, 0x52, 0xef, 0x79, 0x77, 0x76, 0x48, 0xa0, 0x2e, 0xc0, 0x79, 0x49, 0xe7, - 0xf9, 0xae, 0xe7, 0x06, 0xa8, 0xc1, 0xa9, 0xc7, 0x18, 0xf5, 0x59, 0x31, 0xb8, 0x2e, 0xc6, 0x18, - 0xcf, 0x12, 0x3c, 0x23, 0x79, 0x0e, 0x58, 0xb0, 0x35, 0x7c, 0x6c, 0x62, 0xdb, 0x23, 0x52, 0xb5, - 0x71, 0xc6, 0x5b, 0x15, 0x44, 0x32, 0x20, 0x33, 0x12, 0xae, 0x9e, 0x86, 0xa1, 0x24, 0x67, 0x4b, - 0xac, 0x89, 0x0d, 0x28, 0xb1, 0x19, 0x30, 0x9a, 0x98, 0xa0, 0xc8, 0x82, 0x7c, 0x79, 0x90, 0x29, - 0xb8, 0x2d, 0x78, 0xf4, 0xa2, 0x15, 0x6d, 0x6a, 0x15, 0x98, 0xbe, 0xb1, 0x87, 0x6c, 0x67, 0x1d, - 0xf9, 0xa8, 0x89, 0x09, 0xf6, 0xe5, 0xea, 0xd0, 0xf6, 0x60, 0xa6, 0x67, 0x44, 0x68, 0x72, 0x1b, - 0xc0, 0x0b, 0x7b, 0xb3, 0x52, 0x49, 0x56, 0x94, 0x0f, 0x95, 0x48, 0x42, 0x45, 0x00, 0xb4, 0x69, - 0x38, 0xb7, 0x72, 0x7b, 0xb9, 0x57, 0x03, 0x0b, 0xce, 0x27, 0xfa, 0x85, 0xfc, 0x5b, 0x29, 0xf2, - 0x5f, 0x7a, 0xb4, 0xfc, 0x95, 0xa6, 0x95, 0x21, 0xfd, 0xf3, 0x1c, 0xcc, 0xd0, 0x93, 0xb1, 0xde, - 0x89, 0x84, 0x71, 0xb1, 0x43, 0xde, 0x87, 0x72, 0xe2, 0x5c, 0x10, 0x3e, 0x1f, 0xf6, 0x58, 0x28, - 0xc5, 0x8f, 0x85, 0xb4, 0x42, 0x70, 0x3e, 0xad, 0x10, 0xfc, 0x24, 0xc2, 0xbb, 0x03, 0x95, 0x5e, - 0x7f, 0x84, 0x71, 0xbe, 0xc4, 0xd2, 0x1f, 0x96, 0x2e, 0x50, 0x9b, 0x7a, 0xbd, 0x1f, 0xcf, 0xf8, - 0x37, 0x24, 0x35, 0x85, 0xd4, 0xb1, 0xe9, 0xfa, 0x96, 0x5e, 0x0c, 0xa2, 0x9d, 0x6c, 0x02, 0x36, - 0xda, 0xc8, 0xcb, 0x98, 0x80, 0xa0, 0x8d, 0xbc, 0x13, 0x98, 0x00, 0x0a, 0xf3, 0x3f, 0x32, 0x01, - 0x3a, 0x54, 0x7a, 0xfd, 0x11, 0xd6, 0xfd, 0x47, 0xa8, 0x25, 0xc2, 0xed, 0x5a, 0xa6, 0xdb, 0xdb, - 0xc8, 0x13, 0xde, 0x66, 0xf4, 0xda, 0xbf, 0x14, 0x98, 0xbe, 0xd3, 0x6a, 0x34, 0xec, 0x1d, 0x1b, - 0xfb, 0xf1, 0xdb, 0xd6, 0x0a, 0x9c, 0x76, 0xe4, 0x88, 0xf0, 0xee, 0x5c, 0x1f, 0xd3, 0x42, 0x24, - 0xbd, 0xcb, 0xfa, 0x5f, 0xed, 0xd2, 0x79, 0x98, 0xe9, 0xb1, 0x5e, 0x78, 0xf4, 0x1c, 0x8c, 0xf2, - 0xdb, 0x08, 0x3f, 0x02, 0x79, 0x43, 0xdb, 0x84, 0xa7, 0x23, 0x27, 0xe9, 0x9a, 0xb3, 0xe3, 0xd6, - 0x3b, 0xab, 0x28, 0x08, 0xaf, 0xd1, 0xfc, 0xfd, 0x25, 0x37, 0xec, 0xfb, 0x8b, 0xf6, 0xa9, 0x02, - 0xd3, 0x09, 0x60, 0x09, 0x79, 0x09, 0x26, 0x03, 0x82, 0xfc, 0x78, 0x0e, 0xbe, 0x7a, 0x4a, 0x2f, - 0xb0, 0x5e, 0x9e, 0x81, 0x3f, 0x50, 0x14, 0x55, 0x03, 0xc0, 0x8e, 0x15, 0xbb, 0x77, 0xad, 0x2a, - 0xfa, 0x69, 0xec, 0x58, 0x21, 0x4d, 0xbd, 0x0c, 0x45, 0x23, 0x0a, 0x56, 0x2f, 0x42, 0xc1, 0xe8, - 0x72, 0x69, 0xff, 0xcc, 0x41, 0x39, 0xa1, 0x86, 0xfa, 0x14, 0x8c, 0x25, 0x24, 0x8b, 0x36, 0x15, - 0x7a, 0x44, 0x7b, 0x93, 0x89, 0x4c, 0xfe, 0x04, 0x1e, 0xd1, 0xb6, 0xa0, 0xe0, 0x61, 0x9f, 0x66, - 0x25, 0xc4, 0x3e, 0xc0, 0xe2, 0x72, 0xb7, 0x38, 0x6c, 0xde, 0xd7, 0x45, 0xd0, 0xa3, 0x70, 0xea, - 0x4d, 0x18, 0xa1, 0x5b, 0x89, 0xe5, 0x02, 0xc3, 0xa7, 0x93, 0x9b, 0x36, 0x6e, 0xeb, 0x0c, 0xa0, - 0x7e, 0x1a, 0xc6, 0xa5, 0xb7, 0x7f, 0x08, 0x33, 0x3d, 0x73, 0xde, 0x2d, 0xaf, 0x91, 0x43, 0xc3, - 0x76, 0x76, 0x5c, 0xb1, 0xa5, 0x2f, 0x0f, 0xf0, 0xe6, 0xc2, 0x10, 0xc6, 0xc8, 0x21, 0xfd, 0xab, - 0x21, 0x78, 0x26, 0x63, 0xa5, 0x9e, 0x98, 0x88, 0x8f, 0xa0, 0x28, 0x2e, 0xf2, 0x02, 0xf2, 0x3d, - 0x28, 0xb0, 0x73, 0xd1, 0x67, 0x21, 0xe6, 0x28, 0x67, 0x00, 0x38, 0xe1, 0x6f, 0xed, 0x4b, 0x1a, - 0x9b, 0x12, 0x77, 0xd3, 0xc7, 0x21, 0x48, 0xbd, 0x0d, 0x93, 0xb6, 0x85, 0x1d, 0x62, 0x93, 0x8e, - 0xb1, 0x8f, 0x3b, 0x62, 0x39, 0x5f, 0xe9, 0x13, 0x74, 0xd6, 0x04, 0xcb, 0x2d, 0xdc, 0xd1, 0x0b, - 0x76, 0xb7, 0xa1, 0xfd, 0x3b, 0x0f, 0x67, 0x53, 0x44, 0xa6, 0x65, 0x0d, 0xca, 0x89, 0x64, 0x0d, - 0xdf, 0x86, 0x11, 0x76, 0xe6, 0x72, 0xbd, 0x9f, 0xef, 0x17, 0xa4, 0xa9, 0x46, 0x8c, 0xe1, 0x31, - 0xdc, 0xdb, 0x63, 0x87, 0xc6, 0xc8, 0xd1, 0x0f, 0x8d, 0x8b, 0x50, 0xe2, 0x9b, 0xc4, 0x30, 0x7d, - 0x8c, 0x08, 0xb6, 0xd8, 0xc6, 0x1b, 0xd1, 0x8b, 0xbc, 0xf7, 0x06, 0xef, 0xa4, 0xb1, 0x51, 0x90, - 0xf1, 0x58, 0x3d, 0x26, 0x63, 0x23, 0xef, 0x65, 0xa5, 0x23, 0x1a, 0xa6, 0xaa, 0x30, 0xe1, 0xb9, - 0x81, 0xcd, 0x62, 0xcd, 0x38, 0x03, 0x0a, 0xdb, 0xea, 0x3b, 0x30, 0x16, 0xb8, 0x2d, 0xdf, 0xc4, - 0x95, 0x89, 0x74, 0x7d, 0xe3, 0x19, 0x23, 0x75, 0xdf, 0x06, 0xa3, 0xd7, 0x05, 0x1f, 0x8b, 0xaa, - 0x51, 0x35, 0xb4, 0xbf, 0xe6, 0x01, 0xba, 0x47, 0x6d, 0x5a, 0xb6, 0xa2, 0x9c, 0x48, 0xb6, 0xf2, - 0xb6, 0x38, 0xf5, 0xf9, 0xc4, 0xbf, 0x98, 0x40, 0xb3, 0xf0, 0x61, 0xfc, 0xe4, 0x5f, 0x6f, 0x20, - 0xdb, 0x21, 0xf8, 0x90, 0xf0, 0xc3, 0x3f, 0xe6, 0x95, 0x7c, 0xc2, 0x2b, 0x27, 0x35, 0x91, 0xeb, - 0x50, 0xe0, 0x2f, 0xdf, 0xfc, 0xae, 0x3c, 0x9a, 0x1a, 0xe8, 0x63, 0x9a, 0xd6, 0x11, 0x31, 0xf7, - 0xa8, 0xba, 0xfc, 0x35, 0x97, 0xdd, 0x92, 0xc1, 0x0d, 0x7f, 0xab, 0x57, 0xba, 0x4b, 0xa3, 0x81, - 0xec, 0x26, 0xb6, 0xc2, 0x59, 0x97, 0x8b, 0x83, 0x77, 0xd3, 0x79, 0xef, 0xce, 0xed, 0xf8, 0x11, - 0xe7, 0xf6, 0x0c, 0x94, 0x8d, 0xb8, 0x38, 0xed, 0xef, 0x0a, 0xcc, 0xdc, 0x6d, 0x3b, 0xd8, 0x5a, - 0x17, 0xce, 0x5a, 0xb3, 0xc2, 0xa4, 0xe9, 0x3e, 0x94, 0xa4, 0x0b, 0xe9, 0x41, 0x1b, 0x26, 0xc2, - 0x8f, 0x9c, 0x1b, 0x89, 0xc3, 0xa6, 0x9b, 0xda, 0xe1, 0x45, 0x3b, 0xa8, 0x1d, 0x77, 0x61, 0x92, - 0xf8, 0x88, 0x5d, 0x62, 0x3d, 0x64, 0xcb, 0x74, 0xec, 0xf2, 0xa3, 0x40, 0xef, 0x71, 0xfa, 0x75, - 0x64, 0xfb, 0xab, 0x0a, 0x3b, 0x29, 0x65, 0x93, 0x26, 0x02, 0xd4, 0xac, 0xb8, 0xa2, 0x6c, 0x15, - 0x47, 0x85, 0x68, 0x26, 0x54, 0x7a, 0xcd, 0x0c, 0x9f, 0x32, 0x0b, 0x21, 0x7b, 0xe6, 0x07, 0x27, - 0xa9, 0x46, 0xae, 0x59, 0x3a, 0x78, 0xe1, 0xef, 0x85, 0x3f, 0x9c, 0x85, 0xb3, 0xf4, 0x74, 0x5c, - 0xf7, 0x5d, 0xe2, 0x9a, 0x6e, 0x63, 0x03, 0xfb, 0x07, 0xb6, 0x89, 0xd5, 0xf7, 0x61, 0x8c, 0x27, - 0x64, 0x6a, 0xe6, 0xab, 0x41, 0x2c, 0x5d, 0xad, 0x5e, 0xea, 0x47, 0x26, 0x34, 0xdf, 0x87, 0xc9, - 0x68, 0xc9, 0x5b, 0x7d, 0xe9, 0xd1, 0x7c, 0xb1, 0x12, 0x7d, 0xf5, 0xe5, 0xc1, 0x88, 0xb9, 0xa8, - 0xab, 0x8a, 0xba, 0x09, 0xa3, 0xec, 0x04, 0x53, 0x5f, 0xc8, 0x62, 0x8c, 0x56, 0xc2, 0xab, 0x17, - 0xfb, 0x50, 0x85, 0xb8, 0x1f, 0x43, 0x29, 0x7e, 0x32, 0xaa, 0xaf, 0x3c, 0x92, 0x35, 0x59, 0xdd, - 0xad, 0xd6, 0x06, 0x25, 0x0f, 0x45, 0x7e, 0x08, 0xe3, 0xa2, 0x2a, 0xa5, 0x66, 0xba, 0x3a, 0x5e, - 0x3e, 0xad, 0x5e, 0xee, 0x4b, 0x27, 0xe6, 0xc4, 0x0f, 0x2b, 0x87, 0xb2, 0xe2, 0xa5, 0xd6, 0xfa, - 0xf0, 0x26, 0x4a, 0x7f, 0xd5, 0xf9, 0x81, 0xe9, 0x85, 0xcc, 0x0f, 0x60, 0x8c, 0x17, 0x52, 0xb2, - 0x17, 0x58, 0xac, 0x2c, 0x96, 0xbd, 0xc0, 0xe2, 0xf5, 0x98, 0xab, 0x0a, 0x35, 0x27, 0x51, 0xd7, - 0xc8, 0x36, 0x27, 0xbd, 0xca, 0x92, 0x6d, 0x4e, 0x56, 0xed, 0xa5, 0x01, 0xc5, 0x58, 0x51, 0x44, - 0xcd, 0x5c, 0xaa, 0x69, 0x35, 0x95, 0xea, 0x2b, 0x03, 0x52, 0x0b, 0x69, 0x2e, 0x94, 0xe2, 0x6f, - 0xfd, 0xd9, 0xeb, 0x2f, 0xf5, 0x3b, 0x85, 0xec, 0xf5, 0x97, 0xf1, 0x09, 0x81, 0x0b, 0xa5, 0xf8, - 0x23, 0x7d, 0xb6, 0xc0, 0xd4, 0x0f, 0x05, 0xb2, 0x05, 0x66, 0xbc, 0xfd, 0xb7, 0x60, 0x2a, 0xf9, - 0xf6, 0xad, 0x66, 0x4e, 0x4a, 0xc6, 0xdb, 0x7d, 0xf5, 0xea, 0xe0, 0x0c, 0x42, 0xac, 0x01, 0x13, - 0xf2, 0x6d, 0x59, 0xcd, 0xdc, 0x3e, 0x89, 0x57, 0xf3, 0xea, 0x5c, 0x7f, 0xc2, 0x70, 0x6d, 0xb6, - 0x60, 0x2a, 0x59, 0xc5, 0xc9, 0xb6, 0x2b, 0xa3, 0xfe, 0x95, 0x6d, 0x57, 0x66, 0x81, 0xa8, 0x05, - 0x53, 0xc9, 0xda, 0x45, 0xb6, 0xd8, 0x8c, 0xaa, 0x4f, 0xb6, 0xd8, 0xcc, 0xb2, 0x88, 0x0f, 0xe5, - 0xc4, 0xfd, 0x3e, 0x7b, 0x27, 0xa6, 0x97, 0x41, 0xb2, 0x77, 0x62, 0x56, 0xe1, 0xe0, 0x53, 0x05, - 0xce, 0xa7, 0xde, 0xbc, 0xd4, 0xeb, 0x03, 0x5e, 0xb0, 0x62, 0x25, 0x85, 0xea, 0x6b, 0x43, 0x72, - 0x09, 0x35, 0x48, 0xef, 0x4d, 0xbe, 0x36, 0xe8, 0x05, 0xaf, 0x9f, 0xe9, 0x19, 0xb7, 0xd6, 0xab, - 0x8a, 0xfa, 0x53, 0x50, 0x7b, 0x3f, 0x80, 0x52, 0xaf, 0x0d, 0xfd, 0xc1, 0x60, 0x75, 0x61, 0x18, - 0x16, 0x61, 0xf2, 0x27, 0x0a, 0x9c, 0x4b, 0xfb, 0x3a, 0x56, 0x7d, 0x35, 0x73, 0x83, 0x64, 0x7f, - 0xe7, 0x5b, 0xbd, 0x3e, 0x1c, 0x93, 0xd0, 0xa1, 0x0d, 0x53, 0xc9, 0xa4, 0x29, 0x7b, 0xa1, 0x67, - 0x64, 0x91, 0xd9, 0x0b, 0x3d, 0x2b, 0x1f, 0xbb, 0xaa, 0xa8, 0x87, 0x70, 0xa6, 0xe7, 0x33, 0x69, - 0x35, 0x13, 0x28, 0xeb, 0x9b, 0xf1, 0xea, 0xb5, 0x21, 0x38, 0xb8, 0xec, 0x05, 0xaf, 0xfb, 0x35, - 0x89, 0xcc, 0xde, 0x3e, 0x82, 0x09, 0xd9, 0x95, 0x1d, 0xc6, 0x12, 0x9f, 0xa0, 0x64, 0x87, 0xb1, - 0xe4, 0x77, 0x25, 0xf5, 0xcf, 0x72, 0x7f, 0x7a, 0x38, 0xab, 0x7c, 0xf5, 0x70, 0x56, 0xf9, 0xfa, - 0xe1, 0xac, 0xf2, 0xcb, 0x6f, 0x66, 0x4f, 0x7d, 0xf5, 0xcd, 0xec, 0xa9, 0xbf, 0x7c, 0x33, 0x7b, - 0x0a, 0xaa, 0xa6, 0xdb, 0xcc, 0xc0, 0xa9, 0x9f, 0x0e, 0x13, 0xcd, 0x75, 0xe5, 0xc3, 0xbb, 0xbb, - 0x36, 0xd9, 0x6b, 0x6d, 0xd7, 0x4c, 0xb7, 0x39, 0x6f, 0xba, 0x41, 0xd3, 0x0d, 0xe6, 0x7d, 0xdc, - 0x40, 0x1d, 0xec, 0xcf, 0x1f, 0x2c, 0x84, 0x3f, 0xd9, 0x05, 0x21, 0x98, 0x4f, 0xff, 0x17, 0x85, - 0x37, 0x69, 0x4b, 0x36, 0x7e, 0x93, 0xcb, 0xaf, 0x6f, 0xfe, 0xe0, 0xb7, 0xb9, 0xe9, 0x75, 0x29, - 0x9c, 0x4a, 0xab, 0x6d, 0x8a, 0xe1, 0x3f, 0x77, 0x07, 0xb6, 0xe8, 0xc0, 0x96, 0x1c, 0x78, 0x98, - 0xd3, 0xd2, 0x07, 0xb6, 0x6e, 0xae, 0xd7, 0xe5, 0x7b, 0xcc, 0x3f, 0x72, 0x15, 0x49, 0xb4, 0xb8, - 0x48, 0xa9, 0x16, 0x17, 0x25, 0xd9, 0xf6, 0x18, 0xfb, 0x4f, 0x80, 0x57, 0xff, 0x13, 0x00, 0x00, - 0xff, 0xff, 0x56, 0x54, 0x09, 0x86, 0x48, 0x31, 0x00, 0x00, + 0x15, 0xf7, 0x92, 0xfa, 0xf2, 0xa3, 0x48, 0xca, 0x63, 0x5b, 0xa2, 0x99, 0x44, 0x49, 0x37, 0xf1, + 0x47, 0x9c, 0x84, 0xb2, 0x15, 0x27, 0x4d, 0x95, 0xa4, 0x8d, 0x68, 0x45, 0x96, 0xe0, 0xd8, 0x56, + 0x57, 0xb6, 0xdc, 0xa4, 0x4a, 0x17, 0xa3, 0xdd, 0x91, 0xb4, 0x15, 0xb9, 0xbb, 0xd9, 0x1d, 0xea, + 0xa3, 0x3d, 0xa5, 0x08, 0x0a, 0x23, 0x40, 0x83, 0xa0, 0xe8, 0xa5, 0xd7, 0x1e, 0x8b, 0x5e, 0x73, + 0x2d, 0x0a, 0xf4, 0x52, 0xf4, 0x94, 0x63, 0x81, 0x02, 0x45, 0x60, 0xa3, 0x97, 0xf6, 0x5f, 0x28, + 0xd0, 0x62, 0xbe, 0x96, 0xbb, 0x4b, 0xae, 0x49, 0x4a, 0x32, 0x1c, 0xf4, 0x24, 0xce, 0xcc, 0x7b, + 0xbf, 0xf7, 0x31, 0x33, 0x6f, 0xde, 0xbc, 0x59, 0xc1, 0x77, 0x7c, 0xe2, 0xb6, 0x9a, 0x1b, 0x01, + 0x9e, 0xd9, 0x75, 0xc8, 0xde, 0xcc, 0xee, 0x55, 0xdc, 0xf0, 0xb7, 0xf1, 0x55, 0xde, 0xaa, 0xf9, + 0x81, 0x47, 0x3d, 0x34, 0xa9, 0x48, 0x6a, 0xbc, 0x53, 0x91, 0x54, 0x2f, 0x45, 0xac, 0x96, 0x17, + 0x90, 0x19, 0x6b, 0x1b, 0x3b, 0x6e, 0x1b, 0x80, 0x37, 0x05, 0x42, 0xf5, 0x72, 0x8a, 0x32, 0x38, + 0xf0, 0xa9, 0x17, 0x23, 0xe5, 0x6d, 0x49, 0xfb, 0x52, 0x92, 0xd6, 0x26, 0xfb, 0x6d, 0x42, 0x9b, + 0xec, 0x4b, 0xaa, 0x6b, 0x49, 0x2a, 0x1a, 0x60, 0x37, 0xc4, 0x16, 0x75, 0xbc, 0x98, 0x06, 0xb1, + 0xce, 0xee, 0xd8, 0xce, 0x86, 0xd5, 0xa6, 0x76, 0x36, 0x2c, 0x49, 0x95, 0xb2, 0x2b, 0xa4, 0x78, + 0x87, 0xb4, 0xe9, 0x78, 0x53, 0x50, 0xea, 0xdf, 0x68, 0x50, 0x99, 0x6f, 0xd1, 0x6d, 0x2f, 0x70, + 0x7e, 0x46, 0xe6, 0x5d, 0xbb, 0xde, 0x72, 0x1a, 0xb6, 0x41, 0x3e, 0x69, 0x91, 0x90, 0xa2, 0x9f, + 0xc0, 0x44, 0x4c, 0x03, 0xd3, 0x6f, 0x60, 0xb7, 0xa2, 0xbd, 0xa0, 0x5d, 0x2a, 0xcc, 0xbe, 0x5e, + 0x8b, 0x3c, 0xca, 0x24, 0xd4, 0xe2, 0x8a, 0x2a, 0x39, 0xb5, 0xbb, 0xed, 0xce, 0x95, 0x06, 0x76, + 0x8d, 0x32, 0x4d, 0x76, 0x20, 0x1b, 0x10, 0x96, 0xb2, 0x31, 0x97, 0x60, 0x63, 0x8a, 0x2b, 0x39, + 0x2e, 0xe1, 0x8d, 0x7e, 0x24, 0xcc, 0xc7, 0xb9, 0x17, 0x30, 0xc5, 0xc6, 0x29, 0x9c, 0xee, 0xd2, + 0x5d, 0x38, 0xd7, 0xc5, 0xc2, 0xd0, 0xf7, 0xdc, 0x90, 0xa0, 0x1f, 0x42, 0x21, 0x86, 0x2c, 0xad, + 0x9b, 0x19, 0xd0, 0x3a, 0x23, 0x8e, 0xa1, 0xff, 0x56, 0x83, 0x67, 0xea, 0x81, 0x87, 0x6d, 0x0b, + 0x87, 0x34, 0x4e, 0x25, 0xbd, 0x7a, 0xfc, 0x22, 0xd1, 0x45, 0x28, 0xe3, 0x3d, 0xec, 0x50, 0xd3, + 0x26, 0x94, 0x08, 0x58, 0xe6, 0xc5, 0x31, 0xa3, 0xc4, 0xbb, 0x17, 0x54, 0xaf, 0xfe, 0xa9, 0x06, + 0xcf, 0x76, 0xd7, 0x4d, 0xfa, 0xe3, 0x4d, 0xc8, 0x39, 0xb6, 0xd4, 0xe9, 0x42, 0x3f, 0x3a, 0x2d, + 0xdb, 0x46, 0xce, 0xb1, 0xd1, 0xcb, 0x30, 0x11, 0xc9, 0x36, 0xb7, 0x89, 0xb3, 0xb5, 0x4d, 0xb9, + 0x0a, 0x43, 0x46, 0x39, 0xea, 0x5f, 0xe2, 0xdd, 0xfa, 0x97, 0xe3, 0x70, 0x2e, 0xb5, 0x34, 0x5c, + 0x12, 0x28, 0xef, 0xbc, 0x08, 0x45, 0xb2, 0xef, 0x3b, 0xc1, 0x81, 0x42, 0xd1, 0x38, 0xca, 0xb8, + 0xe8, 0x14, 0x10, 0xe8, 0x1a, 0xe4, 0x37, 0x09, 0x91, 0x2b, 0x45, 0x4f, 0xa9, 0x29, 0xf7, 0x62, + 0xa4, 0xe1, 0x22, 0x21, 0x06, 0x23, 0x47, 0xef, 0xc3, 0x50, 0x93, 0x34, 0xbd, 0x4a, 0x9e, 0xb3, + 0x5d, 0xed, 0xc7, 0xba, 0x5b, 0xa4, 0xe9, 0xad, 0x34, 0xb0, 0xe3, 0x52, 0xb2, 0x4f, 0x0d, 0xce, + 0x8e, 0xd6, 0x61, 0x02, 0x5b, 0x96, 0xd7, 0x72, 0xa9, 0xb9, 0x15, 0x78, 0x2d, 0xdf, 0x74, 0xec, + 0x4a, 0x89, 0x43, 0xbe, 0xd6, 0x43, 0x93, 0x79, 0xc1, 0x76, 0x83, 0x71, 0x2d, 0xdb, 0x4b, 0x27, + 0x8c, 0x12, 0x4e, 0xf4, 0x3c, 0xd0, 0x34, 0x64, 0xc0, 0xa8, 0xd7, 0xa2, 0x7e, 0x8b, 0x86, 0x95, + 0x33, 0x2f, 0xe4, 0x2f, 0x15, 0x66, 0xdf, 0xaa, 0x75, 0x0f, 0x5e, 0xb5, 0x4c, 0x1f, 0xd6, 0xee, + 0x70, 0x00, 0x43, 0x01, 0xa1, 0x0f, 0x60, 0x38, 0xdc, 0xc3, 0x7e, 0x58, 0x99, 0xe6, 0x88, 0x6f, + 0x0e, 0x8e, 0xb8, 0xba, 0x87, 0x7d, 0x43, 0x80, 0xa0, 0x75, 0x28, 0xb0, 0x1f, 0xa6, 0xd5, 0xc0, + 0x4e, 0x33, 0xac, 0x3c, 0xcf, 0x31, 0xdf, 0x3e, 0x1c, 0xe6, 0x75, 0x86, 0x61, 0x40, 0xa8, 0x7e, + 0x72, 0x74, 0x9b, 0x34, 0xc8, 0x16, 0xdf, 0xbf, 0x61, 0xe5, 0x12, 0x47, 0x9f, 0x1b, 0x1c, 0x7d, + 0x41, 0x80, 0x10, 0x23, 0x0e, 0x87, 0x36, 0xa0, 0xd8, 0x72, 0xe3, 0xf8, 0xb3, 0x1c, 0xff, 0x9d, + 0xc1, 0xf1, 0xef, 0x29, 0x18, 0x62, 0x24, 0x21, 0xd1, 0x22, 0x14, 0x9c, 0x0d, 0xcb, 0x14, 0x5c, + 0x61, 0xe5, 0x1d, 0x2e, 0xe1, 0x7c, 0x6a, 0x69, 0xb0, 0x58, 0xdd, 0xde, 0x43, 0x1b, 0xd6, 0xbc, + 0xd8, 0x86, 0xe0, 0xa8, 0x9f, 0x61, 0xf5, 0x97, 0x1a, 0x8c, 0x88, 0x99, 0x44, 0x73, 0x30, 0xbc, + 0x8b, 0x1b, 0x2d, 0x22, 0x37, 0xe6, 0x4b, 0x3d, 0xd6, 0xd9, 0x1a, 0xa3, 0x35, 0x04, 0x0b, 0x7a, + 0x0f, 0x46, 0xb1, 0x6d, 0x07, 0x24, 0x0c, 0xe5, 0x7e, 0xb9, 0xd0, 0x6b, 0x95, 0x0a, 0x6a, 0x43, + 0xb1, 0x55, 0xff, 0xac, 0xc1, 0x10, 0x9b, 0xac, 0x23, 0xa9, 0xb1, 0x0c, 0xe3, 0x14, 0x07, 0x5b, + 0x84, 0x9a, 0x38, 0x0c, 0x09, 0xed, 0x57, 0x17, 0x46, 0xbb, 0x6c, 0x1b, 0x05, 0xc1, 0xcb, 0x9b, + 0x6a, 0xf7, 0xe7, 0x07, 0xda, 0xfd, 0x55, 0x1b, 0x4e, 0x46, 0x2b, 0x0e, 0xdd, 0x87, 0xb2, 0x58, + 0xc3, 0x5e, 0xb3, 0xe9, 0xd0, 0x26, 0x71, 0xa9, 0xb4, 0xa9, 0xd6, 0x03, 0x6e, 0x95, 0x62, 0x4a, + 0xae, 0x47, 0x5c, 0x46, 0x89, 0x2f, 0xdd, 0xa8, 0x5d, 0xfd, 0x42, 0x83, 0x31, 0xb5, 0xf4, 0xd0, + 0xbb, 0x30, 0x82, 0x9b, 0x6c, 0x7f, 0x4b, 0xf0, 0xf3, 0xbd, 0xac, 0xe5, 0xc4, 0x86, 0x64, 0x42, + 0xd7, 0xe1, 0x64, 0x80, 0x29, 0x11, 0xa7, 0x62, 0xbe, 0xab, 0xbf, 0xc4, 0x51, 0x1e, 0x01, 0x18, + 0x98, 0x12, 0x7e, 0x0c, 0x8e, 0x05, 0xf2, 0x57, 0xf5, 0x57, 0x1a, 0x40, 0x7b, 0xad, 0x1e, 0x69, + 0x0a, 0x13, 0xfa, 0xe4, 0x0e, 0xa7, 0x4f, 0xfd, 0x34, 0x9c, 0x32, 0xd3, 0xe1, 0x53, 0x27, 0x50, + 0xed, 0xb6, 0xd3, 0xe4, 0x99, 0x74, 0x03, 0x86, 0x8e, 0x9a, 0x7a, 0x70, 0x00, 0xfd, 0xd7, 0x1a, + 0x9c, 0x95, 0xab, 0xbb, 0x7e, 0xb0, 0xec, 0xda, 0x64, 0x5f, 0x9d, 0x3a, 0x2b, 0x50, 0x94, 0xab, + 0xdd, 0x74, 0x58, 0xbf, 0x94, 0xf5, 0x4a, 0x7f, 0x5b, 0x45, 0x40, 0x8d, 0xe3, 0x58, 0x8b, 0x1d, + 0xc9, 0xb6, 0x13, 0xfa, 0x0d, 0x7c, 0x60, 0x5a, 0x9e, 0xbb, 0xe9, 0x04, 0x4d, 0x75, 0x24, 0xcb, + 0xee, 0xeb, 0xa2, 0x57, 0xff, 0x08, 0x26, 0xd3, 0x3a, 0x49, 0xbb, 0x63, 0x3b, 0x57, 0x3b, 0xd4, + 0xce, 0xd5, 0x3f, 0x84, 0xb3, 0x1c, 0xb2, 0x7e, 0xa0, 0x86, 0xa4, 0xbd, 0x47, 0x87, 0xfe, 0x54, + 0x83, 0xc9, 0x34, 0xb6, 0xd4, 0xfb, 0xde, 0xd1, 0x9d, 0xb9, 0x74, 0x22, 0xe9, 0xce, 0x07, 0x9a, + 0x56, 0x9f, 0x80, 0x92, 0x99, 0xc0, 0xd5, 0x7f, 0xa3, 0xc1, 0xd4, 0xfb, 0xfe, 0x36, 0x69, 0x92, + 0x00, 0x37, 0x52, 0x16, 0x3e, 0xc5, 0x19, 0x5d, 0x87, 0x4a, 0xa7, 0x56, 0xc7, 0x36, 0xa7, 0x5f, + 0x69, 0x50, 0xae, 0xe3, 0x06, 0x76, 0x2d, 0x12, 0x19, 0x6b, 0x80, 0xca, 0x24, 0xcc, 0x4d, 0xa7, + 0x41, 0x49, 0x70, 0x18, 0x6b, 0x8b, 0x12, 0x62, 0x91, 0x23, 0xa0, 0xdb, 0x50, 0xe6, 0x91, 0xda, + 0x74, 0x6c, 0x05, 0x3a, 0x58, 0xcc, 0x2e, 0x62, 0xf1, 0x43, 0xe0, 0xb1, 0xb4, 0x78, 0xa2, 0xad, + 0xb7, 0x74, 0xc7, 0xfb, 0x30, 0x2a, 0xa5, 0x1e, 0x46, 0x63, 0xc5, 0x8b, 0xbe, 0x0f, 0xa3, 0x1b, + 0x02, 0x5a, 0xea, 0xd8, 0x5f, 0x5c, 0x53, 0x4c, 0xfa, 0x79, 0x28, 0xae, 0x39, 0x64, 0x8f, 0x5d, + 0x13, 0xee, 0x7a, 0x3b, 0xc4, 0x45, 0x67, 0x60, 0xd8, 0x61, 0x31, 0x88, 0x6b, 0x35, 0x6e, 0x88, + 0x86, 0x6e, 0x40, 0x59, 0x91, 0x29, 0xcf, 0xff, 0x00, 0xf2, 0x9b, 0xbb, 0x3b, 0x52, 0xf9, 0x5e, + 0xf9, 0xdf, 0x62, 0xab, 0xd1, 0x60, 0x00, 0x8e, 0xbb, 0x75, 0x93, 0x1c, 0x18, 0x8c, 0x53, 0xbf, + 0x03, 0x13, 0x6d, 0x4c, 0xe9, 0x95, 0xb7, 0x61, 0x98, 0x32, 0x35, 0x3a, 0x8f, 0x8d, 0x64, 0x76, + 0x92, 0xd0, 0xd9, 0x10, 0x3c, 0xfa, 0x2f, 0x34, 0x28, 0xb2, 0x53, 0xaa, 0x15, 0xad, 0x8e, 0x27, + 0x9a, 0xb0, 0x76, 0x0f, 0xe8, 0x06, 0x94, 0x94, 0x0e, 0xd2, 0xa6, 0xe7, 0xa1, 0x10, 0x1e, 0xb8, + 0x56, 0x32, 0xab, 0x07, 0xd6, 0x25, 0x73, 0xfa, 0xe7, 0xa1, 0x60, 0x61, 0x6a, 0x6d, 0x3b, 0xee, + 0x96, 0xd9, 0xf2, 0xe5, 0xd6, 0x02, 0xd5, 0x75, 0xcf, 0xd7, 0x1f, 0x68, 0x70, 0x5a, 0x80, 0xae, + 0xd2, 0x80, 0xe0, 0xe6, 0x53, 0x34, 0x2f, 0x80, 0x33, 0x49, 0x4d, 0xa4, 0x91, 0xdf, 0x83, 0x73, + 0x0d, 0x4c, 0x49, 0x48, 0xcd, 0x1d, 0xd7, 0xdb, 0x73, 0xcd, 0x8d, 0x86, 0x67, 0xed, 0x24, 0x4d, + 0x9e, 0x14, 0x04, 0x37, 0xd9, 0x78, 0x9d, 0x0d, 0xb7, 0xcd, 0x8f, 0xfb, 0x27, 0x97, 0xf6, 0x8f, + 0xfe, 0x79, 0x1e, 0xc6, 0x6f, 0x7b, 0xb4, 0xbd, 0xe9, 0x5f, 0x84, 0xa2, 0xe3, 0x5a, 0x8d, 0x96, + 0x4d, 0xcc, 0xd0, 0x67, 0x19, 0x8c, 0x70, 0xd9, 0xb8, 0xec, 0x5c, 0x65, 0x7d, 0x68, 0x1e, 0xc6, + 0xd4, 0x2e, 0xce, 0x48, 0x21, 0xb2, 0xb6, 0xef, 0xa8, 0xdc, 0xbe, 0x9d, 0x91, 0x74, 0xe8, 0xa8, + 0x91, 0xf4, 0x16, 0x94, 0x45, 0x8a, 0x63, 0x52, 0x8f, 0xeb, 0x6e, 0x57, 0x46, 0x06, 0x49, 0x90, + 0x8a, 0x82, 0xfb, 0xae, 0xc7, 0x6c, 0xb4, 0x9f, 0xc6, 0x02, 0x78, 0x90, 0x83, 0xb3, 0x7c, 0x32, + 0x16, 0xbd, 0x60, 0xcd, 0xa3, 0x8e, 0xbb, 0xa5, 0x66, 0xe5, 0x32, 0x9c, 0xda, 0xf5, 0x28, 0xde, + 0x68, 0x10, 0x13, 0xd3, 0xe4, 0xd4, 0x97, 0xe5, 0xc0, 0x3c, 0x95, 0x73, 0xde, 0xe1, 0xd9, 0xfc, + 0x51, 0x3d, 0xfb, 0x14, 0x5c, 0xf1, 0xc7, 0x1c, 0x94, 0xee, 0x3b, 0xd4, 0x8d, 0x9d, 0xbd, 0x1f, + 0xc2, 0x84, 0xeb, 0x51, 0x12, 0xcb, 0xae, 0xd9, 0xdd, 0x23, 0x7f, 0x88, 0xf4, 0xba, 0xcc, 0x70, + 0xda, 0xed, 0xb0, 0x6b, 0x49, 0x2a, 0x7f, 0x8c, 0x25, 0xa9, 0xa7, 0xe0, 0x40, 0x02, 0xe5, 0xc8, + 0x7f, 0x32, 0x8e, 0x18, 0x30, 0xbe, 0x27, 0xba, 0x44, 0xb2, 0x3d, 0x40, 0x8d, 0x48, 0x42, 0xf1, + 0xac, 0xbb, 0xb0, 0xd7, 0x6e, 0xe8, 0xff, 0xd0, 0x60, 0x52, 0x0e, 0xfe, 0x7f, 0xd6, 0xf9, 0x1a, + 0x30, 0xd5, 0x61, 0xdf, 0x93, 0xab, 0xf2, 0xfd, 0x21, 0x0f, 0x45, 0x1e, 0x2a, 0xa3, 0x55, 0x5f, + 0x85, 0x31, 0x91, 0x27, 0x11, 0x51, 0x40, 0x1b, 0x33, 0xa2, 0x36, 0xfa, 0x29, 0x4c, 0xc7, 0x62, + 0xb5, 0xe5, 0x6c, 0x3a, 0x96, 0x69, 0x13, 0xd7, 0x6b, 0x3a, 0xae, 0x2c, 0x44, 0x88, 0xfd, 0xd1, + 0x2b, 0x6f, 0x59, 0x60, 0x3c, 0xc6, 0xb3, 0xed, 0x10, 0xcf, 0xa1, 0x16, 0xe2, 0x48, 0x68, 0x0e, + 0xce, 0x29, 0x59, 0xed, 0xb2, 0x84, 0xc9, 0x93, 0x83, 0x90, 0xef, 0x95, 0x31, 0x63, 0x4a, 0x12, + 0x2c, 0x44, 0xe3, 0x3c, 0x85, 0x08, 0xd1, 0x5b, 0x50, 0x51, 0xbc, 0x2d, 0x77, 0xc3, 0x73, 0x6d, + 0x76, 0x1a, 0x4b, 0xd6, 0x21, 0xce, 0x3a, 0x29, 0xc7, 0xef, 0xa9, 0x61, 0xc9, 0x79, 0x01, 0xca, + 0x8a, 0xb3, 0xe1, 0x9b, 0xee, 0x26, 0x0d, 0x2b, 0xc3, 0x9c, 0x41, 0x1d, 0x52, 0x1f, 0xf8, 0xb7, + 0x37, 0x69, 0x88, 0x66, 0xe1, 0xac, 0xa2, 0xf3, 0x03, 0xcf, 0xf7, 0x42, 0xdc, 0x10, 0xd4, 0x23, + 0x9c, 0xfa, 0xb4, 0x1c, 0x5c, 0x91, 0x63, 0x9c, 0x67, 0x1e, 0x9e, 0x53, 0x3c, 0xbb, 0x3c, 0xd8, + 0x9a, 0x01, 0xb1, 0x88, 0xe3, 0x53, 0xa5, 0xda, 0x28, 0xe7, 0xad, 0x4a, 0x22, 0x15, 0x90, 0x39, + 0x89, 0x50, 0x4f, 0x27, 0x50, 0x52, 0xb3, 0x25, 0xd7, 0xc4, 0x2a, 0x94, 0xf8, 0x0c, 0x98, 0x4d, + 0x42, 0x71, 0x6c, 0x41, 0xbe, 0xda, 0xcf, 0x14, 0xdc, 0x92, 0x3c, 0x46, 0xd1, 0x8e, 0x37, 0xf5, + 0x0a, 0x4c, 0x5e, 0xdf, 0xc6, 0x8e, 0xbb, 0x82, 0x03, 0xdc, 0x24, 0x94, 0x04, 0x6a, 0x75, 0xe8, + 0xdb, 0x30, 0xd5, 0x31, 0x22, 0x35, 0xb9, 0x05, 0xe0, 0x47, 0xbd, 0x59, 0xa9, 0x24, 0x7f, 0x8b, + 0x88, 0x94, 0x48, 0x43, 0xc5, 0x00, 0xf4, 0x49, 0x38, 0xb3, 0x78, 0x6b, 0xa1, 0x53, 0x03, 0x1b, + 0xce, 0xa6, 0xfa, 0xa5, 0xfc, 0x9b, 0x5d, 0xe4, 0xbf, 0xf2, 0x78, 0xf9, 0x8b, 0x4d, 0x3b, 0x43, + 0xfa, 0x17, 0x39, 0x98, 0x62, 0x27, 0x63, 0xfd, 0x20, 0x16, 0xc6, 0xe5, 0x0e, 0xb9, 0x0f, 0xe5, + 0xd4, 0xb9, 0x20, 0x7d, 0x3e, 0x70, 0xd5, 0x25, 0x79, 0x2c, 0x74, 0xab, 0x7f, 0xe7, 0xbb, 0xd5, + 0xbf, 0x9f, 0x46, 0x78, 0x77, 0xa1, 0xd2, 0xe9, 0x8f, 0x28, 0xce, 0x97, 0x78, 0xfa, 0xc3, 0xd3, + 0x05, 0x66, 0x53, 0xa7, 0xf7, 0x93, 0x19, 0xff, 0xaa, 0xa2, 0x66, 0x90, 0x06, 0xb1, 0xbc, 0xc0, + 0x36, 0x8a, 0x61, 0xbc, 0x93, 0x4f, 0xc0, 0xea, 0x1e, 0xf6, 0x33, 0x26, 0x20, 0x5d, 0xf6, 0xca, + 0x1d, 0x47, 0xd9, 0xeb, 0x5b, 0x3d, 0x01, 0x06, 0x54, 0x3a, 0xfd, 0x11, 0x3d, 0x77, 0x0c, 0x31, + 0x4b, 0xa4, 0xdb, 0xf5, 0x4c, 0xb7, 0xef, 0x61, 0x5f, 0x7a, 0x9b, 0xd3, 0xeb, 0xff, 0xd1, 0x60, + 0xf2, 0x76, 0xab, 0xd1, 0x70, 0x36, 0x1d, 0x12, 0x24, 0x6f, 0x5b, 0x8b, 0x70, 0xd2, 0x55, 0x23, + 0xd2, 0xbb, 0x97, 0x7a, 0x98, 0x16, 0x21, 0x19, 0x6d, 0xd6, 0x6f, 0xb5, 0x4b, 0x67, 0x60, 0xaa, + 0xc3, 0x7a, 0xe9, 0xd1, 0x33, 0x30, 0x2c, 0x6e, 0x23, 0xe2, 0x08, 0x14, 0x0d, 0x7d, 0x0d, 0x9e, + 0x8d, 0x9d, 0xa4, 0xcb, 0xee, 0xa6, 0x57, 0x3f, 0x58, 0xc2, 0x61, 0x74, 0x8d, 0x16, 0xcf, 0x4e, + 0xb9, 0x41, 0x9f, 0x9d, 0xf4, 0xcf, 0x34, 0x98, 0x4c, 0x01, 0x2b, 0xc8, 0x0b, 0x30, 0x1e, 0x52, + 0x1c, 0x24, 0x73, 0xf0, 0xa5, 0x13, 0x46, 0x81, 0xf7, 0x8a, 0x0c, 0xfc, 0x81, 0xa6, 0x21, 0x1d, + 0x80, 0xb8, 0x76, 0xe2, 0xde, 0xb5, 0xa4, 0x19, 0x27, 0x89, 0x6b, 0x47, 0x34, 0xf5, 0x32, 0x14, + 0xcd, 0x38, 0x58, 0xbd, 0x08, 0x05, 0xb3, 0xcd, 0xa5, 0xff, 0x3b, 0x07, 0xe5, 0x94, 0x1a, 0xe8, + 0x19, 0x18, 0x49, 0x49, 0x96, 0x6d, 0x26, 0xf4, 0x90, 0xf6, 0xa6, 0x13, 0x99, 0xfc, 0x31, 0xbc, + 0x1d, 0xae, 0x43, 0xc1, 0x27, 0x01, 0xcb, 0x4a, 0xa8, 0xb3, 0x4b, 0xe4, 0xe5, 0x6e, 0x6e, 0xd0, + 0xbc, 0xaf, 0x8d, 0x60, 0xc4, 0xe1, 0xd0, 0x0d, 0x18, 0x62, 0x5b, 0x89, 0xe7, 0x02, 0x83, 0xa7, + 0x93, 0x6b, 0x0e, 0xd9, 0x33, 0x38, 0x40, 0xfd, 0x24, 0x8c, 0x2a, 0x6f, 0xff, 0x18, 0xa6, 0x3a, + 0xe6, 0xbc, 0x5d, 0x5e, 0xa3, 0xfb, 0xa6, 0xe3, 0x6e, 0x7a, 0x72, 0x4b, 0x5f, 0xec, 0xe3, 0x65, + 0x87, 0x23, 0x8c, 0xd0, 0x7d, 0xf6, 0x57, 0xc7, 0xf0, 0x5c, 0xc6, 0x4a, 0x3d, 0x36, 0x11, 0x1f, + 0x43, 0x51, 0x5e, 0xe4, 0x25, 0xe4, 0x07, 0x50, 0xe0, 0xe7, 0x62, 0xc0, 0x43, 0xcc, 0x61, 0xce, + 0x00, 0x70, 0xa3, 0xdf, 0xfa, 0x57, 0x2c, 0x36, 0xa5, 0xee, 0xa6, 0x4f, 0x42, 0x10, 0xba, 0x05, + 0xe3, 0x8e, 0x4d, 0x5c, 0xea, 0xd0, 0x03, 0x73, 0x87, 0x1c, 0xc8, 0xe5, 0x7c, 0xb9, 0x47, 0xd0, + 0x59, 0x96, 0x2c, 0x37, 0xc9, 0x81, 0x51, 0x70, 0xda, 0x0d, 0xfd, 0xbf, 0x79, 0x38, 0xdd, 0x45, + 0x64, 0xb7, 0xac, 0x41, 0x3b, 0x96, 0xac, 0xe1, 0xbb, 0x30, 0xc4, 0xcf, 0x5c, 0xa1, 0xf7, 0x8b, + 0xbd, 0x82, 0x34, 0xd3, 0x88, 0x33, 0x3c, 0x81, 0x7b, 0x7b, 0xe2, 0xd0, 0x18, 0x3a, 0xfc, 0xa1, + 0x71, 0x1e, 0x4a, 0x62, 0x93, 0x98, 0x56, 0x40, 0x30, 0x25, 0x36, 0xdf, 0x78, 0x43, 0x46, 0x51, + 0xf4, 0x5e, 0x17, 0x9d, 0x2c, 0x36, 0x4a, 0x32, 0x11, 0xab, 0x47, 0x54, 0x6c, 0x14, 0xbd, 0xbc, + 0x74, 0xc4, 0xc2, 0x54, 0x15, 0xc6, 0x7c, 0x2f, 0x74, 0x78, 0xac, 0x19, 0xe5, 0x40, 0x51, 0x1b, + 0xbd, 0x07, 0x23, 0xa1, 0xd7, 0x0a, 0x2c, 0x52, 0x19, 0xeb, 0xae, 0x6f, 0x32, 0x63, 0x64, 0xee, + 0x5b, 0xe5, 0xf4, 0x86, 0xe4, 0xe3, 0x51, 0x35, 0xae, 0x86, 0xfe, 0xf7, 0x3c, 0x40, 0xfb, 0xa8, + 0x7d, 0x62, 0x8f, 0x74, 0xe8, 0x5d, 0x79, 0xea, 0x8b, 0x89, 0x7f, 0x39, 0x85, 0x66, 0x93, 0xfd, + 0xe4, 0xc9, 0x1f, 0xfb, 0x00, 0x80, 0xb1, 0x25, 0xbc, 0x92, 0x4f, 0x79, 0xe5, 0xb8, 0x26, 0x72, + 0x05, 0x0a, 0xe2, 0xf5, 0x5e, 0xdc, 0x95, 0x87, 0xbb, 0x06, 0xfa, 0x84, 0xa6, 0x75, 0x4c, 0xad, + 0x6d, 0xa6, 0xae, 0x78, 0x33, 0xe6, 0xb7, 0x64, 0xf0, 0xa2, 0xdf, 0xe8, 0x72, 0x7b, 0x69, 0x34, + 0xb0, 0xd3, 0x24, 0x76, 0x34, 0xeb, 0x6a, 0x71, 0x88, 0x6e, 0x36, 0xef, 0xed, 0xb9, 0x1d, 0x3d, + 0xe4, 0xdc, 0x9e, 0x82, 0xb2, 0x99, 0x14, 0xa7, 0xff, 0x53, 0x83, 0xa9, 0x3b, 0x7b, 0x2e, 0xb1, + 0x57, 0xa4, 0xb3, 0x96, 0xed, 0x28, 0x69, 0xba, 0x07, 0x25, 0xe5, 0x42, 0x76, 0xd0, 0x46, 0x89, + 0xf0, 0x63, 0xe7, 0x46, 0xe1, 0xf0, 0xe9, 0x66, 0x76, 0xf8, 0xf1, 0x0e, 0x66, 0xc7, 0x1d, 0x18, + 0xa7, 0x01, 0xe6, 0x97, 0x58, 0x1f, 0x3b, 0x2a, 0x1d, 0xbb, 0xf8, 0x38, 0xd0, 0xbb, 0x82, 0x7e, + 0x05, 0x3b, 0xc1, 0x92, 0xc6, 0x4f, 0x4a, 0xd5, 0x64, 0x89, 0x00, 0x33, 0x2b, 0xa9, 0x28, 0x5f, + 0xc5, 0x71, 0x21, 0xba, 0x05, 0x95, 0x4e, 0x33, 0xa3, 0xa7, 0xcc, 0x42, 0xc4, 0x9e, 0xf9, 0x9d, + 0x4d, 0x57, 0x23, 0x97, 0x6d, 0x03, 0xfc, 0xe8, 0xf7, 0xec, 0x9f, 0x4e, 0xc3, 0x69, 0x76, 0x3a, + 0xae, 0x04, 0x1e, 0xf5, 0x2c, 0xaf, 0xb1, 0x4a, 0x82, 0x5d, 0xc7, 0x22, 0xe8, 0x3e, 0x8c, 0x88, + 0x84, 0x0c, 0x65, 0xbe, 0x1a, 0x24, 0xd2, 0xd5, 0xea, 0x85, 0x5e, 0x64, 0x52, 0xf3, 0x1d, 0x18, + 0x8f, 0x97, 0xbc, 0xd1, 0x2b, 0x8f, 0xe7, 0x4b, 0x94, 0xe8, 0xab, 0xaf, 0xf6, 0x47, 0x2c, 0x44, + 0x5d, 0xd1, 0xd0, 0x1a, 0x0c, 0xf3, 0x13, 0x0c, 0xbd, 0x94, 0xc5, 0x18, 0xaf, 0x84, 0x57, 0xcf, + 0xf7, 0xa0, 0x8a, 0x70, 0x3f, 0x81, 0x52, 0xf2, 0x64, 0x44, 0xaf, 0x3d, 0x96, 0x35, 0x5d, 0xdd, + 0xad, 0xd6, 0xfa, 0x25, 0x8f, 0x44, 0x7e, 0x04, 0xa3, 0xb2, 0x2a, 0x85, 0x32, 0x5d, 0x9d, 0x2c, + 0x9f, 0x56, 0x2f, 0xf6, 0xa4, 0x93, 0x73, 0x12, 0x44, 0x95, 0x43, 0x55, 0xf1, 0x42, 0xb5, 0x1e, + 0xbc, 0xa9, 0xd2, 0x5f, 0x75, 0xa6, 0x6f, 0x7a, 0x29, 0xf3, 0x43, 0x18, 0x11, 0x85, 0x94, 0xec, + 0x05, 0x96, 0x28, 0x8b, 0x65, 0x2f, 0xb0, 0x64, 0x3d, 0xe6, 0x8a, 0xc6, 0xcc, 0x49, 0xd5, 0x35, + 0xb2, 0xcd, 0xe9, 0x5e, 0x65, 0xc9, 0x36, 0x27, 0xab, 0xf6, 0xd2, 0x80, 0x62, 0xa2, 0x28, 0x82, + 0x32, 0x97, 0x6a, 0xb7, 0x9a, 0x4a, 0xf5, 0xb5, 0x3e, 0xa9, 0xa5, 0x34, 0x0f, 0x4a, 0xc9, 0xb7, + 0xfe, 0xec, 0xf5, 0xd7, 0xf5, 0x3b, 0x85, 0xec, 0xf5, 0x97, 0xf1, 0x09, 0x81, 0x07, 0xa5, 0xe4, + 0x23, 0x7d, 0xb6, 0xc0, 0xae, 0x1f, 0x0a, 0x64, 0x0b, 0xcc, 0x78, 0xfb, 0x6f, 0xc1, 0x44, 0xfa, + 0xed, 0x1b, 0x65, 0x4e, 0x4a, 0xc6, 0xdb, 0x7d, 0xf5, 0x4a, 0xff, 0x0c, 0x52, 0xac, 0x09, 0x63, + 0xea, 0x6d, 0x19, 0x65, 0x6e, 0x9f, 0xd4, 0xab, 0x79, 0xf5, 0x52, 0x6f, 0xc2, 0x68, 0x6d, 0xb6, + 0x60, 0x22, 0x5d, 0xc5, 0xc9, 0xb6, 0x2b, 0xa3, 0xfe, 0x95, 0x6d, 0x57, 0x66, 0x81, 0xa8, 0x05, + 0x13, 0xe9, 0xda, 0x45, 0xb6, 0xd8, 0x8c, 0xaa, 0x4f, 0xb6, 0xd8, 0xcc, 0xb2, 0x48, 0x00, 0xe5, + 0xd4, 0xfd, 0x3e, 0x7b, 0x27, 0x76, 0x2f, 0x83, 0x64, 0xef, 0xc4, 0xac, 0xc2, 0xc1, 0x67, 0x1a, + 0x9c, 0xed, 0x7a, 0xf3, 0x42, 0xd7, 0xfa, 0xbc, 0x60, 0x25, 0x4a, 0x0a, 0xd5, 0x37, 0x06, 0xe4, + 0x92, 0x6a, 0xd0, 0xce, 0x9b, 0x7c, 0xad, 0xdf, 0x0b, 0x5e, 0x2f, 0xd3, 0x33, 0x6e, 0xad, 0x57, + 0x34, 0xf4, 0x73, 0x40, 0x9d, 0x1f, 0x40, 0xa1, 0xab, 0x03, 0x7f, 0x96, 0x58, 0x9d, 0x1d, 0x84, + 0x45, 0x9a, 0xfc, 0xa9, 0x06, 0x67, 0xba, 0x7d, 0x14, 0x8c, 0x5e, 0xcf, 0xdc, 0x20, 0xd9, 0x9f, + 0x37, 0x57, 0xaf, 0x0d, 0xc6, 0x24, 0x75, 0xd8, 0x83, 0x89, 0x74, 0xd2, 0x94, 0xbd, 0xd0, 0x33, + 0xb2, 0xc8, 0xec, 0x85, 0x9e, 0x95, 0x8f, 0x5d, 0xd1, 0xd0, 0x3e, 0x9c, 0xea, 0xf8, 0x3a, 0x1c, + 0x65, 0x02, 0x65, 0x7d, 0x2a, 0x5f, 0xbd, 0x3a, 0x00, 0x87, 0x90, 0x3d, 0xeb, 0xb7, 0xbf, 0x26, + 0x51, 0xd9, 0xdb, 0xc7, 0x30, 0xa6, 0xba, 0xb2, 0xc3, 0x58, 0xea, 0x13, 0x94, 0xec, 0x30, 0x96, + 0xfe, 0xae, 0xa4, 0xfe, 0x79, 0xee, 0x2f, 0x0f, 0xa7, 0xb5, 0xaf, 0x1f, 0x4e, 0x6b, 0xdf, 0x3c, + 0x9c, 0xd6, 0xbe, 0x7c, 0x34, 0x7d, 0xe2, 0xeb, 0x47, 0xd3, 0x27, 0xfe, 0xf6, 0x68, 0xfa, 0x04, + 0x54, 0x2d, 0xaf, 0x99, 0x81, 0x53, 0x3f, 0x19, 0x25, 0x9a, 0x2b, 0xda, 0x47, 0x77, 0xb6, 0x1c, + 0xba, 0xdd, 0xda, 0xa8, 0x59, 0x5e, 0x73, 0xc6, 0xf2, 0xc2, 0xa6, 0x17, 0xce, 0x04, 0xa4, 0x81, + 0x0f, 0x48, 0x30, 0xb3, 0x3b, 0x1b, 0xfd, 0xe4, 0x17, 0x84, 0x70, 0xa6, 0xfb, 0x7f, 0x66, 0xbc, + 0xcd, 0x5a, 0xaa, 0xf1, 0xbb, 0x5c, 0x7e, 0x65, 0xed, 0x47, 0xbf, 0xcf, 0x4d, 0xae, 0x28, 0xe1, + 0x4c, 0x5a, 0x6d, 0x4d, 0x0e, 0xff, 0xb5, 0x3d, 0xb0, 0xce, 0x06, 0xd6, 0xd5, 0xc0, 0xc3, 0x9c, + 0xde, 0x7d, 0x60, 0xfd, 0xc6, 0x4a, 0x5d, 0xbd, 0xc7, 0xfc, 0x2b, 0x57, 0x51, 0x44, 0x73, 0x73, + 0x8c, 0x6a, 0x6e, 0x4e, 0x91, 0x6d, 0x8c, 0xf0, 0x7f, 0x80, 0x78, 0xfd, 0x7f, 0x01, 0x00, 0x00, + 0xff, 0xff, 0x8e, 0xb9, 0xe6, 0x1e, 0x3f, 0x32, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -5060,6 +5124,22 @@ func (m *TransactionPlannerRequest) MarshalToSizedBuffer(dAtA []byte) (int, erro dAtA[i] = 0xc2 } } + if len(m.SwapClaims) > 0 { + for iNdEx := len(m.SwapClaims) - 1; iNdEx >= 0; iNdEx-- { + { + size, err := m.SwapClaims[iNdEx].MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintView(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xfa + } + } if len(m.Swaps) > 0 { for iNdEx := len(m.Swaps) - 1; iNdEx >= 0; iNdEx-- { { @@ -5101,10 +5181,15 @@ func (m *TransactionPlannerRequest) MarshalToSizedBuffer(dAtA []byte) (int, erro } } } - if len(m.Memo) > 0 { - i -= len(m.Memo) - copy(dAtA[i:], m.Memo) - i = encodeVarintView(dAtA, i, uint64(len(m.Memo))) + if m.Memo != nil { + { + size, err := m.Memo.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintView(dAtA, i, uint64(size)) + } i-- dAtA[i] = 0x1a } @@ -5255,6 +5340,41 @@ func (m *TransactionPlannerRequest_Swap) MarshalToSizedBuffer(dAtA []byte) (int, return len(dAtA) - i, nil } +func (m *TransactionPlannerRequest_SwapClaim) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err + } + return dAtA[:n], nil +} + +func (m *TransactionPlannerRequest_SwapClaim) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) +} + +func (m *TransactionPlannerRequest_SwapClaim) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + if m.SwapCommitment != nil { + { + size, err := m.SwapCommitment.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintView(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + } + return len(dAtA) - i, nil +} + func (m *TransactionPlannerRequest_Delegate) Marshal() (dAtA []byte, err error) { size := m.Size() dAtA = make([]byte, size) @@ -7715,8 +7835,8 @@ func (m *TransactionPlannerRequest) Size() (n int) { l = m.Fee.Size() n += 1 + l + sovView(uint64(l)) } - l = len(m.Memo) - if l > 0 { + if m.Memo != nil { + l = m.Memo.Size() n += 1 + l + sovView(uint64(l)) } if m.XAccountGroupId != nil { @@ -7734,6 +7854,12 @@ func (m *TransactionPlannerRequest) Size() (n int) { n += 2 + l + sovView(uint64(l)) } } + if len(m.SwapClaims) > 0 { + for _, e := range m.SwapClaims { + l = e.Size() + n += 2 + l + sovView(uint64(l)) + } + } if len(m.Delegations) > 0 { for _, e := range m.Delegations { l = e.Size() @@ -7805,6 +7931,19 @@ func (m *TransactionPlannerRequest_Swap) Size() (n int) { return n } +func (m *TransactionPlannerRequest_SwapClaim) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + if m.SwapCommitment != nil { + l = m.SwapCommitment.Size() + n += 1 + l + sovView(uint64(l)) + } + return n +} + func (m *TransactionPlannerRequest_Delegate) Size() (n int) { if m == nil { return 0 @@ -9261,7 +9400,7 @@ func (m *TransactionPlannerRequest) Unmarshal(dAtA []byte) error { if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Memo", wireType) } - var stringLen uint64 + var msglen int for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowView @@ -9271,23 +9410,27 @@ func (m *TransactionPlannerRequest) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - stringLen |= uint64(b&0x7F) << shift + msglen |= int(b&0x7F) << shift if b < 0x80 { break } } - intStringLen := int(stringLen) - if intStringLen < 0 { + if msglen < 0 { return ErrInvalidLengthView } - postIndex := iNdEx + intStringLen + postIndex := iNdEx + msglen if postIndex < 0 { return ErrInvalidLengthView } if postIndex > l { return io.ErrUnexpectedEOF } - m.Memo = string(dAtA[iNdEx:postIndex]) + if m.Memo == nil { + m.Memo = &v1alpha1.MemoPlaintext{} + } + if err := m.Memo.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } iNdEx = postIndex case 14: if wireType != 2 { @@ -9392,6 +9535,40 @@ func (m *TransactionPlannerRequest) Unmarshal(dAtA []byte) error { return err } iNdEx = postIndex + case 31: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SwapClaims", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthView + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthView + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.SwapClaims = append(m.SwapClaims, &TransactionPlannerRequest_SwapClaim{}) + if err := m.SwapClaims[len(m.SwapClaims)-1].Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex case 40: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Delegations", wireType) @@ -9795,6 +9972,92 @@ func (m *TransactionPlannerRequest_Swap) Unmarshal(dAtA []byte) error { } return nil } +func (m *TransactionPlannerRequest_SwapClaim) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: SwapClaim: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: SwapClaim: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field SwapCommitment", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowView + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthView + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthView + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.SwapCommitment == nil { + m.SwapCommitment = &v1alpha11.StateCommitment{} + } + if err := m.SwapCommitment.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipView(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthView + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *TransactionPlannerRequest_Delegate) Unmarshal(dAtA []byte) error { l := len(dAtA) iNdEx := 0 From b7e185ebf7d283c12f7e42fc2db890a62da6624c Mon Sep 17 00:00:00 2001 From: Sr20de <106104431+Sr20dem@users.noreply.github.com> Date: Wed, 16 Aug 2023 19:21:39 +0300 Subject: [PATCH 17/37] Change 2.3.0 to 2.4.0 (#1253) Co-authored-by: Justin Tieri <37750742+jtieri@users.noreply.github.com> --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 7df037800..86bcd648a 100644 --- a/README.md +++ b/README.md @@ -47,7 +47,7 @@ Additional information on how IBC works can be found [here](https://ibc.cosmos.n ```shell $ git clone https://github.com/cosmos/relayer.git - $ cd relayer && git checkout v2.3.0 + $ cd relayer && git checkout v2.4.0 $ make install ``` @@ -58,7 +58,7 @@ Additional information on how IBC works can be found [here](https://ibc.cosmos.n ``` **Default config file location:** `~/.relayer/config/config.yaml` - By default, transactions will be relayed with a memo of `rly(VERSION)` e.g. `rly(v2.3.0)`. + By default, transactions will be relayed with a memo of `rly(VERSION)` e.g. `rly(v2.4.0)`. To customize the memo for all relaying, use the `--memo` flag when initializing the configuration. @@ -66,7 +66,7 @@ Additional information on how IBC works can be found [here](https://ibc.cosmos.n $ rly config init --memo "My custom memo" ``` - Custom memos will have `rly(VERSION)` appended. For example, a memo of `My custom memo` running on relayer version `v2.3.0` would result in a transaction memo of `My custom memo | rly(v2.3.0)`. + Custom memos will have `rly(VERSION)` appended. For example, a memo of `My custom memo` running on relayer version `v2.4.0` would result in a transaction memo of `My custom memo | rly(v2.4.0)`. The `--memo` flag is also available for other `rly` commands also that involve sending transactions such as `rly tx link` and `rly start`. It can be passed there to override the `config.yaml` value if desired. From 3415e6aa9514b4efa4c9beae84782d44931bb9e3 Mon Sep 17 00:00:00 2001 From: danb Date: Thu, 17 Aug 2023 16:27:54 -0400 Subject: [PATCH 18/37] rename path to path_name for consistency (#1262) --- relayer/processor/metrics.go | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/relayer/processor/metrics.go b/relayer/processor/metrics.go index 0b40e3d1a..1048eed1e 100644 --- a/relayer/processor/metrics.go +++ b/relayer/processor/metrics.go @@ -20,12 +20,12 @@ type PrometheusMetrics struct { ClientTrustingPeriod *prometheus.GaugeVec } -func (m *PrometheusMetrics) AddPacketsObserved(path, chain, channel, port, eventType string, count int) { - m.PacketObservedCounter.WithLabelValues(path, chain, channel, port, eventType).Add(float64(count)) +func (m *PrometheusMetrics) AddPacketsObserved(pathName, chain, channel, port, eventType string, count int) { + m.PacketObservedCounter.WithLabelValues(pathName, chain, channel, port, eventType).Add(float64(count)) } -func (m *PrometheusMetrics) IncPacketsRelayed(path, chain, channel, port, eventType string) { - m.PacketRelayedCounter.WithLabelValues(path, chain, channel, port, eventType).Inc() +func (m *PrometheusMetrics) IncPacketsRelayed(pathName, chain, channel, port, eventType string) { + m.PacketRelayedCounter.WithLabelValues(pathName, chain, channel, port, eventType).Inc() } func (m *PrometheusMetrics) SetLatestHeight(chain string, height int64) { @@ -52,14 +52,14 @@ func (m *PrometheusMetrics) IncBlockQueryFailure(chain, err string) { m.BlockQueryFailure.WithLabelValues(chain, err).Inc() } -func (m *PrometheusMetrics) IncTxFailure(path, chain, errDesc string) { - m.TxFailureError.WithLabelValues(path, chain, errDesc).Inc() +func (m *PrometheusMetrics) IncTxFailure(pathName, chain, errDesc string) { + m.TxFailureError.WithLabelValues(pathName, chain, errDesc).Inc() } func NewPrometheusMetrics() *PrometheusMetrics { - packetLabels := []string{"path", "chain", "channel", "port", "type"} + packetLabels := []string{"path_name", "chain", "channel", "port", "type"} heightLabels := []string{"chain"} - txFailureLabels := []string{"path", "chain", "cause"} + txFailureLabels := []string{"path_name", "chain", "cause"} blockQueryFailureLabels := []string{"chain", "type"} walletLabels := []string{"chain", "gas_price", "key", "address", "denom"} clientExpirationLables := []string{"path_name", "chain", "client_id", "trusting_period"} From c3f07c6ec2105217ce5773b659280cad7edb50dd Mon Sep 17 00:00:00 2001 From: vimystic <122659254+vimystic@users.noreply.github.com> Date: Tue, 29 Aug 2023 14:41:15 -0600 Subject: [PATCH 19/37] Use unique names for relayer images & cleanup when purpose served (#1269) * Use unique names for relayer images & cleanup when purpose served * move random tag generation and teardown image to within BuildRelayerImage * fix return line --- interchaintest/client_threshold_test.go | 8 +++--- interchaintest/docker.go | 34 ++++++++++++++++++++++--- interchaintest/ibc_test.go | 7 ++--- interchaintest/multi_channel_test.go | 4 +-- interchaintest/relayer_override_test.go | 4 +-- 5 files changed, 43 insertions(+), 14 deletions(-) diff --git a/interchaintest/client_threshold_test.go b/interchaintest/client_threshold_test.go index bc6e22a12..fd77f70db 100644 --- a/interchaintest/client_threshold_test.go +++ b/interchaintest/client_threshold_test.go @@ -42,7 +42,7 @@ func TestScenarioClientThresholdUpdate(t *testing.T) { g0, g1 := chains[0], chains[1] client, network := interchaintest.DockerSetup(t) - relayerinterchaintest.BuildRelayerImage(t) + image := relayerinterchaintest.BuildRelayerImage(t) // Relayer is set with "--time-threshold 5m" // The client being created below also has a trusting period of 5m. @@ -50,7 +50,7 @@ func TestScenarioClientThresholdUpdate(t *testing.T) { r := interchaintest.NewBuiltinRelayerFactory( ibc.CosmosRly, zaptest.NewLogger(t), - interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"), + interchaintestrelayer.CustomDockerImage(image, "latest", "100:1000"), interchaintestrelayer.ImagePull(false), interchaintestrelayer.StartupFlags("--time-threshold", "20s"), ).Build(t, client, network) @@ -164,7 +164,7 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { g0, g1 := chains[0], chains[1] client, network := interchaintest.DockerSetup(t) - relayerinterchaintest.BuildRelayerImage(t) + image := relayerinterchaintest.BuildRelayerImage(t) logger := zaptest.NewLogger(t) // Relayer is set with "--time-threshold 0" @@ -172,7 +172,7 @@ func TestScenarioClientTrustingPeriodUpdate(t *testing.T) { r := interchaintest.NewBuiltinRelayerFactory( ibc.CosmosRly, logger, - interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"), + interchaintestrelayer.CustomDockerImage(image, "latest", "100:1000"), interchaintestrelayer.ImagePull(false), ).Build(t, client, network) diff --git a/interchaintest/docker.go b/interchaintest/docker.go index d44f35cc7..384b5e4c1 100644 --- a/interchaintest/docker.go +++ b/interchaintest/docker.go @@ -12,11 +12,12 @@ import ( dockertypes "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/archive" + "github.com/google/uuid" "github.com/moby/moby/client" "github.com/stretchr/testify/require" ) -const RelayerImageName = "interchaintestrelayer" +const RelayerImagePrefix = "interchaintestrelayer" type dockerLogLine struct { Stream string `json:"stream"` @@ -29,7 +30,14 @@ type dockerErrorDetail struct { Message string `json:"message"` } -func BuildRelayerImage(t *testing.T) { +func uniqueRelayerImageName() (string, error) { + uuid, err := uuid.NewRandom() + if err != nil { + return "", fmt.Errorf("failed to generate uuid %v", err) + } + return RelayerImagePrefix + uuid.String()[:6], nil +} +func BuildRelayerImage(t *testing.T) string { _, b, _, _ := runtime.Caller(0) basepath := filepath.Join(filepath.Dir(b), "..") @@ -39,14 +47,34 @@ func BuildRelayerImage(t *testing.T) { cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) require.NoError(t, err, "error building docker client") + image, err := uniqueRelayerImageName() + require.NoError(t, err, "error generating unique tag for docker image") + res, err := cli.ImageBuild(context.Background(), tar, dockertypes.ImageBuildOptions{ Dockerfile: "local.Dockerfile", - Tags: []string{RelayerImageName}, + Tags: []string{image}, }) require.NoError(t, err, "error building docker image") defer res.Body.Close() + t.Cleanup(func() { + destroyRelayerImage(t, image) + }) handleDockerBuildOutput(t, res.Body) + return image +} + +func destroyRelayerImage(t *testing.T, image string) { + // Create a Docker client + cli, err := client.NewClientWithOpts(client.FromEnv, client.WithAPIVersionNegotiation()) + require.NoError(t, err, "error building docker client") + + // Remove the Docker image using the provided tag (uniquestr) + _, err = cli.ImageRemove(context.Background(), image, dockertypes.ImageRemoveOptions{ + Force: true, // Force remove the image + PruneChildren: true, // Remove all child images + }) + require.NoError(t, err, "error removing docker image") } func handleDockerBuildOutput(t *testing.T, body io.Reader) { diff --git a/interchaintest/ibc_test.go b/interchaintest/ibc_test.go index 6ee722104..81140ba74 100644 --- a/interchaintest/ibc_test.go +++ b/interchaintest/ibc_test.go @@ -48,10 +48,11 @@ func TestRelayerInProcess(t *testing.T) { func TestRelayerDockerEventProcessor(t *testing.T) { t.Parallel() + image := relayerinterchaintest.BuildRelayerImage(t) rf := interchaintest.NewBuiltinRelayerFactory( ibc.CosmosRly, zaptest.NewLogger(t), - interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"), + interchaintestrelayer.CustomDockerImage(image, "latest", "100:1000"), interchaintestrelayer.ImagePull(false), interchaintestrelayer.StartupFlags("--processor", "events", "--block-history", "100"), ) @@ -64,12 +65,12 @@ func TestRelayerDockerEventProcessor(t *testing.T) { // Relayer runs using the legacy processor. func TestRelayerDockerLegacyProcessor(t *testing.T) { t.Parallel() - relayerinterchaintest.BuildRelayerImage(t) + image := relayerinterchaintest.BuildRelayerImage(t) rf := interchaintest.NewBuiltinRelayerFactory( ibc.CosmosRly, zaptest.NewLogger(t), - interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"), + interchaintestrelayer.CustomDockerImage(image, "latest", "100:1000"), interchaintestrelayer.ImagePull(false), interchaintestrelayer.StartupFlags("--processor", "legacy"), ) diff --git a/interchaintest/multi_channel_test.go b/interchaintest/multi_channel_test.go index 6904f5751..ad123f756 100644 --- a/interchaintest/multi_channel_test.go +++ b/interchaintest/multi_channel_test.go @@ -18,13 +18,13 @@ import ( ) func TestMultipleChannelsOneConnection(t *testing.T) { - relayerinterchaintest.BuildRelayerImage(t) + image := relayerinterchaintest.BuildRelayerImage(t) client, network := interchaintest.DockerSetup(t) r := interchaintest.NewBuiltinRelayerFactory( ibc.CosmosRly, zaptest.NewLogger(t), - interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"), + interchaintestrelayer.CustomDockerImage(image, "latest", "100:1000"), interchaintestrelayer.ImagePull(false), ).Build(t, client, network) diff --git a/interchaintest/relayer_override_test.go b/interchaintest/relayer_override_test.go index 2885c21ff..d729cc719 100644 --- a/interchaintest/relayer_override_test.go +++ b/interchaintest/relayer_override_test.go @@ -23,13 +23,13 @@ import ( // is a client-id present in the relative path config. If the override flag is present, the relayer should always // attempt to create a new light client and then overwrite the config file if successful. func TestClientOverrideFlag(t *testing.T) { - relayerinterchaintest.BuildRelayerImage(t) + image := relayerinterchaintest.BuildRelayerImage(t) client, network := interchaintest.DockerSetup(t) r := interchaintest.NewBuiltinRelayerFactory( ibc.CosmosRly, zaptest.NewLogger(t), - interchaintestrelayer.CustomDockerImage(relayerinterchaintest.RelayerImageName, "latest", "100:1000"), + interchaintestrelayer.CustomDockerImage(image, "latest", "100:1000"), interchaintestrelayer.ImagePull(false), ).Build(t, client, network) From dcd6d37af59a57a7885c2d651a831e655d2f870f Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Sat, 2 Sep 2023 02:08:14 +0800 Subject: [PATCH 20/37] use ibc-go capability module (#1277) * use ibc-go capability module * tidy interchaintest --- go.mod | 1 + go.sum | 7 +++++-- go.work | 6 +++--- interchaintest/go.mod | 5 +++-- interchaintest/go.sum | 7 +++++-- relayer/chains/cosmos/codec.go | 2 +- relayer/chains/penumbra/codec.go | 2 +- 7 files changed, 19 insertions(+), 11 deletions(-) diff --git a/go.mod b/go.mod index a25a99b52..110d90355 100644 --- a/go.mod +++ b/go.mod @@ -14,6 +14,7 @@ require ( github.com/cosmos/cosmos-sdk v0.47.3 github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.4.10 + github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1 github.com/cosmos/ibc-go/v7 v7.2.0 github.com/cosmos/ics23/go v0.10.0 github.com/ethereum/go-ethereum v1.10.26 diff --git a/go.sum b/go.sum index 8ef18b6f2..3d3a56d43 100644 --- a/go.sum +++ b/go.sum @@ -360,6 +360,8 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1 h1:BvSKnPFKxL+TTSLxGKwJN4x0ndCZj0yfXhSvmsQztSA= +github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1/go.mod h1:A+CxAQdn2j6ihDTbClpEEBdHthWgAUAcHbRAQPY8sl4= github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= @@ -440,8 +442,8 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -463,8 +465,8 @@ github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8c github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -475,6 +477,7 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= diff --git a/go.work b/go.work index 0c68d3166..b9db675cb 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,6 @@ go 1.20 use ( -./interchaintest -. -) \ No newline at end of file + . + ./interchaintest +) diff --git a/interchaintest/go.mod b/interchaintest/go.mod index 6352c1099..4382b5c7a 100644 --- a/interchaintest/go.mod +++ b/interchaintest/go.mod @@ -4,6 +4,7 @@ go 1.20 require ( cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 + github.com/avast/retry-go/v4 v4.3.4 github.com/cometbft/cometbft v0.37.2 github.com/cosmos/cosmos-sdk v0.47.3 github.com/cosmos/go-bip39 v1.0.0 @@ -11,6 +12,7 @@ require ( github.com/cosmos/ibc-go/v7 v7.2.0 github.com/cosmos/relayer/v2 v2.0.0 github.com/docker/docker v24.0.1+incompatible + github.com/google/uuid v1.3.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 github.com/moby/moby v24.0.2+incompatible github.com/strangelove-ventures/interchaintest/v7 v7.0.0-20230608002938-79172615eed0 @@ -44,7 +46,6 @@ require ( github.com/Microsoft/go-winio v0.6.0 // indirect github.com/StirlingMarketingGroup/go-namecase v1.0.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect - github.com/avast/retry-go/v4 v4.3.4 // indirect github.com/aws/aws-sdk-go v1.44.203 // indirect github.com/benbjohnson/clock v1.3.0 // indirect github.com/beorn7/perks v1.0.1 // indirect @@ -67,6 +68,7 @@ require ( github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect github.com/cosmos/iavl v0.20.0 // indirect + github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1 // indirect github.com/cosmos/ics23/go v0.10.0 // indirect github.com/cosmos/ledger-cosmos-go v0.12.2 // indirect github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect @@ -109,7 +111,6 @@ 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.3 // indirect - github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.8.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect diff --git a/interchaintest/go.sum b/interchaintest/go.sum index 74c50689d..e2ef9d343 100644 --- a/interchaintest/go.sum +++ b/interchaintest/go.sum @@ -387,6 +387,8 @@ github.com/cosmos/gogoproto v1.4.10 h1:QH/yT8X+c0F4ZDacDv3z+xE3WU1P1Z3wQoLMBRJoK github.com/cosmos/gogoproto v1.4.10/go.mod h1:3aAZzeRWpAwr+SS/LLkICX2/kDFyaYVzckBDzygIxek= github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= +github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1 h1:BvSKnPFKxL+TTSLxGKwJN4x0ndCZj0yfXhSvmsQztSA= +github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1/go.mod h1:A+CxAQdn2j6ihDTbClpEEBdHthWgAUAcHbRAQPY8sl4= github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= @@ -484,8 +486,8 @@ github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbS github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.6.3 h1:ahKqKTFpO5KTPHxWZjEdPScmYaGtLo8Y4DMHoEsnp14= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= +github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -507,8 +509,8 @@ github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8c github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= -github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -520,6 +522,7 @@ github.com/gobwas/pool v0.2.0 h1:QEmUOlnSjWtnpRGHF3SauEiOsy82Cup83Vf2LcMlnc8= github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6WezmKEw= github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= +github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= diff --git a/relayer/chains/cosmos/codec.go b/relayer/chains/cosmos/codec.go index 0fcfbd389..16cdaa16f 100644 --- a/relayer/chains/cosmos/codec.go +++ b/relayer/chains/cosmos/codec.go @@ -10,7 +10,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/tx" authz "github.com/cosmos/cosmos-sdk/x/authz/module" "github.com/cosmos/cosmos-sdk/x/bank" - "github.com/cosmos/cosmos-sdk/x/capability" "github.com/cosmos/cosmos-sdk/x/crisis" "github.com/cosmos/cosmos-sdk/x/distribution" feegrant "github.com/cosmos/cosmos-sdk/x/feegrant/module" @@ -23,6 +22,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/upgrade" upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" + "github.com/cosmos/ibc-go/modules/capability" ibcfee "github.com/cosmos/ibc-go/v7/modules/apps/29-fee" "github.com/cosmos/ibc-go/v7/modules/apps/transfer" ibc "github.com/cosmos/ibc-go/v7/modules/core" diff --git a/relayer/chains/penumbra/codec.go b/relayer/chains/penumbra/codec.go index 2b7c00a8a..ac075741c 100644 --- a/relayer/chains/penumbra/codec.go +++ b/relayer/chains/penumbra/codec.go @@ -10,7 +10,6 @@ import ( "github.com/cosmos/cosmos-sdk/x/auth/tx" authz "github.com/cosmos/cosmos-sdk/x/authz/module" "github.com/cosmos/cosmos-sdk/x/bank" - "github.com/cosmos/cosmos-sdk/x/capability" "github.com/cosmos/cosmos-sdk/x/crisis" "github.com/cosmos/cosmos-sdk/x/distribution" feegrant "github.com/cosmos/cosmos-sdk/x/feegrant/module" @@ -23,6 +22,7 @@ import ( "github.com/cosmos/cosmos-sdk/x/staking" "github.com/cosmos/cosmos-sdk/x/upgrade" upgradeclient "github.com/cosmos/cosmos-sdk/x/upgrade/client" + "github.com/cosmos/ibc-go/modules/capability" "github.com/cosmos/ibc-go/v7/modules/apps/transfer" ibc "github.com/cosmos/ibc-go/v7/modules/core" From 2fadd37236c7c3008037222a9350c7c4bcbf0eed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?colin=20axn=C3=A9r?= <25233464+colin-axner@users.noreply.github.com> Date: Tue, 5 Sep 2023 17:51:58 +0200 Subject: [PATCH 21/37] fix: use resp.Events to parse events instead of logs (#1271) * fix: use resp.Events to parse events instead of logs * revert: use legacy behaviour as fallback mechanism * refactor: use legacy approach first, fallback onto new parsing approach --------- Co-authored-by: Justin Tieri <37750742+jtieri@users.noreply.github.com> --- relayer/chains/cosmos/tx.go | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index a9da07179..44e002889 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -519,6 +519,22 @@ func parseEventsFromTxResponse(resp *sdk.TxResponse) []provider.RelayerEvent { }) } } + + // After SDK v0.50, indexed events are no longer provided in the logs on + // transaction execution, the response events can be directly used + if len(events) == 0 { + for _, event := range resp.Events { + attributes := make(map[string]string) + for _, attribute := range event.Attributes { + attributes[attribute.Key] = attribute.Value + } + events = append(events, provider.RelayerEvent{ + EventType: event.Type, + Attributes: attributes, + }) + } + } + return events } From 7b073b3aeb2e77d2dcf3d5e05223b0e4a9c87f93 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Thu, 7 Sep 2023 07:50:38 +0800 Subject: [PATCH 22/37] working correctly with 7.3 and 0.47.5 (#1280) Co-authored-by: Justin Tieri <37750742+jtieri@users.noreply.github.com> --- go.mod | 63 +++++++++++-------- go.sum | 143 +++++++++++++++++++++++------------------- interchaintest/go.mod | 61 ++++++++++-------- interchaintest/go.sum | 141 ++++++++++++++++++++++------------------- 4 files changed, 226 insertions(+), 182 deletions(-) diff --git a/go.mod b/go.mod index 110d90355..e1d9828f2 100644 --- a/go.mod +++ b/go.mod @@ -4,18 +4,18 @@ go 1.20 require ( cosmossdk.io/api v0.3.1 - cosmossdk.io/errors v1.0.0-beta.7 - cosmossdk.io/math v1.0.1 + cosmossdk.io/errors v1.0.0 + cosmossdk.io/math v1.1.2 github.com/avast/retry-go/v4 v4.3.2 github.com/btcsuite/btcd v0.23.4 github.com/btcsuite/btcd/btcutil v1.1.3 github.com/cometbft/cometbft v0.37.2 github.com/cosmos/cosmos-proto v1.0.0-beta.2 - github.com/cosmos/cosmos-sdk v0.47.3 + github.com/cosmos/cosmos-sdk v0.47.5 github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.4.10 github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1 - github.com/cosmos/ibc-go/v7 v7.2.0 + github.com/cosmos/ibc-go/v7 v7.3.0 github.com/cosmos/ics23/go v0.10.0 github.com/ethereum/go-ethereum v1.10.26 github.com/gofrs/flock v0.8.1 @@ -30,23 +30,23 @@ require ( github.com/tyler-smith/go-bip39 v1.1.0 go.uber.org/multierr v1.8.0 go.uber.org/zap v1.24.0 - golang.org/x/mod v0.8.0 - golang.org/x/sync v0.1.0 - golang.org/x/text v0.9.0 - google.golang.org/grpc v1.55.0 + golang.org/x/mod v0.11.0 + golang.org/x/sync v0.2.0 + golang.org/x/text v0.12.0 + google.golang.org/grpc v1.56.2 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 ) require ( - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.19.0 // indirect + cloud.google.com/go v0.110.4 // indirect + cloud.google.com/go/compute v1.20.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.13.0 // indirect - cloud.google.com/go/storage v1.29.0 // indirect + cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/core v0.5.1 // indirect - cosmossdk.io/depinject v1.0.0-alpha.3 // indirect - cosmossdk.io/log v1.1.0 // indirect + cosmossdk.io/depinject v1.0.0-alpha.4 // indirect + cosmossdk.io/log v1.2.1 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect @@ -64,6 +64,9 @@ require ( github.com/cespare/xxhash v1.1.0 // indirect github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect + github.com/cockroachdb/errors v1.10.0 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect github.com/cometbft/cometbft-db v0.8.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect @@ -84,6 +87,7 @@ require ( github.com/dvsekhvalnov/jose2go v1.5.0 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect @@ -99,10 +103,10 @@ require ( github.com/google/btree v1.1.2 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/orderedcode v0.0.1 // indirect - github.com/google/s2a-go v0.1.3 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/google/uuid v1.3.0 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.8.0 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -125,13 +129,15 @@ require ( github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect github.com/klauspost/compress v1.16.3 // 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.7.16 // 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.18 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-runewidth v0.0.13 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20210601165009-122bf33a46e0 // indirect @@ -149,8 +155,9 @@ require ( github.com/prometheus/procfs v0.9.0 // indirect github.com/rakyll/statik v0.1.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/rs/cors v1.8.3 // indirect - github.com/rs/zerolog v1.29.1 // indirect + github.com/rs/zerolog v1.30.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/spf13/afero v1.9.5 // indirect github.com/spf13/cast v1.5.1 // indirect @@ -167,17 +174,19 @@ require ( go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/crypto v0.9.0 // indirect - golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect - golang.org/x/net v0.10.0 // indirect - golang.org/x/oauth2 v0.7.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.8.0 // indirect + golang.org/x/crypto v0.11.0 // indirect + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect + golang.org/x/net v0.12.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/term v0.10.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.122.0 // indirect + google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect + google.golang.org/protobuf v1.31.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect nhooyr.io/websocket v1.8.6 // indirect pgregory.net/rapid v0.5.5 // indirect diff --git a/go.sum b/go.sum index 3d3a56d43..4ed2f7f64 100644 --- a/go.sum +++ b/go.sum @@ -32,8 +32,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.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= 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 +70,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.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ= -cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= 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,13 +111,12 @@ 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 v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= 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= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -175,8 +174,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f 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.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= 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= @@ -192,14 +191,14 @@ cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= -cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= -cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= -cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= -cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= -cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +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/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM= +cosmossdk.io/math v1.1.2/go.mod h1:l2Gnda87F0su8a/7FEKJfFdJrM0JZRXQaohlgJeyQh0= cosmossdk.io/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= cosmossdk.io/tools/rosetta v0.2.1/go.mod h1:Pqdc1FdvkNV3LcNIkYWt2RQY6IP1ge6YWZk8MhhO9Hw= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= @@ -229,7 +228,6 @@ github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/ github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -326,8 +324,13 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= -github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= +github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= @@ -348,8 +351,8 @@ github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.3 h1:r0hGmZoAzP2D+MaPaFGHwAaTdFQq3pNpHaUp1BsffbM= -github.com/cosmos/cosmos-sdk v0.47.3/go.mod h1:c4OfLdAykA9zsj1CqrxBRqXzVz48I++JSvIMPSPcEmk= +github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= +github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= 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= @@ -362,8 +365,8 @@ github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1 h1:BvSKnPFKxL+TTSLxGKwJN4x0ndCZj0yfXhSvmsQztSA= github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1/go.mod h1:A+CxAQdn2j6ihDTbClpEEBdHthWgAUAcHbRAQPY8sl4= -github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= -github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= +github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= +github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= @@ -376,8 +379,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -439,11 +441,14 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 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/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= +github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -461,8 +466,8 @@ github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= @@ -483,7 +488,6 @@ github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6 github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -589,8 +593,8 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= 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 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -609,8 +613,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= 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= @@ -739,9 +743,11 @@ 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= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= @@ -767,8 +773,8 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= @@ -864,6 +870,8 @@ github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08 h1:hDSdbBuw3Lefr6 github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -911,19 +919,20 @@ github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Ung github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= -github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= +github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1073,8 +1082,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= 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= @@ -1086,8 +1095,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1114,8 +1123,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1179,8 +1188,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.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= 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= @@ -1206,8 +1215,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.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= 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= @@ -1222,8 +1231,8 @@ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= +golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1323,13 +1332,13 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc 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.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= 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= @@ -1341,8 +1350,8 @@ 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.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -1469,8 +1478,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.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= 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= @@ -1588,8 +1597,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-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= 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= @@ -1631,8 +1644,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.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= -google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= 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= @@ -1649,8 +1662,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.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/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= 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= @@ -1683,7 +1696,7 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/interchaintest/go.mod b/interchaintest/go.mod index 4382b5c7a..89c505f98 100644 --- a/interchaintest/go.mod +++ b/interchaintest/go.mod @@ -6,10 +6,10 @@ require ( cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 github.com/avast/retry-go/v4 v4.3.4 github.com/cometbft/cometbft v0.37.2 - github.com/cosmos/cosmos-sdk v0.47.3 + github.com/cosmos/cosmos-sdk v0.47.5 github.com/cosmos/go-bip39 v1.0.0 github.com/cosmos/gogoproto v1.4.10 - github.com/cosmos/ibc-go/v7 v7.2.0 + github.com/cosmos/ibc-go/v7 v7.3.0 github.com/cosmos/relayer/v2 v2.0.0 github.com/docker/docker v24.0.1+incompatible github.com/google/uuid v1.3.0 @@ -22,17 +22,17 @@ require ( ) require ( - cloud.google.com/go v0.110.0 // indirect - cloud.google.com/go/compute v1.19.0 // indirect + cloud.google.com/go v0.110.4 // indirect + cloud.google.com/go/compute v1.20.1 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.13.0 // indirect - cloud.google.com/go/storage v1.29.0 // indirect + cloud.google.com/go/iam v1.1.0 // indirect + cloud.google.com/go/storage v1.30.1 // indirect cosmossdk.io/api v0.3.1 // indirect cosmossdk.io/core v0.5.1 // indirect - cosmossdk.io/depinject v1.0.0-alpha.3 // indirect - cosmossdk.io/errors v1.0.0-beta.7 // indirect - cosmossdk.io/log v1.1.0 // indirect - cosmossdk.io/math v1.0.1 // 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/math v1.1.2 // indirect cosmossdk.io/tools/rosetta v0.2.1 // indirect filippo.io/edwards25519 v1.0.0 // indirect github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 // indirect @@ -60,6 +60,9 @@ require ( github.com/cespare/xxhash/v2 v2.2.0 // indirect github.com/chzyer/readline v1.5.1 // indirect github.com/cockroachdb/apd/v2 v2.0.2 // indirect + github.com/cockroachdb/errors v1.10.0 // indirect + github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b // indirect + github.com/cockroachdb/redact v1.1.5 // indirect github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect github.com/cometbft/cometbft-db v0.8.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect @@ -92,6 +95,7 @@ require ( github.com/ethereum/go-ethereum v1.10.26 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/getsentry/sentry-go v0.23.0 // indirect github.com/go-kit/kit v0.12.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect @@ -110,9 +114,9 @@ require ( github.com/google/go-github/v43 v43.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/orderedcode v0.0.1 // indirect - github.com/google/s2a-go v0.1.3 // indirect + github.com/google/s2a-go v0.1.4 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect - github.com/googleapis/gax-go/v2 v2.8.0 // indirect + github.com/googleapis/gax-go/v2 v2.11.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 // indirect github.com/gorilla/websocket v1.5.0 // indirect @@ -140,6 +144,8 @@ require ( github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect github.com/klauspost/compress v1.16.3 // indirect github.com/klauspost/cpuid/v2 v2.2.3 // 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.22.0 // indirect @@ -148,7 +154,7 @@ require ( 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.18 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/mattn/go-pointer v0.0.1 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect @@ -185,8 +191,9 @@ require ( github.com/rakyll/statik v0.1.7 // indirect github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/rogpeppe/go-internal v1.11.0 // indirect github.com/rs/cors v1.8.3 // indirect - github.com/rs/zerolog v1.29.1 // indirect + github.com/rs/zerolog v1.30.0 // indirect github.com/sasha-s/go-deadlock v0.3.1 // indirect github.com/sirupsen/logrus v1.9.0 // indirect github.com/spacemonkeygo/spacelog v0.0.0-20180420211403-2296661a0572 // indirect @@ -210,21 +217,23 @@ require ( go.opencensus.io v0.24.0 // indirect go.uber.org/atomic v1.10.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.9.0 // indirect - golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc // indirect - golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.10.0 // indirect - golang.org/x/oauth2 v0.7.0 // indirect - golang.org/x/sys v0.8.0 // indirect - golang.org/x/term v0.8.0 // indirect - golang.org/x/text v0.9.0 // indirect + golang.org/x/crypto v0.11.0 // indirect + golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb // indirect + golang.org/x/mod v0.11.0 // indirect + golang.org/x/net v0.12.0 // indirect + golang.org/x/oauth2 v0.8.0 // indirect + golang.org/x/sys v0.11.0 // indirect + golang.org/x/term v0.10.0 // indirect + golang.org/x/text v0.12.0 // indirect golang.org/x/tools v0.9.3 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.122.0 // indirect + google.golang.org/api v0.126.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1 // indirect - google.golang.org/grpc v1.55.0 // indirect - google.golang.org/protobuf v1.30.0 // indirect + google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect + google.golang.org/grpc v1.56.2 // indirect + google.golang.org/protobuf v1.31.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 e2ef9d343..abdaf4f74 100644 --- a/interchaintest/go.sum +++ b/interchaintest/go.sum @@ -32,8 +32,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.0 h1:Zc8gqp3+a9/Eyph2KDmcGaPtbKRIoqq4YTlL4NMD0Ys= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= +cloud.google.com/go v0.110.4 h1:1JYyxKMN9hd5dR2MYTPWkGUgcoxVVhg0LKNKEo0qvmk= +cloud.google.com/go v0.110.4/go.mod h1:+EYjdK8e5RME/VY/qLCAtuyALQ9q67dvuum8i+H5xsI= 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 +70,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.19.0 h1:+9zda3WGgW1ZSTlVppLCYFIr48Pa35q1uG2N1itbCEQ= -cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= +cloud.google.com/go/compute v1.20.1 h1:6aKEtlUiwEpJzM001l0yFkpXmUVXaN8W+fbkb2AZNbg= +cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= 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,13 +111,12 @@ 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 v0.13.0 h1:+CmB+K0J/33d0zSQ9SlFWUeCCEn5XJA0ZMZ3pHE9u8k= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= +cloud.google.com/go/iam v1.1.0 h1:67gSqaPukx7O8WLLHMa0PNs3EBGd2eE4d+psbO/CO94= +cloud.google.com/go/iam v1.1.0/go.mod h1:nxdHjaKfCr7fNYx/HJMM8LgiMugmveWlkatear5gVyk= 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= cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/longrunning v0.4.1 h1:v+yFJOfKC3yZdY6ZUI933pIYdhyhV8S3NpWrXWmg7jM= cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= @@ -175,8 +174,8 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f 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.29.0 h1:6weCgzRvMg7lzuUurI4697AqIRPU1SvzHhynwpW31jI= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= +cloud.google.com/go/storage v1.30.1 h1:uOdMxAs8HExqBlnLtnQyP0YkvbiDpdGShGKtx6U/oNM= +cloud.google.com/go/storage v1.30.1/go.mod h1:NfxhC0UJE1aXSx7CIIbCf7y9HKT7BiccwkR7+P7gN8E= 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= @@ -192,14 +191,14 @@ cosmossdk.io/api v0.3.1 h1:NNiOclKRR0AOlO4KIqeaG6PS6kswOMhHD0ir0SscNXE= cosmossdk.io/api v0.3.1/go.mod h1:DfHfMkiNA2Uhy8fj0JJlOCYOBp4eWUUJ1te5zBGNyIw= cosmossdk.io/core v0.5.1 h1:vQVtFrIYOQJDV3f7rw4pjjVqc1id4+mE0L9hHP66pyI= cosmossdk.io/core v0.5.1/go.mod h1:KZtwHCLjcFuo0nmDc24Xy6CRNEL9Vl/MeimQ2aC7NLE= -cosmossdk.io/depinject v1.0.0-alpha.3 h1:6evFIgj//Y3w09bqOUOzEpFj5tsxBqdc5CfkO7z+zfw= -cosmossdk.io/depinject v1.0.0-alpha.3/go.mod h1:eRbcdQ7MRpIPEM5YUJh8k97nxHpYbc3sMUnEtt8HPWU= -cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= -cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/log v1.1.0 h1:v0ogPHYeTzPcBTcPR1A3j1hkei4pZama8kz8LKlCMv0= -cosmossdk.io/log v1.1.0/go.mod h1:6zjroETlcDs+mm62gd8Ig7mZ+N+fVOZS91V17H+M4N4= -cosmossdk.io/math v1.0.1 h1:Qx3ifyOPaMLNH/89WeZFH268yCvU4xEcnPLu3sJqPPg= -cosmossdk.io/math v1.0.1/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +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/math v1.1.2 h1:ORZetZCTyWkI5GlZ6CZS28fMHi83ZYf+A2vVnHNzZBM= +cosmossdk.io/math v1.1.2/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/tools/rosetta v0.2.1 h1:ddOMatOH+pbxWbrGJKRAawdBkPYLfKXutK9IETnjYxw= @@ -246,7 +245,6 @@ github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/ github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/alecthomas/participle/v2 v2.0.0-alpha7 h1:cK4vjj0VSgb3lN1nuKA5F7dw+1s1pWBe5bx7nNCnN+c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= @@ -349,8 +347,13 @@ github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= -github.com/cockroachdb/apd/v3 v3.1.0 h1:MK3Ow7LH0W8zkd5GMKA1PvS9qG3bWFI95WaVNfyZJ/w= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= +github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= +github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE= +github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b/go.mod h1:Vz9DsVWQQhf3vs21MhPMZpMGSht7O/2vFW2xusFUVOs= +github.com/cockroachdb/redact v1.1.5 h1:u1PMllDkdFfPWaNGMyLD1+so+aq3uUItthCFqzwPJ30= +github.com/cockroachdb/redact v1.1.5/go.mod h1:BVNblN9mBWFyMyqK1k3AAiSxhvhfK2oOZZ2lK+dpvRg= github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= github.com/coinbase/rosetta-sdk-go/types v1.0.0 h1:jpVIwLcPoOeCR6o1tU+Xv7r5bMONNbHU7MuEHboiFuA= github.com/coinbase/rosetta-sdk-go/types v1.0.0/go.mod h1:eq7W2TMRH22GTW0N0beDnN931DW0/WOI1R2sdHNHG4c= @@ -375,8 +378,8 @@ github.com/cosmos/btcutil v1.0.5 h1:t+ZFcX77LpKtDBhjucvnOH8C2l2ioGsBNEQ3jef8xFk= github.com/cosmos/btcutil v1.0.5/go.mod h1:IyB7iuqZMJlthe2tkIFL33xPyzbFYP0XVdS8P5lUPis= github.com/cosmos/cosmos-proto v1.0.0-beta.2 h1:X3OKvWgK9Gsejo0F1qs5l8Qn6xJV/AzgIWR2wZ8Nua8= github.com/cosmos/cosmos-proto v1.0.0-beta.2/go.mod h1:+XRCLJ14pr5HFEHIUcn51IKXD1Fy3rkEQqt4WqmN4V0= -github.com/cosmos/cosmos-sdk v0.47.3 h1:r0hGmZoAzP2D+MaPaFGHwAaTdFQq3pNpHaUp1BsffbM= -github.com/cosmos/cosmos-sdk v0.47.3/go.mod h1:c4OfLdAykA9zsj1CqrxBRqXzVz48I++JSvIMPSPcEmk= +github.com/cosmos/cosmos-sdk v0.47.5 h1:n1+WjP/VM/gAEOx3TqU2/Ny734rj/MX1kpUnn7zVJP8= +github.com/cosmos/cosmos-sdk v0.47.5/go.mod h1:EHwCeN9IXonsjKcjpS12MqeStdZvIdxt3VYXhus3G3c= 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= @@ -389,8 +392,8 @@ github.com/cosmos/iavl v0.20.0 h1:fTVznVlepH0KK8NyKq8w+U7c2L6jofa27aFX6YGlm38= github.com/cosmos/iavl v0.20.0/go.mod h1:WO7FyvaZJoH65+HFOsDir7xU9FWk2w9cHXNW1XHcl7A= github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1 h1:BvSKnPFKxL+TTSLxGKwJN4x0ndCZj0yfXhSvmsQztSA= github.com/cosmos/ibc-go/modules/capability v1.0.0-rc1/go.mod h1:A+CxAQdn2j6ihDTbClpEEBdHthWgAUAcHbRAQPY8sl4= -github.com/cosmos/ibc-go/v7 v7.2.0 h1:dx0DLUl7rxdyZ8NiT6UsrbzKOJx/w7s+BOaewFRH6cg= -github.com/cosmos/ibc-go/v7 v7.2.0/go.mod h1:OOcjKIRku/j1Xs1RgKK0yvKRrJ5iFuZYMetR1n3yMlc= +github.com/cosmos/ibc-go/v7 v7.3.0 h1:QtGeVMi/3JeLWuvEuC60sBHpAF40Oenx/y+bP8+wRRw= +github.com/cosmos/ibc-go/v7 v7.3.0/go.mod h1:mUmaHFXpXrEdcxfdXyau+utZf14pGKVUiXwYftRZZfQ= github.com/cosmos/ics23/go v0.10.0 h1:iXqLLgp2Lp+EdpIuwXTYIQU+AiHj9mOC2X9ab++bZDM= github.com/cosmos/ics23/go v0.10.0/go.mod h1:ZfJSmng/TBNTBkFemHHHj5YY7VAU/MBU980F4VU1NG0= github.com/cosmos/ledger-cosmos-go v0.12.2 h1:/XYaBlE2BJxtvpkHiBm97gFGSGmYGKunKyF3nNqAXZA= @@ -403,8 +406,7 @@ github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46t github.com/creachadair/taskgroup v0.4.2 h1:jsBLdAJE42asreGss2xZGZ8fJra7WtwnHWeJFxv2Li8= github.com/creachadair/taskgroup v0.4.2/go.mod h1:qiXUOSrbwAY3u0JPGTzObbE3yf9hcXHDKBZ2ZjpCbgM= github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/cucumber/common/gherkin/go/v22 v22.0.0 h1:4K8NqptbvdOrjL9DEea6HFjSpbdT9+Q5kgLpmmsHYl0= -github.com/cucumber/common/messages/go/v17 v17.1.1 h1:RNqopvIFyLWnKv0LfATh34SWBhXeoFTJnSrgm9cT/Ts= +github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/cyphar/filepath-securejoin v0.2.3/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/danieljoos/wincred v1.1.2 h1:QLdCxFs1/Yl4zduvBdcHB8goaYk9RARS2SgLLRuAyr0= github.com/danieljoos/wincred v1.1.2/go.mod h1:GijpziifJoIBfYh+S7BbkdUTU4LfM+QnGqR5Vl2tAx0= @@ -483,11 +485,14 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 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/getsentry/sentry-go v0.23.0 h1:dn+QRCeJv4pPt9OjVXiMcGIBIefaTJPw/h0bZWO05nE= +github.com/getsentry/sentry-go v0.23.0/go.mod h1:lc76E2QywIyW8WuBnwl8Lc4bkmQH4+w1gwTf25trprY= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -505,8 +510,8 @@ github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= +github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= @@ -529,7 +534,6 @@ github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5x github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gofrs/uuid v4.3.0+incompatible h1:CaSVZxm5B+7o45rtab4jC2G37WGYX1zQfuU2i6DSvnc= github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= @@ -630,8 +634,8 @@ github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.3 h1:FAgZmpLl/SXurPEZyCMPBIiiYeTbqfjlbdnCNTAkbGE= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= +github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= +github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= 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 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= @@ -650,8 +654,8 @@ github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99 github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.8.0 h1:UBtEZqx1bjXtOQ5BVTkuYghXrr3N4V123VKJK67vJZc= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= +github.com/googleapis/gax-go/v2 v2.11.0 h1:9V9PWXEsWnPpQhu/PeQIkS4eGzMlTLGgt80cUUI8Ki4= +github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= 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= @@ -789,9 +793,11 @@ github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFB github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= @@ -821,8 +827,8 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-pointer v0.0.1 h1:n+XhsuGeVO6MEAp7xyEukFINEa+Quek5psIR/ylA6o0= github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnUbNvJZAlc= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= @@ -959,6 +965,8 @@ github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0 github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -1006,7 +1014,6 @@ github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Ung github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475 h1:N/ElC8H3+5XpJzTSTfLsJV/mx9Q9g7kxmchpfZyxgzM= github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/regen-network/gocuke v0.6.2 h1:pHviZ0kKAq2U2hN2q3smKNxct6hS0mGByFMHGnWA97M= github.com/regen-network/protobuf v1.3.3-alpha.regen.1 h1:OHEc+q5iIAXpqiqFKeLpu5NwTIkVXUs48vFMwzqpqY4= github.com/regen-network/protobuf v1.3.3-alpha.regen.1/go.mod h1:2DjTFR1HhMQhiWC5sZ4OhQ3+NtdbZ6oBDKQwq5Ou+FI= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -1016,13 +1023,15 @@ github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= +github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= +github.com/rogpeppe/go-internal v1.11.0 h1:cWPaGQEPrBb5/AsnsZesgZZ9yb1OQ+GOISoDNXVBh4M= +github.com/rogpeppe/go-internal v1.11.0/go.mod h1:ddIwULY96R17DhadqLgMfk9H9tvdUzkipdSkR5nkCZA= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.3 h1:O+qNyWn7Z+F9M0ILBHgMVPuB1xTOucVd5gtaYyXBpRo= github.com/rs/cors v1.8.3/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.29.1 h1:cO+d60CHkknCbvzEWxP0S9K6KqyTjrCNUy1LdQLCGPc= -github.com/rs/zerolog v1.29.1/go.mod h1:Le6ESbR7hc+DP6Lt1THiV8CQSdkkNrd3R0XbEgp3ZBU= +github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= +github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -1185,8 +1194,8 @@ golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.9.0 h1:LF6fAI+IutBocDJ2OT0Q1g8plpYljMZ4+lty+dsqw3g= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= +golang.org/x/crypto v0.11.0 h1:6Ewdq3tDic1mg5xRO4milcWCfMVQhI4NkqWWvqejpuA= +golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= 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= @@ -1198,8 +1207,8 @@ golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= golang.org/x/exp v0.0.0-20200331195152-e8c3332aa8e5/go.mod h1:4M0jN8W1tt0AVLNr8HDosyJCDCDuyL9N9+3m7wDWgKw= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc h1:mCRnTeVUjcrhlRmO0VK8a6k6Rrf6TF9htwo2pJVSjIU= -golang.org/x/exp v0.0.0-20230515195305-f3d0a9c9a5cc/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb h1:xIApU0ow1zwMa2uL1VDNeQlNVFTWMQxZUZCMDy0Q4Us= +golang.org/x/exp v0.0.0-20230711153332-06a737ee72cb/go.mod h1:FXUEEKJgO7OQYeo8N01OfiKP8RXMtf6e8aTskBGqWdc= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -1226,8 +1235,8 @@ golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.11.0 h1:bUO06HqtnRcc/7l71XBe4WcqTZ+3AH1J59zWDDwLKgU= +golang.org/x/mod v0.11.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180719180050-a680a1efc54d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1291,8 +1300,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.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.12.0 h1:cfawfvKITfUsFCeJIHJrbSxpeu/E81khclypR0GVT50= +golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= 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= @@ -1318,8 +1327,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.7.0 h1:qe6s0zUXlPX80/dITx3440hWZ7GwMwgDDyrSGTPJG/g= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= +golang.org/x/oauth2 v0.8.0 h1:6dkIjl3j3LtZ/O3sTgZTMsLKSftL/B8Zgq4huOIIUu8= +golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= 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= @@ -1443,13 +1452,13 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc 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.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= -golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= +golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= 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.8.0 h1:n5xxQn2i3PC0yLAbjTpNT85q/Kgzcr2gIoX9OrJUols= -golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= +golang.org/x/term v0.10.0 h1:3R7pNqamzBraeqj/Tj8qt1aQ2HpmlC+Cx/qL/7hn4/c= +golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= 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= @@ -1461,13 +1470,13 @@ 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.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= -golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= +golang.org/x/text v0.12.0 h1:k+n5B8goJNdU7hSvEtMUz3d1Q6D/XW4COJSJR6fN0mc= +golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0 h1:xYY+Bajn2a7VBmTM5GikTmnK8ZuX8YgnQCqZpbBNtmA= +golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= 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= @@ -1589,8 +1598,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.122.0 h1:zDobeejm3E7pEG1mNHvdxvjs5XJoCMzyNH+CmwL94Es= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= +google.golang.org/api v0.126.0 h1:q4GJq+cAdMAC7XP7njvQ4tvohGLiSlytuL4BQxbIZ+o= +google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= 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= @@ -1709,8 +1718,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-20230410155749-daa745c078e1 h1:KpwkzHKEF7B9Zxg18WzOa7djJ+Ha5DzthMyZYQfEn2A= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130 h1:Au6te5hbKUV8pIYWHqOUZ1pva5qK/rwbIhoXEUB9Lu8= +google.golang.org/genproto v0.0.0-20230706204954-ccb25ca9f130/go.mod h1:O9kGHb51iE/nOGvQaDUuadVYqovW56s5emA88lQnj6Y= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529 h1:s5YSX+ZH5b5vS9rnpGymvIyMpLRJizowqDlOuyjXnTk= +google.golang.org/genproto/googleapis/api v0.0.0-20230629202037-9506855d4529/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= 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= @@ -1752,8 +1765,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.55.0 h1:3Oj82/tFSCeUrRTg/5E/7d/W5A1tj6Ky1ABAuZuv5ag= -google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= +google.golang.org/grpc v1.56.2 h1:fVRFRnXvU+x6C4IlHZewvJOVHoOv1TUuQyoRsYnB4bI= +google.golang.org/grpc v1.56.2/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= 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= @@ -1770,8 +1783,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.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng= -google.golang.org/protobuf v1.30.0/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= 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= @@ -1806,7 +1819,7 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= From b5dce36a3ea211220ba290ddf203b9c76e575add Mon Sep 17 00:00:00 2001 From: vimystic <122659254+vimystic@users.noreply.github.com> Date: Thu, 7 Sep 2023 17:49:56 -0600 Subject: [PATCH 23/37] Add use command to "rly keys" (#1282) --- .github/workflows/interchaintest.yml | 6 +++++- cmd/appstate.go | 31 ++++++++++++++++++++++++++++ cmd/config.go | 4 ++-- cmd/keys.go | 17 +++++++++++++++ relayer/chains/cosmos/keys.go | 10 ++++++++- relayer/chains/penumbra/keys.go | 7 +++++++ relayer/provider/provider.go | 1 + 7 files changed, 72 insertions(+), 4 deletions(-) diff --git a/.github/workflows/interchaintest.yml b/.github/workflows/interchaintest.yml index f136b26d1..b31ab3c1e 100644 --- a/.github/workflows/interchaintest.yml +++ b/.github/workflows/interchaintest.yml @@ -152,4 +152,8 @@ jobs: ${{ runner.os }}-go- - name: interchaintest - run: make interchaintest-scenario \ No newline at end of file + run: make interchaintest-scenario + + - name: Prune Docker images + if: always() #ensure dangling images are pruned after interchain-test scenario passes or fails + run: docker image prune -f diff --git a/cmd/appstate.go b/cmd/appstate.go index d6378bb8a..5017df85e 100644 --- a/cmd/appstate.go +++ b/cmd/appstate.go @@ -251,3 +251,34 @@ func (a *appState) updatePathConfig( return nil }) } + +func (a *appState) useKey(chainName, key string) error { + + chain, exists := a.config.Chains[chainName] + if !exists { + return fmt.Errorf("chain %s not found in config", chainName) + } + + cc := chain.ChainProvider + + info, err := cc.ListAddresses() + if err != nil { + return err + } + value, exists := info[key] + currentValue := a.config.Chains[chainName].ChainProvider.Key() + + if currentValue == key { + return fmt.Errorf("config is already using %s -> %s for %s", key, value, cc.ChainName()) + } + + if exists { + fmt.Printf("Config will now use %s -> %s for %s\n", key, value, cc.ChainName()) + } else { + return fmt.Errorf("key %s does not exist for chain %s", key, cc.ChainName()) + } + return a.performConfigLockingOperation(context.Background(), func() error { + a.config.Chains[chainName].ChainProvider.UseKey(key) + return nil + }) +} diff --git a/cmd/config.go b/cmd/config.go index 9888a4596..80ae95e4c 100644 --- a/cmd/config.go +++ b/cmd/config.go @@ -395,8 +395,8 @@ func UnmarshalJSONProviderConfig(data []byte, customTypes map[string]reflect.Typ } typeName, ok := m["type"].(string) - if !ok { - return nil, errors.New("cannot find type"); + if !ok { + return nil, errors.New("cannot find type") } var provCfg provider.ProviderConfig diff --git a/cmd/keys.go b/cmd/keys.go index 0ddd447d4..fb09cf46f 100644 --- a/cmd/keys.go +++ b/cmd/keys.go @@ -45,6 +45,7 @@ func keysCmd(a *appState) *cobra.Command { cmd.AddCommand( keysAddCmd(a), + keysUseCmd(a), keysRestoreCmd(a), keysDeleteCmd(a), keysListCmd(a), @@ -55,6 +56,22 @@ func keysCmd(a *appState) *cobra.Command { return cmd } +func keysUseCmd(a *appState) *cobra.Command { + + cmd := &cobra.Command{ + Use: "use chain_name key_name", + Aliases: []string{"a"}, + Short: "Use a key from the keychain associated with a particular chain. Look at ~/.relayer/keys/ibc-0/keyring-test ", + Args: withUsage(cobra.ExactArgs(2)), + Example: strings.TrimSpace(fmt.Sprintf(` +$ %s keys use ibc-0 key_name`, appName)), + RunE: func(cmd *cobra.Command, args []string) error { + return a.useKey(args[0], args[1]) + }, + } + return cmd +} + // keysAddCmd respresents the `keys add` command func keysAddCmd(a *appState) *cobra.Command { cmd := &cobra.Command{ diff --git a/relayer/chains/cosmos/keys.go b/relayer/chains/cosmos/keys.go index 858f77505..ce6c2a2ef 100644 --- a/relayer/chains/cosmos/keys.go +++ b/relayer/chains/cosmos/keys.go @@ -4,6 +4,8 @@ import ( "errors" "os" + "github.com/cosmos/relayer/v2/relayer/provider" + ckeys "github.com/cosmos/cosmos-sdk/client/keys" "github.com/cosmos/cosmos-sdk/crypto/hd" "github.com/cosmos/cosmos-sdk/crypto/keyring" @@ -12,7 +14,6 @@ import ( "github.com/cosmos/relayer/v2/relayer/chains/cosmos/keys/sr25519" "github.com/cosmos/relayer/v2/relayer/codecs/ethermint" "github.com/cosmos/relayer/v2/relayer/codecs/injective" - "github.com/cosmos/relayer/v2/relayer/provider" ) const ethereumCoinType = uint32(60) @@ -69,6 +70,13 @@ func (cc *CosmosProvider) AddKey(name string, coinType uint32, signingAlgorithm return ko, nil } +// Updates config.yaml chain with the specified key. +// It fails config is already using the same key or if the key does not exist +func (cc *CosmosProvider) UseKey(key string) error { + cc.PCfg.Key = key + return nil +} + // RestoreKey converts a mnemonic to a private key and BIP-39 HD Path and persists it to the keystore. // It fails if there is an existing key with the same address. func (cc *CosmosProvider) RestoreKey(name, mnemonic string, coinType uint32, signingAlgorithm string) (address string, err error) { diff --git a/relayer/chains/penumbra/keys.go b/relayer/chains/penumbra/keys.go index aa09fa7b1..0c6131fda 100644 --- a/relayer/chains/penumbra/keys.go +++ b/relayer/chains/penumbra/keys.go @@ -66,6 +66,13 @@ func (cc *PenumbraProvider) AddKey(name string, coinType uint32, signingAlgorith return ko, nil } +// Updates config.yaml chain with the specified key. +// It fails config is already using the same key or if the key does not exist +func (cc *PenumbraProvider) UseKey(key string) error { + cc.PCfg.Key = key + return nil +} + // RestoreKey converts a mnemonic to a private key and BIP-39 HD Path and persists it to the keystore. // It fails if there is an existing key with the same address. func (cc *PenumbraProvider) RestoreKey(name, mnemonic string, coinType uint32, signingAlgorithm string) (address string, err error) { diff --git a/relayer/provider/provider.go b/relayer/provider/provider.go index 34cee434d..2bce8c2c4 100644 --- a/relayer/provider/provider.go +++ b/relayer/provider/provider.go @@ -216,6 +216,7 @@ type KeyProvider interface { CreateKeystore(path string) error KeystoreCreated(path string) bool AddKey(name string, coinType uint32, signingAlgorithm string) (output *KeyOutput, err error) + UseKey(key string) error RestoreKey(name, mnemonic string, coinType uint32, signingAlgorithm string) (address string, err error) ShowAddress(name string) (address string, err error) ListAddresses() (map[string]string, error) From 256544cc664641c0635f3bfadf74811bbc57cedd Mon Sep 17 00:00:00 2001 From: vimystic <122659254+vimystic@users.noreply.github.com> Date: Fri, 8 Sep 2023 12:14:21 -0600 Subject: [PATCH 24/37] Update README.md with an update to leverage 'rly key use' in step 5 (#1289) * Update README.md with an update to leverage 'rly key use' in step 5 * change alias from 'a' to 'u' for use subcommand --- README.md | 14 +++++--------- cmd/keys.go | 4 ++-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 86bcd648a..eaeef11d5 100644 --- a/README.md +++ b/README.md @@ -112,18 +112,14 @@ Additional information on how IBC works can be found [here](https://ibc.cosmos.n $ rly keys restore osmosis [key-name] "mnemonic words here" ``` -5. **Edit the relayer's `key` values in the config file to match the `key-name`'s chosen above.** +5. **Use the `key-name` created above.** >This step is necessary if you chose a `key-name` other than "default" - Example: - ```yaml - - type: cosmos - value: - key: YOUR-KEY-NAME-HERE - chain-id: cosmoshub-4 - rpc-addr: http://localhost:26657 - ``` + ```shell + $ rly keys use cosmoshub [key-name] + $ rly keys use osmosis [key-name] + ``` 6. **Ensure the keys associated with the configured chains are funded.** diff --git a/cmd/keys.go b/cmd/keys.go index fb09cf46f..ad853cf05 100644 --- a/cmd/keys.go +++ b/cmd/keys.go @@ -60,8 +60,8 @@ func keysUseCmd(a *appState) *cobra.Command { cmd := &cobra.Command{ Use: "use chain_name key_name", - Aliases: []string{"a"}, - Short: "Use a key from the keychain associated with a particular chain. Look at ~/.relayer/keys/ibc-0/keyring-test ", + Aliases: []string{"u"}, + Short: "Use a key from the keychain associated with a particular chain. Run 'rly keys list ibc-0' to view available keys", Args: withUsage(cobra.ExactArgs(2)), Example: strings.TrimSpace(fmt.Sprintf(` $ %s keys use ibc-0 key_name`, appName)), From 7c773fbce87593d5d4c80052ee2a4cd14c60c4dc Mon Sep 17 00:00:00 2001 From: Reece Williams <31943163+Reecepbcups@users.noreply.github.com> Date: Mon, 11 Sep 2023 13:43:50 -0500 Subject: [PATCH 25/37] Ability to fetch specific chain paths only (#1291) * feat: allow a relayer to fetch a specific chain only * minor: check specific path pair logic earlier --- cmd/paths.go | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/cmd/paths.go b/cmd/paths.go index 640414fa5..f43cd42f4 100644 --- a/cmd/paths.go +++ b/cmd/paths.go @@ -364,14 +364,25 @@ func pathsFetchCmd(a *appState) *cobra.Command { cmd := &cobra.Command{ Use: "fetch", Aliases: []string{"fch"}, - Short: "Fetches the json files necessary to setup the paths for the configured chains", - Args: withUsage(cobra.NoArgs), + Short: "Fetches the json files necessary to setup the paths for the configured chains. Passing a chain name will only fetch paths for that chain", + Args: withUsage(cobra.RangeArgs(0, 1)), Example: strings.TrimSpace(fmt.Sprintf(` $ %s paths fetch --home %s -$ %s pth fch`, appName, defaultHome, appName)), +$ %s pth fch +$ %s pth fch cosmoshub`, appName, defaultHome, appName, appName)), RunE: func(cmd *cobra.Command, args []string) error { overwrite, _ := cmd.Flags().GetBool(flagOverwriteConfig) + // allow the relayer to only pull paths for a specific chain + chainReq := "" + if len(args) > 0 { + chainReq = args[0] + _, exist := a.config.Chains[chainReq] + if !exist { + return fmt.Errorf("chain %s not found in config", chainReq) + } + } + return a.performConfigLockingOperation(cmd.Context(), func() error { chains := []string{} for chainName := range a.config.Chains { @@ -390,6 +401,11 @@ $ %s pth fch`, appName, defaultHome, appName)), if chainB < chainA { pair = chainB + "-" + chainA } + + if chainReq != "" && !strings.Contains(pair, chainReq) { + continue + } + chainCombinations[pair] = true } } From 0c1441c35ead73609f0d9d7823ce843fda43d8a4 Mon Sep 17 00:00:00 2001 From: Jacob Gadikian Date: Wed, 13 Sep 2023 02:16:50 +0800 Subject: [PATCH 26/37] faddat/upgrade go (#1279) * upgrade ci to go 1.21 * upgrade to go1.21 --------- Co-authored-by: Justin Tieri <37750742+jtieri@users.noreply.github.com> --- .github/workflows/build.yml | 6 ++-- .github/workflows/interchaintest.yml | 30 ++++++++--------- .github/workflows/release.yml | 6 ++-- Dockerfile | 10 +++--- go.mod | 2 +- go.sum | 43 ++++++++++++++++++++++++ go.work | 2 +- interchaintest/go.mod | 2 +- interchaintest/go.sum | 49 ++++++++++++++++++++++++++++ local.Dockerfile | 2 +- 10 files changed, 122 insertions(+), 30 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ea896ce8f..916aea8e4 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -12,10 +12,10 @@ jobs: runs-on: ubuntu-latest steps: # Install and setup go - - name: Set up Go 1.20 + - name: Set up Go 1.21 uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' # setup gopath - name: Set PATH @@ -40,4 +40,4 @@ jobs: uses: actions/upload-artifact@v1 with: name: rly - path: ./build/rly \ No newline at end of file + path: ./build/rly diff --git a/.github/workflows/interchaintest.yml b/.github/workflows/interchaintest.yml index b31ab3c1e..f7f9c4d6a 100644 --- a/.github/workflows/interchaintest.yml +++ b/.github/workflows/interchaintest.yml @@ -10,10 +10,10 @@ jobs: events: runs-on: self-hosted steps: - - name: Set up Go 1.20 + - name: Set up Go 1.21 uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: checkout relayer uses: actions/checkout@v2 @@ -31,10 +31,10 @@ jobs: legacy: runs-on: self-hosted steps: - - name: Set up Go 1.20 + - name: Set up Go 1.21 uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: checkout relayer uses: actions/checkout@v2 @@ -52,10 +52,10 @@ jobs: multiple-paths: runs-on: ubuntu-latest steps: - - name: Set up Go 1.20 + - name: Set up Go 1.21 uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: checkout relayer uses: actions/checkout@v2 @@ -73,10 +73,10 @@ jobs: misbehaviour: runs-on: ubuntu-latest steps: - - name: Set up Go 1.20 + - name: Set up Go 1.21 uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: checkout relayer uses: actions/checkout@v2 @@ -94,10 +94,10 @@ jobs: fee-middleware: runs-on: ubuntu-latest steps: - - name: Set up Go 1.20 + - name: Set up Go 1.21 uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: checkout relayer uses: actions/checkout@v2 @@ -115,10 +115,10 @@ jobs: fee-grant: runs-on: ubuntu-latest steps: - - name: Set up Go 1.20 + - name: Set up Go 1.21 uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: checkout relayer uses: actions/checkout@v2 @@ -136,10 +136,10 @@ jobs: scenarios: runs-on: ubuntu-latest steps: - - name: Set up Go 1.20 + - name: Set up Go 1.21 uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - name: checkout relayer uses: actions/checkout@v2 @@ -153,7 +153,7 @@ jobs: - name: interchaintest run: make interchaintest-scenario - + - name: Prune Docker images if: always() #ensure dangling images are pruned after interchain-test scenario passes or fails run: docker image prune -f diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 97ca73ced..e99cc733e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,4 +1,4 @@ -name: "Release" +name: 'Release' on: push: @@ -17,9 +17,9 @@ jobs: - name: Set up Go uses: actions/setup-go@v4 with: - go-version: '1.20' + go-version: '1.21' - - run: echo https://github.com/cosmos/relayer/blob/${GITHUB_REF#refs/tags/}/CHANGELOG.md#${GITHUB_REF#refs/tags/} > ../release_notes.md + - run: echo https://github.com/cosmos/relayer/blob/${GITHUB_REF#refs/tags/}/CHANGELOG.md#${GITHUB_REF#refs/tags/} > ../release_notes.md - name: setup release environment run: |- diff --git a/Dockerfile b/Dockerfile index caa600cbb..3c4d339b0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM --platform=$BUILDPLATFORM golang:1.20-alpine3.16 AS build-env +FROM --platform=$BUILDPLATFORM golang:1.21-alpine3.17 AS build-env RUN apk add --update --no-cache curl make git libc-dev bash gcc linux-headers eudev-dev @@ -6,17 +6,17 @@ ARG TARGETARCH ARG BUILDARCH RUN if [ "${TARGETARCH}" = "arm64" ] && [ "${BUILDARCH}" != "arm64" ]; then \ - wget -c https://musl.cc/aarch64-linux-musl-cross.tgz -O - | tar -xzvv --strip-components 1 -C /usr; \ + wget -c https://musl.cc/aarch64-linux-musl-cross.tgz -O - | tar -xzvv --strip-components 1 -C /usr; \ elif [ "${TARGETARCH}" = "amd64" ] && [ "${BUILDARCH}" != "amd64" ]; then \ - wget -c https://musl.cc/x86_64-linux-musl-cross.tgz -O - | tar -xzvv --strip-components 1 -C /usr; \ + wget -c https://musl.cc/x86_64-linux-musl-cross.tgz -O - | tar -xzvv --strip-components 1 -C /usr; \ fi ADD . . RUN if [ "${TARGETARCH}" = "arm64" ] && [ "${BUILDARCH}" != "arm64" ]; then \ - export CC=aarch64-linux-musl-gcc CXX=aarch64-linux-musl-g++;\ + export CC=aarch64-linux-musl-gcc CXX=aarch64-linux-musl-g++;\ elif [ "${TARGETARCH}" = "amd64" ] && [ "${BUILDARCH}" != "amd64" ]; then \ - export CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++; \ + export CC=x86_64-linux-musl-gcc CXX=x86_64-linux-musl-g++; \ fi; \ GOOS=linux GOARCH=$TARGETARCH CGO_ENABLED=1 LDFLAGS='-linkmode external -extldflags "-static"' make install diff --git a/go.mod b/go.mod index e1d9828f2..da8ff06a6 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,6 @@ module github.com/cosmos/relayer/v2 -go 1.20 +go 1.21 require ( cosmossdk.io/api v0.3.1 diff --git a/go.sum b/go.sum index 4ed2f7f64..0eee861d6 100644 --- a/go.sum +++ b/go.sum @@ -209,6 +209,7 @@ github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/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 v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= @@ -216,16 +217,21 @@ github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1: github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= +github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= +github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -288,6 +294,7 @@ github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -324,6 +331,7 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b8034E= +github.com/cockroachdb/apd/v2 v2.0.2/go.mod h1:DDxRlzC2lo3/vSlmSoS7JkqbbrARPuFOGr0B9pvN3Gw= github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/cockroachdb/errors v1.10.0 h1:lfxS8zZz1+OjtV4MtNWgboi/W5tyLEB6VQZBXN+0VUU= github.com/cockroachdb/errors v1.10.0/go.mod h1:lknhIsEVQ9Ss/qKDBQS/UqFSvPQjOwNq2qyKAxtHRqE= @@ -341,6 +349,7 @@ github.com/cometbft/cometbft-db v0.8.0/go.mod h1:6ASCP4pfhmrCBpfk01/9E1SI29nD3Hf github.com/confio/ics23/go v0.9.0 h1:cWs+wdbS2KRPZezoaaj+qBleXgUk5WOQFMP3CQFGTr4= github.com/confio/ics23/go v0.9.0/go.mod h1:4LPZ2NYqnYIVRklaozjNR1FScgDJ2s5Xrp+e/mYVRak= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -404,7 +413,9 @@ github.com/dgryski/go-farm v0.0.0-20190423205320-6a90982ecee2/go.mod h1:SqUrOPUn github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WAFKLNi6ZS0675eEUC9y3AlwSbQu1Y= github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= @@ -433,9 +444,11 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/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/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= @@ -448,7 +461,9 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -465,13 +480,17 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.1 h1:2lOsA72HgjxAuMlKpFiCbHTvu44PIVkZ5hqm3RSdI/E= +github.com/go-ole/go-ole v1.2.1/go.mod h1:7FAglXiTm7HKlQRDeOQ6ZNUHidzCWXuZWq/1dTyBNF8= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0 h1:5SgMzNM5HxrEjV0ww2lTmX6E2Izsfxas4+YHWRs3Lsk= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= @@ -483,6 +502,7 @@ github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6Wezm github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -568,12 +588,14 @@ github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17 github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -684,6 +706,7 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -703,6 +726,7 @@ github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -719,6 +743,7 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.3.0 h1:z1n1AOHVVydOOVuyphbOKyR4NICDQFiJMn1IK5hVQ5Y= @@ -750,6 +775,7 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -807,6 +833,7 @@ github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mtibben/percent v0.2.1 h1:5gssi8Nqo8QU/r2pynCm+hBQHpkB/uNK7BJCFogWdzs= github.com/mtibben/percent v0.2.1/go.mod h1:KG9uO+SZkUp+VkRHsCdYQV3XSZrrSpR3O9ibNBTZrns= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -828,6 +855,7 @@ github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtb github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= @@ -843,10 +871,14 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2 h1:2zx/Stx4Wc5pIPDvIxHXvXtQFW/7XWJGmnM7r3wg034= +github.com/opencontainers/image-spec v1.1.0-rc2/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w= +github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg= github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= @@ -856,6 +888,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -871,6 +904,7 @@ github.com/petermattis/goid v0.0.0-20230317030725-371a4b8eda08/go.mod h1:pxMtw7c github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -914,6 +948,7 @@ github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -942,12 +977,14 @@ github.com/sasha-s/go-deadlock v0.3.1 h1:sqv7fDNShgjcaxkO0JNcOAlr8B9+cV5Ey/OB71e github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZjwesgfQ1/iLM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.0 h1:trlNQbNUG3OdDrDil03MCb1H2o9nJ1x4/5LYw7byDE0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= @@ -1006,6 +1043,7 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tklauser/go-sysconf v0.3.5 h1:uu3Xl4nkLzQfXNsWn15rPc/HQCJKObbt1dKJeWp3vU4= +github.com/tklauser/go-sysconf v0.3.5/go.mod h1:MkWzOF4RMCshBAMXuhXJs64Rte09mITnppBXY/rYEFI= github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -1017,6 +1055,7 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1057,6 +1096,7 @@ go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.11 h1:wy28qYRKZgnJTxGxvye5/wgWr1EKjmUDGYox5mGlRlI= +go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= @@ -1420,6 +1460,7 @@ golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= +golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1670,6 +1711,7 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -1697,6 +1739,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/go.work b/go.work index b9db675cb..9293d3087 100644 --- a/go.work +++ b/go.work @@ -1,4 +1,4 @@ -go 1.20 +go 1.21 use ( . diff --git a/interchaintest/go.mod b/interchaintest/go.mod index 89c505f98..7952e9d62 100644 --- a/interchaintest/go.mod +++ b/interchaintest/go.mod @@ -1,6 +1,6 @@ module github.com/cosmos/relayer/v2/interchaintest -go 1.20 +go 1.21 require ( cosmossdk.io/simapp v0.0.0-20230224204036-a6adb0821462 diff --git a/interchaintest/go.sum b/interchaintest/go.sum index abdaf4f74..ef668b4a7 100644 --- a/interchaintest/go.sum +++ b/interchaintest/go.sum @@ -211,7 +211,9 @@ github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8 h1:V8krnnfGj4pV65YLUm3C0/8bl7V5Nry2Pwvy3ru/wLc= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20210715213245-6c3934b029d8/go.mod h1:CzsSbkDixRphAF5hS6wbMKq0eI6ccJRb7/A0M6JBnwg= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= +github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.0 h1:Ws8e5YmnrGEHzZEzg0YvK/7COGYtTC5PbaH9oSSbgfA= github.com/BurntSushi/toml v1.3.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= @@ -231,18 +233,23 @@ github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/Microsoft/hcsshim v0.9.4 h1:mnUj0ivWy6UzbB1uLFqKR6F+ZyiDc7j4iGgHTpO+5+I= +github.com/Microsoft/hcsshim v0.9.4/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5 h1:TngWCqHvy9oXAN6lEVMRuU21PR1EtLVZJmdB18Gu3Rw= +github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6 h1:fLjPD/aNc3UIOA6tDi6QXUemppXK3P9BI7mr2hd6gx8= +github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= github.com/StirlingMarketingGroup/go-namecase v1.0.0 h1:2CzaNtCzc4iNHirR+5ru9OzGg8rQp860gqLBFqRI02Y= github.com/StirlingMarketingGroup/go-namecase v1.0.0/go.mod h1:ZsoSKcafcAzuBx+sndbxHu/RjDcDTrEdT4UvhniHfio= github.com/VictoriaMetrics/fastcache v1.6.0 h1:C/3Oi3EiBCqufydp1neRZkqcwmEiuRT9c3fqvvgKm5o= +github.com/VictoriaMetrics/fastcache v1.6.0/go.mod h1:0qHz5QP0GMX4pfmMA/zt5RgfNuXJrTP0zS7DqpHGGTw= github.com/VividCortex/gohistogram v1.0.0 h1:6+hBz+qvs0JOrrNhhmR7lFxo5sINxBCGXrdtl/UvroE= github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/adlio/schema v1.3.3 h1:oBJn8I02PyTB466pZO1UZEn1TV5XLlifBSyMrmHl/1I= +github.com/adlio/schema v1.3.3/go.mod h1:1EsRssiv9/Ce2CMzq5DoL7RiMshhuigQxrR4DMV9fHg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -298,6 +305,7 @@ github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtyd 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= +github.com/btcsuite/btcutil v1.0.3-0.20201208143702-a53e38424cce/go.mod h1:0DVlHczLPewLcPGEIeUEzfOJhqGPQ0mJJRDBtD307+o= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= github.com/btcsuite/goleveldb v1.0.0/go.mod h1:QiK9vBlgftBg6rWQIj6wFzbPfRjiykIEhBH4obrXJ/I= @@ -306,6 +314,7 @@ github.com/btcsuite/snappy-go v1.0.0/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= github.com/bufbuild/protocompile v0.4.0 h1:LbFKd2XowZvQ/kajzguUp2DC9UEIQhIq77fZZlaQsNA= +github.com/bufbuild/protocompile v0.4.0/go.mod h1:3v93+mbWn/v3xzN+31nwkJfrEpAUwp+BagBSZWx+TP8= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= @@ -367,6 +376,7 @@ github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkX github.com/containerd/containerd v1.6.8 h1:h4dOFDwzHmqFEP754PgfgTeVXFnLiRc6kiqC7tplDJs= github.com/containerd/containerd v1.6.8/go.mod h1:By6p5KqPK0/7/CgO/A6t/Gz+CUYUu2zf1hUaaymVXB0= github.com/containerd/continuity v0.3.0 h1:nisirsYROK15TAMVukJOUyGJjz4BNQJBVsNvAXZJ/eg= +github.com/containerd/continuity v0.3.0/go.mod h1:wJEAIwKOm/pBZuBd0JmeTvnLquTB1Ag8espWhkykbPM= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= @@ -476,10 +486,12 @@ github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.2 h1:+nS9g82KMXccJ/wp0zyRW9ZBHFETmMGtkk+2CTTrW4o= github.com/felixge/httpsnoop v1.0.2/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fortytw2/leaktest v1.3.0 h1:u8491cBMTQ8ft8aeV+adlcytMZylmA5nnwwkRZjI8vw= +github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/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/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= @@ -492,7 +504,9 @@ github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.8.1 h1:4+fr/el88TOO3ewCmQr8cx/CtZ/umlIRIs5M4NTNjf8= +github.com/gin-gonic/gin v1.8.1/go.mod h1:ji8BvRH1azfM+SYow9zQ6SZMvR8qOMZHmsCuWR9tTTk= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -509,13 +523,17 @@ github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG github.com/go-logfmt/logfmt v0.6.0 h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4= github.com/go-logfmt/logfmt v0.6.0/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= +github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0 h1:u50s323jtVGugKlcYeyzC0etD1HifMjqmJqb8WugfUU= +github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= github.com/go-playground/universal-translator v0.18.0 h1:82dyy6p4OuJq4/CByFNOn/jYrnRPArHwAcmLoJZxyho= +github.com/go-playground/universal-translator v0.18.0/go.mod h1:UvRDBj+xPUEGrFYl+lu/H90nyDXpg0fqeB/AQUGNTVA= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= github.com/go-playground/validator/v10 v10.11.1 h1:prmOlTVv+YjZjmRmNSF3VmspqJIxJWXmqUsHwfTRRkQ= +github.com/go-playground/validator/v10 v10.11.1/go.mod h1:i+3WkQ1FvaUjjxh1kSvIA4dMGDBiPU55YFDl0WbKdWU= github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-stack/stack v1.8.1 h1:ntEHSVwIt7PNXNpgPmVfMrNhLtgjlmnZha2kOpuRiDw= @@ -528,6 +546,7 @@ github.com/gobwas/pool v0.2.0/go.mod h1:q8bcK0KcYlCgd9e7WYLm9LpyS+YeLd8JVDW6Wezm github.com/gobwas/ws v1.0.2 h1:CoAavW/wd/kulfZmSIBt6p24n4j7tHgNVCjsfHVNUbo= github.com/gobwas/ws v1.0.2/go.mod h1:szmBTxLgaFppYjEmNtny/v3w89xOydFnnZMcgRRu/EM= github.com/goccy/go-json v0.9.11 h1:/pAaQDLHEoCq/5FFmSKBswWmK6H0e8g4159Kc/X/nqk= +github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 h1:ZpnhV/YsD2/4cESfV5+Hoeu/iUR3ruzNvZ+yQfO03a0= github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4= github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= @@ -608,12 +627,14 @@ github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17 github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= +github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/orderedcode v0.0.1 h1:UzfcAexk9Vhv8+9pNOgRu41f16lHq725vPwnSeiG/Us= github.com/google/orderedcode v0.0.1/go.mod h1:iVyU4/qPKHY5h/wSd6rZZCDcLJNxiWO6dvsYES2Sb20= github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= @@ -633,6 +654,7 @@ github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.4 h1:1kZ/sQM3srePvKs3tXAvQzo66XfcReoqFpIpIccE7Oc= github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= @@ -725,6 +747,7 @@ github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/J github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/holiman/bloomfilter/v2 v2.0.3 h1:73e0e/V0tCydx14a0SCYS/EWCxgwLZ18CZcZKVu0fao= +github.com/holiman/bloomfilter/v2 v2.0.3/go.mod h1:zpoh+gs7qcpqrHr3dB55AMiJwo0iURXE7ZOP9L9hSkA= github.com/holiman/uint256 v1.2.0 h1:gpSYcPLWGv4sG43I2mVLiDZCNDh/EpGjSk8tmtxitHM= github.com/holiman/uint256 v1.2.0/go.mod h1:y4ga/t+u+Xwd7CpDgZESaRcWy0I7XMlTMA25ApIH5Jw= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= @@ -748,6 +771,7 @@ github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6M github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jhump/protoreflect v1.15.1 h1:HUMERORf3I3ZdX05WaQ6MIpd/NJ434hTp5YiKgfCL6c= +github.com/jhump/protoreflect v1.15.1/go.mod h1:jD/2GMKKE6OqX8qTjhADU1e6DShO+gavG9e0Q693nKo= github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= @@ -764,6 +788,7 @@ github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/jsternberg/zap-logfmt v1.3.0 h1:z1n1AOHVVydOOVuyphbOKyR4NICDQFiJMn1IK5hVQ5Y= @@ -800,6 +825,7 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII= github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w= +github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY= github.com/lib/pq v1.10.7 h1:p7ZhMD+KsSRozJr34udlUrhboJwWAgCg34+/ZZNvZZw= github.com/lib/pq v1.10.7/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= github.com/libp2p/go-buffer-pool v0.1.0 h1:oK4mSFcQz7cTQIfqbe4MIj9gLW+mnanjyFtc6cdF0Y8= @@ -834,7 +860,9 @@ github.com/mattn/go-pointer v0.0.1/go.mod h1:2zXcozF6qYGgmsG+SeTZz3oAbFLdD3OWqnU github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= +github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= +github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -869,13 +897,16 @@ github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdx github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= +github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/mr-tron/base58 v1.2.0 h1:T/HDJBh4ZCPbU39/+c3rRvE0uKBQlU27+QI8LJ4t64o= github.com/mr-tron/base58 v1.2.0/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= @@ -914,6 +945,7 @@ github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtb github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= +github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= @@ -929,6 +961,7 @@ github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1y github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= +github.com/onsi/gomega v1.20.0/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= @@ -947,6 +980,7 @@ github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJ github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= github.com/ory/dockertest v3.3.5+incompatible h1:iLLK6SQwIhcbrG783Dghaaa3WPzGc+4Emza6EbVUUGA= +github.com/ory/dockertest v3.3.5+incompatible/go.mod h1:1vX4m9wsvi00u5bseYwXaSnhNrne+V0E6LAcBILJdPs= github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY= @@ -966,6 +1000,7 @@ github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi github.com/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -1009,6 +1044,7 @@ github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4O github.com/prometheus/procfs v0.9.0 h1:wzCHvIvM5SxWqYvwgVL7yJY8Lz3PKn49KQtpgMYJfhI= github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= github.com/prometheus/tsdb v0.7.1 h1:YZcsG11NqnK4czYLrWd9mpEuAJIHVQLwdrleYfszMAA= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/rakyll/statik v0.1.7 h1:OF3QCZUuyPxuGEP7B4ypUa7sB/iHtqOTDYZXGM8KOdQ= github.com/rakyll/statik v0.1.7/go.mod h1:AlZONWzMtEnMs7W4e/1LURLiI49pIMmp6V9Unghqrcc= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= @@ -1020,6 +1056,7 @@ github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qq github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.4.3 h1:utMvzDsuh3suAEnhH0RdHmoPbU648o6CvXxTx4SBMOw= +github.com/rivo/uniseg v0.4.3/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= @@ -1042,6 +1079,7 @@ github.com/sasha-s/go-deadlock v0.3.1/go.mod h1:F73l+cr82YSh10GxyRI6qZiCgK64VaZj github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= github.com/seccomp/libseccomp-golang v0.9.2-0.20220502022130-f33da4d89646/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg= github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible h1:Bn1aCHHRnjv4Bl16T8rcaFjYSrGrIZvpiGO6P3Q4GpU= +github.com/shirou/gopsutil v3.21.4-0.20210419000835-c7a38de76ee5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= @@ -1115,7 +1153,9 @@ github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoM github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg= github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw= +github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk= github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= +github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/tyler-smith/go-bip32 v1.0.0 h1:sDR9juArbUgX+bO/iblgZnMPeWY1KZMUC2AFUJdv5KE= @@ -1127,6 +1167,7 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= github.com/ugorji/go/codec v1.2.7 h1:YPXUKf7fYbp/y8xloBqZOw2qaVggbfwMlI8WM3wZUJ0= +github.com/ugorji/go/codec v1.2.7/go.mod h1:WGN1fab3R1fzQlVQTkfxVtIBhWDRqOviHU95kRgeqEY= github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ulikunitz/xz v0.5.11 h1:kpFauv27b6ynzBNT/Xy+1k+fK4WswhN/6PN5WhFAGw8= github.com/ulikunitz/xz v0.5.11/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= @@ -1168,6 +1209,7 @@ go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.10.0 h1:9qC72Qh0+3MqyJbAn8YU5xVq1frD8bn3JtD2oXtafVQ= go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= go.uber.org/goleak v1.1.12 h1:gZAh5/EyT/HQwlpkCy6wTpqfH9H8Lz8zbm3dZh+OyzA= +go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -1477,6 +1519,7 @@ golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxb 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/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= @@ -1791,6 +1834,7 @@ gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20200902074654-038fdea0a05b/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= @@ -1820,6 +1864,7 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1839,7 +1884,9 @@ modernc.org/cc/v3 v3.40.0/go.mod h1:/bTg4dnWkSXowUO6ssQKnOV0yMVxDYNIsIrzqTFDGH0= modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= +modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= +modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= @@ -1853,9 +1900,11 @@ modernc.org/sqlite v1.23.0/go.mod h1:OrDj17Mggn6MhE+iPbBNf7RGKODDE9NFT0f3EwDzJqk modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= modernc.org/tcl v1.15.2 h1:C4ybAYCGJw968e+Me18oW55kD/FexcHbqH2xak1ROSY= +modernc.org/tcl v1.15.2/go.mod h1:3+k/ZaEbKrC8ePv8zJWPtBSW0V7Gg9g8rkmhI1Kfs3c= modernc.org/token v1.0.1 h1:A3qvTqOwexpfZZeyI0FeGPDlSWX5pjZu9hF4lU+EKWg= modernc.org/token v1.0.1/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= modernc.org/z v1.7.3 h1:zDJf6iHjrnB+WRD88stbXokugjyc0/pB91ri1gO6LZY= +modernc.org/z v1.7.3/go.mod h1:Ipv4tsdxZRbQyLq9Q1M6gdbkxYzdlrciF2Hi/lS7nWE= nhooyr.io/websocket v1.8.6 h1:s+C3xAMLwGmlI31Nyn/eAehUlZPwfYZu2JXM621Q5/k= nhooyr.io/websocket v1.8.6/go.mod h1:B70DZP8IakI65RVQ51MsWP/8jndNma26DVA/nFSCgW0= pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= diff --git a/local.Dockerfile b/local.Dockerfile index 42e30e564..6cd45dd2c 100644 --- a/local.Dockerfile +++ b/local.Dockerfile @@ -1,4 +1,4 @@ -FROM golang:1.20-alpine3.16 AS build-env +FROM golang:1-alpine3.17 AS build-env RUN apk add --update --no-cache curl make git libc-dev bash gcc linux-headers eudev-dev From 2aa59be4fbe3fcb796b94b60dc8a3e4c487b671c Mon Sep 17 00:00:00 2001 From: vimystic <122659254+vimystic@users.noreply.github.com> Date: Tue, 12 Sep 2023 16:33:40 -0600 Subject: [PATCH 27/37] Split scenarios test (#1294) * Split scenarios test * use matrix * updates * need to cd into dir first * handle deprication * Remove rouge entry into the matrix * Ensure other parallel tests run to completion even if one of them fail * Add explanation * Remove rougue whitespace --- .github/workflows/interchaintest.yml | 30 +++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/.github/workflows/interchaintest.yml b/.github/workflows/interchaintest.yml index f7f9c4d6a..bf5ad7bba 100644 --- a/.github/workflows/interchaintest.yml +++ b/.github/workflows/interchaintest.yml @@ -133,8 +133,30 @@ jobs: - name: interchaintest run: make interchaintest-fee-grant + prepare-scenario-matrix: + runs-on: ubuntu-latest + outputs: + matrix: ${{ steps.set-matrix.outputs.matrix }} + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Generate matrix + id: set-matrix + run: | + # Run the command and convert its output to a JSON array + TESTS=$(cd interchaintest && go test -list ^TestScenario | grep -v "^ok " | jq -R -s -c 'split("\n")[:-1]') + echo "matrix=${TESTS}" >> $GITHUB_OUTPUT + + # Note : This job will not start until prepare-scenario-matrix completes sucessfully scenarios: + needs: prepare-scenario-matrix runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + test: ${{fromJson(needs.prepare-scenario-matrix.outputs.matrix)}} + steps: - name: Set up Go 1.21 uses: actions/setup-go@v4 @@ -152,8 +174,6 @@ jobs: ${{ runner.os }}-go- - name: interchaintest - run: make interchaintest-scenario - - - name: Prune Docker images - if: always() #ensure dangling images are pruned after interchain-test scenario passes or fails - run: docker image prune -f + run: | + cd interchaintest + go test -run ${{ matrix.test }} From 4d47b669cfa9832dc4b81523e91a19bbe82aba87 Mon Sep 17 00:00:00 2001 From: vimystic <122659254+vimystic@users.noreply.github.com> Date: Tue, 12 Sep 2023 19:06:54 -0600 Subject: [PATCH 28/37] Add verbosity and timeout for scenarios tests (#1295) --- .github/workflows/interchaintest.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/interchaintest.yml b/.github/workflows/interchaintest.yml index bf5ad7bba..58aac8a51 100644 --- a/.github/workflows/interchaintest.yml +++ b/.github/workflows/interchaintest.yml @@ -176,4 +176,5 @@ jobs: - name: interchaintest run: | cd interchaintest - go test -run ${{ matrix.test }} + go test -timeout 30m -race -v -run ${{ matrix.test }} + From 49290ac1cf836898ac33bb3bec1ddbeb3b1b55aa Mon Sep 17 00:00:00 2001 From: vimystic <122659254+vimystic@users.noreply.github.com> Date: Tue, 12 Sep 2023 20:19:09 -0600 Subject: [PATCH 29/37] Add output flag for query sub commands results printed to console. (#1281) * output json for query cmd's balance & clients-expirations * print proper json instead of bytes for headers command * Add output flag . Use legacy,json options * Update according to reviews --- cmd/flags.go | 9 ++++ cmd/query.go | 121 ++++++++++++++++++++++++++++++------------ relayer/query.go | 36 ++++++++++++- relayer/query_test.go | 14 +++++ 4 files changed, 145 insertions(+), 35 deletions(-) diff --git a/cmd/flags.go b/cmd/flags.go index 82bab138a..e5e850b4e 100644 --- a/cmd/flags.go +++ b/cmd/flags.go @@ -54,6 +54,7 @@ const ( flagDstClientID = "dst-client-id" flagSrcConnID = "src-connection-id" flagDstConnID = "dst-connection-id" + flagOutput = "output" ) const ( @@ -381,3 +382,11 @@ func OverwriteConfigFlag(v *viper.Viper, cmd *cobra.Command) *cobra.Command { } return cmd } + +func addOutputFlag(v *viper.Viper, cmd *cobra.Command) *cobra.Command { + cmd.Flags().StringP(flagOutput, "o", "legacy", "Specify the console output format. Can be 'legacy' or 'json'.") + if err := v.BindPFlag(flagOutput, cmd.Flags().Lookup(flagOutput)); err != nil { + panic(err) + } + return cmd +} diff --git a/cmd/query.go b/cmd/query.go index 15ccd743a..2f3c2e3e9 100644 --- a/cmd/query.go +++ b/cmd/query.go @@ -15,6 +15,11 @@ import ( "github.com/spf13/cobra" ) +const ( + formatJson = "json" + formatLegacy = "legacy" +) + // queryCmd represents the chain command func queryCmd(a *appState) *cobra.Command { cmd := &cobra.Command{ @@ -63,7 +68,7 @@ func feegrantQueryCmd(a *appState) *cobra.Command { cmd.AddCommand( feegrantBasicGrantsCmd(a), ) - + cmd = addOutputFlag(a.viper, cmd) return cmd } @@ -99,7 +104,7 @@ $ %s q ibc-denoms ibc-0`, return nil }, } - + cmd = addOutputFlag(a.viper, cmd) return cmd } @@ -127,7 +132,7 @@ $ %s q denom-trace osmosis 9BBA9A1C257E971E38C1422780CE6F0B0686F0A3085E2D61118D9 return nil }, } - + cmd = addOutputFlag(a.viper, cmd) return cmd } @@ -161,7 +166,7 @@ $ %s q tx ibc-0 A5DF8D272F1C451CFF92BA6C41942C4D29B5CF180279439ED6AB038282F956BE return nil }, } - + cmd = addOutputFlag(a.viper, cmd) return cmd } @@ -213,7 +218,9 @@ $ %s q txs ibc-0 "message.action=transfer"`, }, } - return paginationFlags(a.viper, cmd, "txs") + cmd = addOutputFlag(a.viper, cmd) + cmd = paginationFlags(a.viper, cmd, "txs") + return cmd } func queryBalanceCmd(a *appState) *cobra.Command { @@ -257,12 +264,34 @@ $ %s query balance ibc-0 testkey`, return err } - fmt.Fprintf(cmd.OutOrStdout(), "address {%s} balance {%s} \n", addr, coins) + // Create a map to hold the data + data := map[string]string{ + "address": addr, + "balance": coins.String(), + } + + // Convert the map to a JSON string + jsonOutput, err := json.Marshal(data) + if err != nil { + return err + } + + output, _ := cmd.Flags().GetString(flagOutput) + switch output { + case formatJson: + fmt.Fprint(cmd.OutOrStdout(), string(jsonOutput)) + case formatLegacy: + fallthrough + default: + fmt.Fprintf(cmd.OutOrStdout(), "address {%s} balance {%s} \n", addr, coins) + } return nil }, } - return ibcDenomFlags(a.viper, cmd) + cmd = addOutputFlag(a.viper, cmd) + cmd = ibcDenomFlags(a.viper, cmd) + return cmd } func queryHeaderCmd(a *appState) *cobra.Command { @@ -309,11 +338,21 @@ $ %s query header ibc-0 1400`, return err } - fmt.Fprintln(cmd.OutOrStdout(), s) + output, _ := cmd.Flags().GetString(flagOutput) + switch output { + case formatJson: + fmt.Fprintln(cmd.OutOrStdout(), string(s)) + case formatLegacy: + fallthrough + default: + fmt.Fprintln(cmd.OutOrStdout(), s) + } + return nil }, } + cmd = addOutputFlag(a.viper, cmd) return cmd } @@ -355,7 +394,7 @@ $ %s q node-state ibc-1`, return nil }, } - + cmd = addOutputFlag(a.viper, cmd) return cmd } @@ -406,8 +445,9 @@ $ %s query client ibc-0 ibczeroclient --height 1205`, return nil }, } - - return heightFlag(a.viper, cmd) + cmd = addOutputFlag(a.viper, cmd) + cmd = heightFlag(a.viper, cmd) + return cmd } func queryClientsCmd(a *appState) *cobra.Command { @@ -451,8 +491,9 @@ $ %s query clients ibc-2 --offset 2 --limit 30`, return nil }, } - - return paginationFlags(a.viper, cmd, "client states") + cmd = addOutputFlag(a.viper, cmd) + cmd = paginationFlags(a.viper, cmd, "client states") + return cmd } func queryConnections(a *appState) *cobra.Command { @@ -498,7 +539,9 @@ $ %s q conns ibc-1`, }, } - return paginationFlags(a.viper, cmd, "connections on a network") + cmd = addOutputFlag(a.viper, cmd) + cmd = paginationFlags(a.viper, cmd, "connections on a network") + return cmd } func queryConnectionsUsingClient(a *appState) *cobra.Command { @@ -551,7 +594,9 @@ $ %s query client-connections ibc-0 ibczeroclient --height 1205`, }, } - return heightFlag(a.viper, cmd) + cmd = addOutputFlag(a.viper, cmd) + cmd = heightFlag(a.viper, cmd) + return cmd } func queryConnection(a *appState) *cobra.Command { @@ -595,7 +640,7 @@ $ %s q conn ibc-1 ibconeconn`, return nil }, } - + cmd = addOutputFlag(a.viper, cmd) return cmd } @@ -644,7 +689,9 @@ $ %s query connection-channels ibc-2 ibcconnection2 --offset 2 --limit 30`, }, } - return paginationFlags(a.viper, cmd, "channels associated with a connection") + cmd = addOutputFlag(a.viper, cmd) + cmd = paginationFlags(a.viper, cmd, "channels associated with a connection") + return cmd } func queryChannel(a *appState) *cobra.Command { @@ -697,7 +744,9 @@ $ %s query channel ibc-2 ibctwochannel transfer --height 1205`, }, } - return heightFlag(a.viper, cmd) + cmd = addOutputFlag(a.viper, cmd) + cmd = heightFlag(a.viper, cmd) + return cmd } // chanExtendedInfo is an intermediate type for holding additional useful @@ -917,7 +966,9 @@ $ %s query channels ibc-0 ibc-2`, }, } - return paginationFlags(a.viper, cmd, "channels on a network") + cmd = addOutputFlag(a.viper, cmd) + cmd = paginationFlags(a.viper, cmd, "channels on a network") + return cmd } func queryPacketCommitment(a *appState) *cobra.Command { @@ -959,7 +1010,7 @@ $ %s q packet-commit ibc-1 ibconechannel transfer 31`, return nil }, } - + cmd = addOutputFlag(a.viper, cmd) return cmd } @@ -1012,7 +1063,7 @@ $ %s query unrelayed-pkts demo-path channel-0`, return nil }, } - + cmd = addOutputFlag(a.viper, cmd) return cmd } @@ -1064,7 +1115,7 @@ $ %s query unrelayed-acks demo-path channel-0`, return nil }, } - + cmd = addOutputFlag(a.viper, cmd) return cmd } @@ -1105,24 +1156,26 @@ $ %s query clients-expiration demo-path`, return errDst } - // if only the src light client is found, just print info for source light client - if errSrc == nil && errDst != nil { - fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[src], srcExpiration, srcClientInfo)) - return nil - } + output, _ := cmd.Flags().GetString(flagOutput) - // if only the dst light client is found, just print info for destination light client - if errDst == nil && errSrc != nil { - fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[dst], dstExpiration, dstClientInfo)) - return nil + srcClientExpiration := relayer.SPrintClientExpiration(c[src], srcExpiration, srcClientInfo) + dstClientExpiration := relayer.SPrintClientExpiration(c[dst], dstExpiration, dstClientInfo) + + if output == formatJson { + srcClientExpiration = relayer.SPrintClientExpirationJson(c[src], srcExpiration, srcClientInfo) + dstClientExpiration = relayer.SPrintClientExpirationJson(c[dst], dstExpiration, dstClientInfo) } - fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[src], srcExpiration, srcClientInfo)) - fmt.Fprintln(cmd.OutOrStdout(), relayer.SPrintClientExpiration(c[dst], dstExpiration, dstClientInfo)) + if errSrc == nil { + fmt.Fprintln(cmd.OutOrStdout(), srcClientExpiration) + } + if errDst == nil { + fmt.Fprintln(cmd.OutOrStdout(), dstClientExpiration) + } return nil }, } - + cmd = addOutputFlag(a.viper, cmd) return cmd } diff --git a/relayer/query.go b/relayer/query.go index 08b2ec1b0..fa59dba14 100644 --- a/relayer/query.go +++ b/relayer/query.go @@ -2,7 +2,9 @@ package relayer import ( "context" + "encoding/json" "fmt" + "strconv" "strings" "time" @@ -308,7 +310,7 @@ func SPrintClientExpiration(chain *Chain, expiration time.Time, clientInfo Clien status = "GOOD" } - return fmt.Sprintf(` + legacyOutput := fmt.Sprintf(` client: %s (%s) HEALTH: %s TIME: %s (%s) @@ -316,4 +318,36 @@ func SPrintClientExpiration(chain *Chain, expiration time.Time, clientInfo Clien TRUSTING PERIOD: %s `, chain.ClientID(), chain.ChainID(), status, expirationFormatted, remainingTime.Round(time.Second), clientInfo.LatestHeight.GetRevisionHeight(), clientInfo.TrustingPeriod.String()) + + return legacyOutput + +} + +// Returns clientExpiration data in JSON format. +func SPrintClientExpirationJson(chain *Chain, expiration time.Time, clientInfo ClientStateInfo) string { + now := time.Now() + remainingTime := expiration.Sub(now) + expirationFormatted := expiration.Format(time.RFC822) + + var status string + if remainingTime <= 0 { + status = "EXPIRED" + } else { + status = "GOOD" + } + + data := map[string]string{ + "client": fmt.Sprintf("%s (%s)", chain.ClientID(), chain.ChainID()), + "HEALTH": status, + "TIME": fmt.Sprintf("%s (%s)", expirationFormatted, remainingTime.Round(time.Second)), + "LAST UPDATE HEIGHT": strconv.FormatUint(clientInfo.LatestHeight.GetRevisionHeight(), 10), + "TRUSTING PERIOD": clientInfo.TrustingPeriod.String(), + } + + jsonOutput, err := json.Marshal(data) + if err != nil { + jsonOutput = []byte{} + } + + return string(jsonOutput) } diff --git a/relayer/query_test.go b/relayer/query_test.go index 39dc837b7..ea7e4b71d 100644 --- a/relayer/query_test.go +++ b/relayer/query_test.go @@ -31,8 +31,10 @@ func TestSPrintClientExpiration_PrintClientId(t *testing.T) { chain := mockChain("test-chain-id", "expected-client-id") clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) + expirationJson := SPrintClientExpirationJson(chain, previousTime, *clientStateInfo) require.Contains(t, expiration, "expected-client-id") + require.Contains(t, expirationJson, "expected-client-id") } func TestSPrintClientExpiration_PrintExpired_WhenTimeIsInPast(t *testing.T) { @@ -43,8 +45,10 @@ func TestSPrintClientExpiration_PrintExpired_WhenTimeIsInPast(t *testing.T) { chain := mockChain("test-chain-id", "test-client-id") clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) + expirationJson := SPrintClientExpirationJson(chain, previousTime, *clientStateInfo) require.Contains(t, expiration, "EXPIRED") + require.Contains(t, expirationJson, "EXPIRED") } func TestSPrintClientExpiration_PrintRFC822FormattedTime_WhenTimeIsInPast(t *testing.T) { @@ -55,8 +59,10 @@ func TestSPrintClientExpiration_PrintRFC822FormattedTime_WhenTimeIsInPast(t *tes chain := mockChain("expected-chain-id", "test-client-id") clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) expiration := SPrintClientExpiration(chain, pastTime, *clientStateInfo) + expirationJson := SPrintClientExpirationJson(chain, pastTime, *clientStateInfo) require.Contains(t, expiration, pastTime.Format(time.RFC822)) + require.Contains(t, expirationJson, pastTime.Format(time.RFC822)) } func TestSPrintClientExpiration_PrintGood_WhenTimeIsInFuture(t *testing.T) { @@ -67,8 +73,10 @@ func TestSPrintClientExpiration_PrintGood_WhenTimeIsInFuture(t *testing.T) { chain := mockChain("test-chain-id", "test-client-id") clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) + expirationJson := SPrintClientExpirationJson(chain, previousTime, *clientStateInfo) require.Contains(t, expiration, "GOOD") + require.Contains(t, expirationJson, "GOOD") } func TestSPrintClientExpiration_PrintRFC822FormattedTime_WhenTimeIsInFuture(t *testing.T) { @@ -79,8 +87,10 @@ func TestSPrintClientExpiration_PrintRFC822FormattedTime_WhenTimeIsInFuture(t *t chain := mockChain("test-chain-id", "test-client-id") clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) expiration := SPrintClientExpiration(chain, futureTime, *clientStateInfo) + expirationJson := SPrintClientExpirationJson(chain, futureTime, *clientStateInfo) require.Contains(t, expiration, futureTime.Format(time.RFC822)) + require.Contains(t, expirationJson, futureTime.Format(time.RFC822)) } func TestSPrintClientExpiration_PrintRemainingTime_WhenTimeIsInFuture(t *testing.T) { @@ -91,8 +101,10 @@ func TestSPrintClientExpiration_PrintRemainingTime_WhenTimeIsInFuture(t *testing chain := mockChain("test-chain-id", "test-client-id") clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) expiration := SPrintClientExpiration(chain, futureTime, *clientStateInfo) + expirationJson := SPrintClientExpirationJson(chain, futureTime, *clientStateInfo) require.Contains(t, expiration, "10h0m0s") + require.Contains(t, expirationJson, "10h0m0s") } func TestSPrintClientExpiration_TrustingPeriod(t *testing.T) { @@ -103,8 +115,10 @@ func TestSPrintClientExpiration_TrustingPeriod(t *testing.T) { chain := mockChain("expected-chain-id", "test-client-id") clientStateInfo := mockClientStateInfo("test-chain-id", trustingPeriod, mockHeight) expiration := SPrintClientExpiration(chain, previousTime, *clientStateInfo) + expirationJson := SPrintClientExpirationJson(chain, previousTime, *clientStateInfo) require.Contains(t, expiration, "1h0m0s") + require.Contains(t, expirationJson, "1h0m0s") } func TestSPrintClientExpiration_LastUpdateHeight(t *testing.T) { From cf88c213a58fa30279829114353f9ed9311c90f2 Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Wed, 13 Sep 2023 09:52:07 -0700 Subject: [PATCH 30/37] Add ability to fetch testnet chains and paths + force-add ability (#1285) * add testnet and force-add * update cmd examples * improve usage description --- cmd/chains.go | 12 ++++----- cmd/errors.go | 3 ++- cmd/flags.go | 38 +++++++++++++++++++++++++++-- cmd/paths.go | 19 +++++++++++---- cregistry/chain_info.go | 24 ++++++++++++------ cregistry/chain_registry.go | 2 +- cregistry/cosmos_github_registry.go | 9 +++++-- 7 files changed, 83 insertions(+), 24 deletions(-) diff --git a/cmd/chains.go b/cmd/chains.go index 7e471ae00..aa66ed235 100644 --- a/cmd/chains.go +++ b/cmd/chains.go @@ -291,12 +291,12 @@ func chainsAddCmd(a *appState) *cobra.Command { " the chain-registry or passing a file (-f) or url (-u)", Args: withUsage(cobra.MinimumNArgs(0)), Example: fmt.Sprintf(` $ %s chains add cosmoshub - $ %s chains add testnets/cosmoshubtestnet $ %s chains add cosmoshub osmosis + $ %s chains add cosmoshubtestnet --testnet $ %s chains add --file chains/ibc0.json ibc0 $ %s chains add --url https://relayer.com/ibc0.json ibc0`, appName, appName, appName, appName, appName), RunE: func(cmd *cobra.Command, args []string) error { - file, url, err := getAddInputs(cmd) + file, url, forceAdd, testnet, err := getAddInputs(cmd) if err != nil { return err } @@ -330,7 +330,7 @@ func chainsAddCmd(a *appState) *cobra.Command { return err } default: - if err := addChainsFromRegistry(cmd.Context(), a, args); err != nil { + if err := addChainsFromRegistry(cmd.Context(), a, forceAdd, testnet, args); err != nil { return err } } @@ -435,7 +435,7 @@ func addChainFromURL(a *appState, chainName string, rawurl string) error { return nil } -func addChainsFromRegistry(ctx context.Context, a *appState, chains []string) error { +func addChainsFromRegistry(ctx context.Context, a *appState, forceAdd, testnet bool, chains []string) error { chainRegistry := cregistry.DefaultChainRegistry(a.log) var existed, failed, added []string @@ -451,7 +451,7 @@ func addChainsFromRegistry(ctx context.Context, a *appState, chains []string) er continue } - chainInfo, err := chainRegistry.GetChain(ctx, chain) + chainInfo, err := chainRegistry.GetChain(ctx, testnet, chain) if err != nil { a.log.Warn( "Error retrieving chain", @@ -462,7 +462,7 @@ func addChainsFromRegistry(ctx context.Context, a *appState, chains []string) er continue } - chainConfig, err := chainInfo.GetChainConfig(ctx, chain) + chainConfig, err := chainInfo.GetChainConfig(ctx, forceAdd, testnet, chain) if err != nil { a.log.Warn( "Error generating chain config", diff --git a/cmd/errors.go b/cmd/errors.go index 31f5ee086..d7a94dee8 100644 --- a/cmd/errors.go +++ b/cmd/errors.go @@ -18,5 +18,6 @@ func errChainNotFound(chainName string) error { } var ( - errMultipleAddFlags = errors.New("expected either --file/-f OR --url/u, found multiple") + errMultipleAddFlags = errors.New("expected either --file/-f OR --url/u, found multiple") + errInvalidTestnetFlag = errors.New("cannot use --testnet with --file/-f OR --url/u, must be used alone") ) diff --git a/cmd/flags.go b/cmd/flags.go index e5e850b4e..8d605319b 100644 --- a/cmd/flags.go +++ b/cmd/flags.go @@ -18,7 +18,9 @@ const ( flagJSON = "json" flagYAML = "yaml" flagFile = "file" + flagForceAdd = "force-add" flagPath = "path" + flagTestnet = "testnet" flagMaxTxSize = "max-tx-size" flagMaxMsgLength = "max-msgs" flagIBCDenoms = "ibc-denoms" @@ -125,6 +127,8 @@ func skipConfirm(v *viper.Viper, cmd *cobra.Command) *cobra.Command { func chainsAddFlags(v *viper.Viper, cmd *cobra.Command) *cobra.Command { fileFlag(v, cmd) urlFlag(v, cmd) + forceAddFlag(v, cmd) + testnetFlag(v, cmd) return cmd } @@ -164,6 +168,22 @@ func fileFlag(v *viper.Viper, cmd *cobra.Command) *cobra.Command { return cmd } +func testnetFlag(v *viper.Viper, cmd *cobra.Command) *cobra.Command { + cmd.Flags().Bool(flagTestnet, false, "fetches testnet data from the chain registry") + if err := v.BindPFlag(flagTestnet, cmd.Flags().Lookup(flagTestnet)); err != nil { + panic(err) + } + return cmd +} + +func forceAddFlag(v *viper.Viper, cmd *cobra.Command) *cobra.Command { + cmd.Flags().Bool(flagForceAdd, false, "adds chain data even if there are no working RPC's in the chain registry") + if err := v.BindPFlag(flagForceAdd, cmd.Flags().Lookup(flagForceAdd)); err != nil { + panic(err) + } + return cmd +} + func pathFilterFlags(v *viper.Viper, cmd *cobra.Command) *cobra.Command { flags := cmd.Flags() flags.String(flagFilterRule, blankValue, `filter rule ("allowlist", "denylist", or "" for no filtering)`) @@ -238,7 +258,7 @@ func strategyFlag(v *viper.Viper, cmd *cobra.Command) *cobra.Command { return cmd } -func getAddInputs(cmd *cobra.Command) (file string, url string, err error) { +func getAddInputs(cmd *cobra.Command) (file string, url string, forceAdd bool, testNet bool, err error) { file, err = cmd.Flags().GetString(flagFile) if err != nil { return @@ -249,8 +269,22 @@ func getAddInputs(cmd *cobra.Command) (file string, url string, err error) { return } + forceAdd, err = cmd.Flags().GetBool(flagForceAdd) + if err != nil { + return + } + + testNet, err = cmd.Flags().GetBool(flagTestnet) + if err != nil { + return + } + if file != "" && url != "" { - return "", "", errMultipleAddFlags + return "", "", false, false, errMultipleAddFlags + } + + if file != "" && testNet || url != "" && testNet { + return "", "", false, false, errInvalidTestnetFlag } return diff --git a/cmd/paths.go b/cmd/paths.go index f43cd42f4..b5583fb69 100644 --- a/cmd/paths.go +++ b/cmd/paths.go @@ -368,10 +368,11 @@ func pathsFetchCmd(a *appState) *cobra.Command { Args: withUsage(cobra.RangeArgs(0, 1)), Example: strings.TrimSpace(fmt.Sprintf(` $ %s paths fetch --home %s -$ %s pth fch -$ %s pth fch cosmoshub`, appName, defaultHome, appName, appName)), +$ %s paths fetch --testnet +$ %s pth fch`, appName, defaultHome, appName, appName)), RunE: func(cmd *cobra.Command, args []string) error { overwrite, _ := cmd.Flags().GetBool(flagOverwriteConfig) + testnet, _ := cmd.Flags().GetBool(flagTestnet) // allow the relayer to only pull paths for a specific chain chainReq := "" @@ -418,9 +419,15 @@ $ %s pth fch cosmoshub`, appName, defaultHome, appName, appName)), continue } - // TODO: Don't use github api. Potentially use: https://github.com/eco-stake/cosmos-directory once they integrate IBC data into restAPI. This will avoid rate limits. + // TODO: Don't use github api. Potentially use http.get like GetChain() does to avoid rate limits fileName := pthName + ".json" - regPath := path.Join("_IBC", fileName) + var regPath string + if testnet { + regPath = path.Join("testnets", "_IBC", fileName) + } else { + regPath = path.Join("_IBC", fileName) + + } client, _, err := client.Repositories.DownloadContents(cmd.Context(), "cosmos", "chain-registry", regPath, nil) if err != nil { if errors.As(err, new(*github.RateLimitError)) { @@ -471,5 +478,7 @@ $ %s pth fch cosmoshub`, appName, defaultHome, appName, appName)), }) }, } - return OverwriteConfigFlag(a.viper, cmd) + OverwriteConfigFlag(a.viper, cmd) + testnetFlag(a.viper, cmd) + return cmd } diff --git a/cregistry/chain_info.go b/cregistry/chain_info.go index 7309296e2..0bb66e3d3 100644 --- a/cregistry/chain_info.go +++ b/cregistry/chain_info.go @@ -186,14 +186,18 @@ func (c ChainInfo) GetRPCEndpoints(ctx context.Context) (out []string, err error } // GetRandomRPCEndpoint returns a string representing a random RPC endpoint from the cosmos chain registry for this chain. -func (c ChainInfo) GetRandomRPCEndpoint(ctx context.Context) (string, error) { +func (c ChainInfo) GetRandomRPCEndpoint(ctx context.Context, forceAdd bool) (string, error) { rpcs, err := c.GetRPCEndpoints(ctx) if err != nil { return "", err } if len(rpcs) == 0 { - return "", fmt.Errorf("no working RPCs found") + if !forceAdd { + return "", fmt.Errorf("no working RPCs found, consider using --force-add") + } else { + return "", nil + } } randomGenerator := rand.New(rand.NewSource(time.Now().UnixNano())) @@ -206,9 +210,15 @@ func (c ChainInfo) GetRandomRPCEndpoint(ctx context.Context) (string, error) { } // GetAssetList returns the asset metadata from the cosmos chain registry for this particular chain. -func (c ChainInfo) GetAssetList(ctx context.Context, name string) (AssetList, error) { - chainRegURL := fmt.Sprintf("https://raw.githubusercontent.com/cosmos/chain-registry/master/%s/assetlist.json", name) +func (c ChainInfo) GetAssetList(ctx context.Context, testnet bool, name string) (AssetList, error) { + var chainRegURL string + if testnet { + chainRegURL = fmt.Sprintf("https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/%s/assetlist.json", name) + } else { + chainRegURL = fmt.Sprintf("https://raw.githubusercontent.com/cosmos/chain-registry/master/%s/assetlist.json", name) + + } res, err := http.Get(chainRegURL) if err != nil { return AssetList{}, err @@ -236,11 +246,11 @@ func (c ChainInfo) GetAssetList(ctx context.Context, name string) (AssetList, er // GetChainConfig returns a CosmosProviderConfig composed from the details found in the cosmos chain registry for // this particular chain. -func (c ChainInfo) GetChainConfig(ctx context.Context, name string) (*cosmos.CosmosProviderConfig, error) { +func (c ChainInfo) GetChainConfig(ctx context.Context, forceAdd, testnet bool, name string) (*cosmos.CosmosProviderConfig, error) { debug := viper.GetBool("debug") home := viper.GetString("home") - assetList, err := c.GetAssetList(ctx, name) + assetList, err := c.GetAssetList(ctx, testnet, name) if err != nil { return nil, err } @@ -250,7 +260,7 @@ func (c ChainInfo) GetChainConfig(ctx context.Context, name string) (*cosmos.Cos gasPrices = fmt.Sprintf("%.2f%s", 0.01, assetList.Assets[0].Base) } - rpc, err := c.GetRandomRPCEndpoint(ctx) + rpc, err := c.GetRandomRPCEndpoint(ctx, forceAdd) if err != nil { return nil, err } diff --git a/cregistry/chain_registry.go b/cregistry/chain_registry.go index e087a9354..63fe95882 100644 --- a/cregistry/chain_registry.go +++ b/cregistry/chain_registry.go @@ -8,7 +8,7 @@ import ( // ChainRegistry is a slim interface that can be implemented to interact with a repository of chain info/metadata. type ChainRegistry interface { - GetChain(ctx context.Context, name string) (ChainInfo, error) + GetChain(ctx context.Context, testnet bool, name string) (ChainInfo, error) ListChains(ctx context.Context) ([]string, error) SourceLink() string } diff --git a/cregistry/cosmos_github_registry.go b/cregistry/cosmos_github_registry.go index 8970b90ff..7f99ac396 100644 --- a/cregistry/cosmos_github_registry.go +++ b/cregistry/cosmos_github_registry.go @@ -52,8 +52,13 @@ func (c CosmosGithubRegistry) ListChains(ctx context.Context) ([]string, error) } // GetChain attempts to fetch ChainInfo for the specified chain name from the cosmos chain registry. -func (c CosmosGithubRegistry) GetChain(ctx context.Context, name string) (ChainInfo, error) { - chainRegURL := fmt.Sprintf("https://raw.githubusercontent.com/cosmos/chain-registry/master/%s/chain.json", name) +func (c CosmosGithubRegistry) GetChain(ctx context.Context, testnet bool, name string) (ChainInfo, error) { + var chainRegURL string + if testnet { + chainRegURL = fmt.Sprintf("https://raw.githubusercontent.com/cosmos/chain-registry/master/testnets/%s/chain.json", name) + } else { + chainRegURL = fmt.Sprintf("https://raw.githubusercontent.com/cosmos/chain-registry/master/%s/chain.json", name) + } res, err := http.Get(chainRegURL) if err != nil { From 2aca133d9e81ad048a486700acc16cc4247c75a4 Mon Sep 17 00:00:00 2001 From: Dan Kanefsky <56059752+boojamya@users.noreply.github.com> Date: Wed, 13 Sep 2023 12:15:07 -0700 Subject: [PATCH 31/37] update interchaintest workflow (#1298) --- .github/workflows/interchaintest.yml | 61 ++++++++++++++++------------ 1 file changed, 36 insertions(+), 25 deletions(-) diff --git a/.github/workflows/interchaintest.yml b/.github/workflows/interchaintest.yml index 58aac8a51..158329a66 100644 --- a/.github/workflows/interchaintest.yml +++ b/.github/workflows/interchaintest.yml @@ -2,9 +2,6 @@ name: TESTING - interchaintest on: pull_request: - push: - branches: - - master jobs: events: @@ -16,11 +13,13 @@ jobs: go-version: '1.21' - name: checkout relayer - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/cache@v1 + - uses: actions/cache@v3 with: - path: ~/go/pkg/mod + path: | + ~/.cache/go-build + ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- @@ -37,11 +36,13 @@ jobs: go-version: '1.21' - name: checkout relayer - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/cache@v1 + - uses: actions/cache@v3 with: - path: ~/go/pkg/mod + path: | + ~/.cache/go-build + ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- @@ -58,11 +59,13 @@ jobs: go-version: '1.21' - name: checkout relayer - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/cache@v1 + - uses: actions/cache@v3 with: - path: ~/go/pkg/mod + path: | + ~/.cache/go-build + ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- @@ -79,11 +82,13 @@ jobs: go-version: '1.21' - name: checkout relayer - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/cache@v1 + - uses: actions/cache@v3 with: - path: ~/go/pkg/mod + path: | + ~/.cache/go-build + ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- @@ -100,11 +105,13 @@ jobs: go-version: '1.21' - name: checkout relayer - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/cache@v1 + - uses: actions/cache@v3 with: - path: ~/go/pkg/mod + path: | + ~/.cache/go-build + ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- @@ -121,11 +128,13 @@ jobs: go-version: '1.21' - name: checkout relayer - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/cache@v1 + - uses: actions/cache@v3 with: - path: ~/go/pkg/mod + path: | + ~/.cache/go-build + ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- @@ -139,7 +148,7 @@ jobs: matrix: ${{ steps.set-matrix.outputs.matrix }} steps: - name: Checkout code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Generate matrix id: set-matrix @@ -164,11 +173,13 @@ jobs: go-version: '1.21' - name: checkout relayer - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - uses: actions/cache@v1 + - uses: actions/cache@v3 with: - path: ~/go/pkg/mod + path: | + ~/.cache/go-build + ~/go/pkg/mod key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} restore-keys: | ${{ runner.os }}-go- From 259b1278264180a2aefc2085f1b55753849c4815 Mon Sep 17 00:00:00 2001 From: vimystic <122659254+vimystic@users.noreply.github.com> Date: Wed, 13 Sep 2023 13:38:36 -0600 Subject: [PATCH 32/37] Query param prop directly (#1264) * Query param prop directly * Flip order of queries for QueryUnbondingPeriod * Add fallback for chains using cosmos-sdk 47+ * Trusting period logic remains same * Add Fallback * Consolidate functions into a single queryParamsSubspaceTime --- .../tendermint_v0.37_boundary_test.go | 1 + relayer/chains/cosmos/provider.go | 14 +---- relayer/chains/cosmos/query.go | 51 +++++++++++-------- 3 files changed, 32 insertions(+), 34 deletions(-) diff --git a/interchaintest/tendermint_v0.37_boundary_test.go b/interchaintest/tendermint_v0.37_boundary_test.go index 04a7a8c47..e25790176 100644 --- a/interchaintest/tendermint_v0.37_boundary_test.go +++ b/interchaintest/tendermint_v0.37_boundary_test.go @@ -54,6 +54,7 @@ func TestScenarioTendermint37Boundary(t *testing.T) { rf := relayerinterchaintest.NewRelayerFactory(relayerinterchaintest.RelayerConfig{ InitialBlockHistory: 50, }) + r := rf.Build(t, client, network) t.Parallel() diff --git a/relayer/chains/cosmos/provider.go b/relayer/chains/cosmos/provider.go index c33743faf..3c7ff47fc 100644 --- a/relayer/chains/cosmos/provider.go +++ b/relayer/chains/cosmos/provider.go @@ -226,21 +226,11 @@ func (cc *CosmosProvider) AccountFromKeyOrAddress(keyOrAddress string) (out sdk. } func (cc *CosmosProvider) TrustingPeriod(ctx context.Context) (time.Duration, error) { - res, err := cc.QueryStakingParams(ctx) - var unbondingTime time.Duration + unbondingTime, err := cc.QueryUnbondingPeriod(ctx) if err != nil { - // Attempt ICS query - consumerUnbondingPeriod, consumerErr := cc.queryConsumerUnbondingPeriod(ctx) - if consumerErr != nil { - return 0, - fmt.Errorf("failed to query unbonding period as both standard and consumer chain: %s: %w", err.Error(), consumerErr) - } - unbondingTime = consumerUnbondingPeriod - } else { - unbondingTime = res.UnbondingTime + return 0, err } - // We want the trusting period to be 85% of the unbonding time. // Go mentions that the time.Duration type can track approximately 290 years. // We don't want to lose precision if the duration is a very long duration diff --git a/relayer/chains/cosmos/query.go b/relayer/chains/cosmos/query.go index dfc040214..d41f25bdc 100644 --- a/relayer/chains/cosmos/query.go +++ b/relayer/chains/cosmos/query.go @@ -18,7 +18,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" grpctypes "github.com/cosmos/cosmos-sdk/types/grpc" - "github.com/cosmos/cosmos-sdk/types/query" querytypes "github.com/cosmos/cosmos-sdk/types/query" bankTypes "github.com/cosmos/cosmos-sdk/x/bank/types" "github.com/cosmos/cosmos-sdk/x/feegrant" @@ -189,7 +188,7 @@ func parseEventsFromResponseDeliverTx(resp abci.ResponseDeliverTx) []provider.Re // QueryFeegrantsByGrantee returns all requested grants for the given grantee. // Default behavior will return all grants. -func (cc *CosmosProvider) QueryFeegrantsByGrantee(address string, paginator *query.PageRequest) ([]*feegrant.Grant, error) { +func (cc *CosmosProvider) QueryFeegrantsByGrantee(address string, paginator *querytypes.PageRequest) ([]*feegrant.Grant, error) { grants := []*feegrant.Grant{} allPages := paginator == nil @@ -228,7 +227,7 @@ func (cc *CosmosProvider) QueryFeegrantsByGrantee(address string, paginator *que // Feegrant_GrantsByGranterRPC returns all requested grants for the given Granter. // Default behavior will return all grants. -func (cc *CosmosProvider) QueryFeegrantsByGranter(address string, paginator *query.PageRequest) ([]*feegrant.Grant, error) { +func (cc *CosmosProvider) QueryFeegrantsByGranter(address string, paginator *querytypes.PageRequest) ([]*feegrant.Grant, error) { grants := []*feegrant.Grant{} allPages := paginator == nil @@ -311,47 +310,55 @@ func (cc *CosmosProvider) QueryBalanceWithAddress(ctx context.Context, address s return coins, nil } -func (cc *CosmosProvider) queryConsumerUnbondingPeriod(ctx context.Context) (time.Duration, error) { +func (cc *CosmosProvider) queryParamsSubspaceTime(ctx context.Context, subspace string, key string) (time.Duration, error) { queryClient := proposal.NewQueryClient(cc) - params := proposal.QueryParamsRequest{Subspace: "ccvconsumer", Key: "UnbondingPeriod"} + params := proposal.QueryParamsRequest{Subspace: subspace, Key: key} - resICS, err := queryClient.Params(ctx, ¶ms) + res, err := queryClient.Params(ctx, ¶ms) if err != nil { - return 0, fmt.Errorf("failed to make ccvconsumer params request: %w", err) + return 0, fmt.Errorf("failed to make %s params request: %w", subspace, err) } - if resICS.Param.Value == "" { - return 0, fmt.Errorf("ccvconsumer unbonding period is empty") + if res.Param.Value == "" { + return 0, fmt.Errorf("%s %s is empty", subspace, key) } - unbondingPeriod, err := strconv.ParseUint(strings.ReplaceAll(resICS.Param.Value, `"`, ""), 10, 64) + unbondingValue, err := strconv.ParseUint(strings.ReplaceAll(res.Param.Value, `"`, ""), 10, 64) if err != nil { - return 0, fmt.Errorf("failed to parse unbonding period from ccvconsumer param: %w", err) + return 0, fmt.Errorf("failed to parse %s from %s param: %w", key, subspace, err) } - return time.Duration(unbondingPeriod), nil + return time.Duration(unbondingValue), nil } // QueryUnbondingPeriod returns the unbonding period of the chain func (cc *CosmosProvider) QueryUnbondingPeriod(ctx context.Context) (time.Duration, error) { + + // Attempt ICS query + consumerUnbondingPeriod, consumerErr := cc.queryParamsSubspaceTime(ctx, "ccvconsumer", "UnbondingPeriod") + if consumerErr == nil { + return consumerUnbondingPeriod, nil + } + + //Attempt Staking query. + unbondingPeriod, stakingParamsErr := cc.queryParamsSubspaceTime(ctx, "staking", "UnbondingTime") + if stakingParamsErr == nil { + return unbondingPeriod, nil + } + + // Fallback req := stakingtypes.QueryParamsRequest{} queryClient := stakingtypes.NewQueryClient(cc) - res, err := queryClient.Params(ctx, &req) - if err != nil { - // Attempt ICS query - consumerUnbondingPeriod, consumerErr := cc.queryConsumerUnbondingPeriod(ctx) - if consumerErr != nil { - return 0, - fmt.Errorf("failed to query unbonding period as both standard and consumer chain: %s: %w", err.Error(), consumerErr) - } + if err == nil { + return res.Params.UnbondingTime, nil - return consumerUnbondingPeriod, nil } - return res.Params.UnbondingTime, nil + return 0, + fmt.Errorf("failed to query unbonding period from ccvconsumer, staking & fallback : %w: %s : %s", consumerErr, stakingParamsErr.Error(), err.Error()) } // QueryTendermintProof performs an ABCI query with the given key and returns From a3cb99132c821dee37ac723dd4470be88f4443f5 Mon Sep 17 00:00:00 2001 From: mmsqe Date: Wed, 11 Oct 2023 13:53:07 +0800 Subject: [PATCH 33/37] Problem: estimate less gas when miss max gas on txf when simualte runTx (#1303) * Problem: estimate less gas when miss max gas on txf when simualte runTx * Update CHANGELOG.md --- CHANGELOG.md | 1 + relayer/chains/cosmos/tx.go | 3 +++ 2 files changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93f9f9358..6ada6cea6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ * [\#1221](https://github.com/cosmos/relayer/pull/1221) Update cometbft to v0.37.2 and ibc-go to v7.2.0. * [\#1226](https://github.com/cosmos/relayer/pull/1226) Avoid invalid Bech32 prefix error in parallel tests when sdk Config get overwritten by each other in single process. * [\#1231](https://github.com/cosmos/relayer/pull/1231) Reduce get bech32 prefix when get signer. +* [\#1303](https://github.com/cosmos/relayer/pull/1303) Add missing max gas amount on txf to avoid estimate less gas when simualte runTx. ## v0.9.3 diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index 44e002889..a8574b5f1 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -1668,6 +1668,9 @@ func (cc *CosmosProvider) PrepareFactory(txf tx.Factory, signingKey string) (tx. txf = txf.WithGas(cc.PCfg.MinGasAmount) } + if cc.PCfg.MaxGasAmount != 0 { + txf = txf.WithGas(cc.PCfg.MaxGasAmount) + } txf, err = cc.SetWithExtensionOptions(txf) if err != nil { return tx.Factory{}, err From 892e52cc41b6092ff32be4a49e67ccefc954729a Mon Sep 17 00:00:00 2001 From: mmsqe Date: Thu, 12 Oct 2023 02:15:54 +0800 Subject: [PATCH 34/37] Problem: packet get relayed even estimated gas is higher than max gas (#1302) * Problem: packet get relayed even estimated gas is higher than max gas * Update CHANGELOG.md * update doc * add back infinite check --- CHANGELOG.md | 1 + relayer/chains/cosmos/tx.go | 14 +++++--------- relayer/chains/cosmos/tx_test.go | 8 ++++++++ 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6ada6cea6..1e456c471 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -22,6 +22,7 @@ * [\#1221](https://github.com/cosmos/relayer/pull/1221) Update cometbft to v0.37.2 and ibc-go to v7.2.0. * [\#1226](https://github.com/cosmos/relayer/pull/1226) Avoid invalid Bech32 prefix error in parallel tests when sdk Config get overwritten by each other in single process. * [\#1231](https://github.com/cosmos/relayer/pull/1231) Reduce get bech32 prefix when get signer. +* [\#1302](https://github.com/cosmos/relayer/pull/1302) Avoid packet get relayed when estimated gas is higher than max gas. * [\#1303](https://github.com/cosmos/relayer/pull/1303) Add missing max gas amount on txf to avoid estimate less gas when simualte runTx. ## v0.9.3 diff --git a/relayer/chains/cosmos/tx.go b/relayer/chains/cosmos/tx.go index a8574b5f1..163af0515 100644 --- a/relayer/chains/cosmos/tx.go +++ b/relayer/chains/cosmos/tx.go @@ -267,8 +267,6 @@ func (cc *CosmosProvider) SendMsgsWith(ctx context.Context, msgs []sdk.Msg, memo if err != nil { return nil, err } - - adjusted = uint64(float64(adjusted) * cc.PCfg.GasAdjustment) } //Cannot feegrant your own TX @@ -1679,21 +1677,19 @@ func (cc *CosmosProvider) PrepareFactory(txf tx.Factory, signingKey string) (tx. } // AdjustEstimatedGas adjusts the estimated gas usage by multiplying it by the gas adjustment factor -// and bounding the result by the maximum gas amount option. If the gas usage is zero, the adjusted gas -// is also zero. If the gas adjustment factor produces an infinite result, an error is returned. -// max-gas-amount is enforced. +// and return estimated gas is higher than max gas error. If the gas usage is zero, the adjusted gas +// is also zero. func (cc *CosmosProvider) AdjustEstimatedGas(gasUsed uint64) (uint64, error) { if gasUsed == 0 { return gasUsed, nil } + if cc.PCfg.MaxGasAmount > 0 && gasUsed > cc.PCfg.MaxGasAmount { + return 0, fmt.Errorf("estimated gas %d is higher than max gas %d", gasUsed, cc.PCfg.MaxGasAmount) + } gas := cc.PCfg.GasAdjustment * float64(gasUsed) if math.IsInf(gas, 1) { return 0, fmt.Errorf("infinite gas used") } - // Bound the gas estimate by the max_gas option - if cc.PCfg.MaxGasAmount > 0 { - gas = math.Min(gas, float64(cc.PCfg.MaxGasAmount)) - } return uint64(gas), nil } diff --git a/relayer/chains/cosmos/tx_test.go b/relayer/chains/cosmos/tx_test.go index 25bb02dd2..cf1b086e4 100644 --- a/relayer/chains/cosmos/tx_test.go +++ b/relayer/chains/cosmos/tx_test.go @@ -68,6 +68,14 @@ func TestCosmosProvider_AdjustEstimatedGas(t *testing.T) { expectedGas: 75000, expectedErr: nil, }, + { + name: "estimated gas is higher than max gas", + gasUsed: 50000, + gasAdjustment: 1.5, + maxGasAmount: 70000, + expectedGas: 75000, + expectedErr: fmt.Errorf("estimated gas 75000 is higher than max gas 70000"), + }, } for _, tc := range testCases { From 6bd9c02f6c238ef0f5117a4d7ebe33e2c7372b0e Mon Sep 17 00:00:00 2001 From: Andrew Gouin Date: Thu, 12 Oct 2023 01:15:42 +0300 Subject: [PATCH 35/37] Stuck packet (#1296) * Add stuck packet height hack break out of query cycle if stuck packet height has been queried Add debug logs get hack working * convert to feature with flags * remove unused var * allow stuck packet flags on flush * Add docs * Fix typo * Update debug log --- cmd/flags.go | 59 +++++++++++++++++++ cmd/start.go | 7 +++ cmd/tx.go | 8 +++ docs/advanced_usage.md | 18 ++++++ .../chains/cosmos/cosmos_chain_processor.go | 29 ++++++--- relayer/chains/mock/mock_chain_processor.go | 2 +- .../penumbra/penumbra_chain_processor.go | 2 +- relayer/processor/chain_processor.go | 2 +- relayer/processor/event_processor.go | 10 +++- relayer/processor/types.go | 7 +++ relayer/strategies.go | 12 +++- 11 files changed, 143 insertions(+), 13 deletions(-) diff --git a/cmd/flags.go b/cmd/flags.go index 8d605319b..d8d4b187c 100644 --- a/cmd/flags.go +++ b/cmd/flags.go @@ -5,6 +5,7 @@ import ( "time" "github.com/cosmos/relayer/v2/relayer" + "github.com/cosmos/relayer/v2/relayer/processor" "github.com/spf13/cobra" "github.com/spf13/viper" @@ -57,6 +58,9 @@ const ( flagSrcConnID = "src-connection-id" flagDstConnID = "dst-connection-id" flagOutput = "output" + flagStuckPacketChainID = "stuck-packet-chain-id" + flagStuckPacketHeightStart = "stuck-packet-height-start" + flagStuckPacketHeightEnd = "stuck-packet-height-end" ) const ( @@ -424,3 +428,58 @@ func addOutputFlag(v *viper.Viper, cmd *cobra.Command) *cobra.Command { } return cmd } + +func stuckPacketFlags(v *viper.Viper, cmd *cobra.Command) *cobra.Command { + cmd.Flags().String(flagStuckPacketChainID, "", "chain ID with the stuck packet(s)") + if err := v.BindPFlag(flagStuckPacketChainID, cmd.Flags().Lookup(flagStuckPacketChainID)); err != nil { + panic(err) + } + cmd.Flags().Uint64(flagStuckPacketHeightStart, 0, "height to start searching for the stuck packet(s)") + if err := v.BindPFlag(flagStuckPacketHeightStart, cmd.Flags().Lookup(flagStuckPacketHeightStart)); err != nil { + panic(err) + } + cmd.Flags().Uint64(flagStuckPacketHeightEnd, 0, "height to end searching for the stuck packet(s)") + if err := v.BindPFlag(flagStuckPacketHeightEnd, cmd.Flags().Lookup(flagStuckPacketHeightEnd)); err != nil { + panic(err) + } + return cmd +} + +func parseStuckPacketFromFlags(cmd *cobra.Command) (*processor.StuckPacket, error) { + stuckPacketChainID, err := cmd.Flags().GetString(flagStuckPacketChainID) + if err != nil { + return nil, err + } + + if stuckPacketChainID == "" { + return nil, nil + } + + stuckPacketHeightStart, err := cmd.Flags().GetUint64(flagStuckPacketHeightStart) + if err != nil { + return nil, err + } + + if stuckPacketHeightStart == 0 { + return nil, fmt.Errorf("stuck packet chain ID %s is set but start height is not", stuckPacketChainID) + } + + stuckPacketHeightEnd, err := cmd.Flags().GetUint64(flagStuckPacketHeightEnd) + if err != nil { + return nil, err + } + + if stuckPacketHeightEnd == 0 { + return nil, fmt.Errorf("stuck packet chain ID %s is set but end height is not", stuckPacketChainID) + } + + if stuckPacketHeightEnd < stuckPacketHeightStart { + return nil, fmt.Errorf("stuck packet end height %d is less than start height %d", stuckPacketHeightEnd, stuckPacketHeightStart) + } + + return &processor.StuckPacket{ + ChainID: stuckPacketChainID, + StartHeight: stuckPacketHeightStart, + EndHeight: stuckPacketHeightEnd, + }, nil +} diff --git a/cmd/start.go b/cmd/start.go index c2cdf9406..42e4c62ee 100644 --- a/cmd/start.go +++ b/cmd/start.go @@ -143,6 +143,11 @@ $ %s start demo-path2 --max-tx-size 10`, appName, appName, appName, appName)), return err } + stuckPacket, err := parseStuckPacketFromFlags(cmd) + if err != nil { + return err + } + rlyErrCh := relayer.StartRelayer( cmd.Context(), a.log, @@ -156,6 +161,7 @@ $ %s start demo-path2 --max-tx-size 10`, appName, appName, appName, appName)), processorType, initialBlockHistory, prometheusMetrics, + stuckPacket, ) // Block until the error channel sends a message. @@ -179,5 +185,6 @@ $ %s start demo-path2 --max-tx-size 10`, appName, appName, appName, appName)), cmd = initBlockFlag(a.viper, cmd) cmd = flushIntervalFlag(a.viper, cmd) cmd = memoFlag(a.viper, cmd) + cmd = stuckPacketFlags(a.viper, cmd) return cmd } diff --git a/cmd/tx.go b/cmd/tx.go index de83c177e..041076a25 100644 --- a/cmd/tx.go +++ b/cmd/tx.go @@ -795,6 +795,11 @@ $ %s tx flush demo-path channel-0`, } } + stuckPacket, err := parseStuckPacketFromFlags(cmd) + if err != nil { + return err + } + ctx, cancel := context.WithTimeout(cmd.Context(), flushTimeout) defer cancel() @@ -811,6 +816,7 @@ $ %s tx flush demo-path channel-0`, relayer.ProcessorEvents, 0, nil, + stuckPacket, ) // Block until the error channel sends a message. @@ -830,6 +836,8 @@ $ %s tx flush demo-path channel-0`, cmd = strategyFlag(a.viper, cmd) cmd = memoFlag(a.viper, cmd) + cmd = stuckPacketFlags(a.viper, cmd) + return cmd } diff --git a/docs/advanced_usage.md b/docs/advanced_usage.md index bcfd1d2ac..7dd5fcb9e 100644 --- a/docs/advanced_usage.md +++ b/docs/advanced_usage.md @@ -76,7 +76,25 @@ To remove the feegrant configuration: - `rly chains configure feegrant basicallowance kujira --delete` +## Stuck Packet +There can be scenarios where a standard flush fails to clear a packet due to differences in the way packets are observed. The standard flush depends on the packet queries working properly. Sometimes the packet queries can miss things that the block scanning performed by the relayer during standard operation wouldn't. For packets affected by this, if they were emitted in recent blocks, the `--block-history` flag can be used to have the standard relayer block scanning start at a block height that many blocks behind the current chain tip. However, if the stuck packet occurred at an old height, farther back than would be reasonable for the `--block-history` scan from historical to current, there is an additional set of flags that can be used to zoom in on the block heights where the stuck packet occurred. + +For example, say a relayer is configured between Chain A and B. The relayer was not operational during the time a user on Chain A sends a packet to Chain B. Due to an issue in the queries to Chain A, the typical flush of the relayer does not relay the packet. Say that many days go by before recognition of the issue by the relayer operator. The relayer operator could start up the relayer with a massive `--block-history` to query all blocks from the time of the stuck packet until the current block, but that could take many hours to query through each block. Instead, the relayer operator can flush out the packet by doing the following: + +```bash +rly start $PATH_NAME --stuck-packet-chain-id $CHAIN_A_CHAIN_ID --stuck-packet-height-start $CHAIN_A_STUCK_PACKET_HEIGHT --stuck-packet-height-end $CHAIN_A_STUCK_PACKET_HEIGHT -d +``` + +Alternatively, a flush can be run with these flags so that the relayer exits once it is done: + +```bash +rly tx flush $PATH_NAME --stuck-packet-chain-id $CHAIN_A_CHAIN_ID --stuck-packet-height-start $CHAIN_A_STUCK_PACKET_HEIGHT --stuck-packet-height-end $CHAIN_A_STUCK_PACKET_HEIGHT -d +``` + +If the `CHAIN_A_STUCK_PACKET_HEIGHT` is not exactly known, the `stuck-packet-height-start` and `stuck-packet-height-end` flags can be placed at heights surrounding the range where the stuck packet is expected to be, for convenience of not needing to dig through every block to determine the exact height. + +Note that this narrows the window of visibility that the relayer has into what has happened on the chain, since the relayer is only getting a picture of what happened between `stuck-packet-height-start` and `stuck-packet-height-end` and then starts observing the most recent blocks after that. If a packet was actually relayed properly in between `stuck-packet-height-end` and the chain tip, then the relayer would encounter errors trying to relay a packet that was already relayed. This feature should only be used by advanced users for zooming in on a troublesome packet. --- diff --git a/relayer/chains/cosmos/cosmos_chain_processor.go b/relayer/chains/cosmos/cosmos_chain_processor.go index ad2d56c6c..8f706a0e1 100644 --- a/relayer/chains/cosmos/cosmos_chain_processor.go +++ b/relayer/chains/cosmos/cosmos_chain_processor.go @@ -56,7 +56,11 @@ type CosmosChainProcessor struct { parsedGasPrices *sdk.DecCoins } -func NewCosmosChainProcessor(log *zap.Logger, provider *CosmosProvider, metrics *processor.PrometheusMetrics) *CosmosChainProcessor { +func NewCosmosChainProcessor( + log *zap.Logger, + provider *CosmosProvider, + metrics *processor.PrometheusMetrics, +) *CosmosChainProcessor { return &CosmosChainProcessor{ log: log.With(zap.String("chain_name", provider.ChainName()), zap.String("chain_id", provider.ChainId())), chainProvider: provider, @@ -208,7 +212,7 @@ type queryCyclePersistence struct { // Run starts the query loop for the chain which will gather applicable ibc messages and push events out to the relevant PathProcessors. // The initialBlockHistory parameter determines how many historical blocks should be fetched and processed before continuing with current blocks. // ChainProcessors should obey the context and return upon context cancellation. -func (ccp *CosmosChainProcessor) Run(ctx context.Context, initialBlockHistory uint64) error { +func (ccp *CosmosChainProcessor) Run(ctx context.Context, initialBlockHistory uint64, stuckPacket *processor.StuckPacket) error { minQueryLoopDuration := ccp.chainProvider.PCfg.MinLoopDuration if minQueryLoopDuration == 0 { minQueryLoopDuration = defaultMinQueryLoopDuration @@ -247,6 +251,10 @@ func (ccp *CosmosChainProcessor) Run(ctx context.Context, initialBlockHistory ui latestQueriedBlock = 0 } + if stuckPacket != nil && ccp.chainProvider.ChainId() == stuckPacket.ChainID { + latestQueriedBlock = int64(stuckPacket.StartHeight) + } + persistence.latestQueriedBlock = latestQueriedBlock var eg errgroup.Group @@ -266,7 +274,7 @@ func (ccp *CosmosChainProcessor) Run(ctx context.Context, initialBlockHistory ui defer ticker.Stop() for { - if err := ccp.queryCycle(ctx, &persistence); err != nil { + if err := ccp.queryCycle(ctx, &persistence, stuckPacket); err != nil { return err } select { @@ -327,7 +335,7 @@ func (ccp *CosmosChainProcessor) initializeChannelState(ctx context.Context) err return nil } -func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *queryCyclePersistence) error { +func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *queryCyclePersistence, stuckPacket *processor.StuckPacket) error { status, err := ccp.nodeStatusWithRetry(ctx) if err != nil { // don't want to cause CosmosChainProcessor to quit here, can retry again next cycle. @@ -383,11 +391,11 @@ func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *qu var eg errgroup.Group var blockRes *ctypes.ResultBlockResults var ibcHeader provider.IBCHeader - i := i + sI := i eg.Go(func() (err error) { queryCtx, cancelQueryCtx := context.WithTimeout(ctx, blockResultsQueryTimeout) defer cancelQueryCtx() - blockRes, err = ccp.chainProvider.RPCClient.BlockResults(queryCtx, &i) + blockRes, err = ccp.chainProvider.RPCClient.BlockResults(queryCtx, &sI) if err != nil && ccp.metrics != nil { ccp.metrics.IncBlockQueryFailure(chainID, "RPC Client") } @@ -396,7 +404,7 @@ func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *qu eg.Go(func() (err error) { queryCtx, cancelQueryCtx := context.WithTimeout(ctx, queryTimeout) defer cancelQueryCtx() - ibcHeader, err = ccp.chainProvider.QueryIBCHeader(queryCtx, i) + ibcHeader, err = ccp.chainProvider.QueryIBCHeader(queryCtx, sI) if err != nil && ccp.metrics != nil { ccp.metrics.IncBlockQueryFailure(chainID, "IBC Header") } @@ -467,6 +475,13 @@ func (ccp *CosmosChainProcessor) queryCycle(ctx context.Context, persistence *qu } newLatestQueriedBlock = i + + if stuckPacket != nil && + ccp.chainProvider.ChainId() == stuckPacket.ChainID && + newLatestQueriedBlock == int64(stuckPacket.EndHeight) { + i = persistence.latestHeight + ccp.log.Debug("Parsed stuck packet height, skipping to current") + } } if newLatestQueriedBlock == persistence.latestQueriedBlock { diff --git a/relayer/chains/mock/mock_chain_processor.go b/relayer/chains/mock/mock_chain_processor.go index 85ec8e769..a0641bd64 100644 --- a/relayer/chains/mock/mock_chain_processor.go +++ b/relayer/chains/mock/mock_chain_processor.go @@ -73,7 +73,7 @@ type queryCyclePersistence struct { latestQueriedBlock int64 } -func (mcp *MockChainProcessor) Run(ctx context.Context, initialBlockHistory uint64) error { +func (mcp *MockChainProcessor) Run(ctx context.Context, initialBlockHistory uint64, _ *processor.StuckPacket) error { // this will be used for persistence across query cycle loop executions persistence := queryCyclePersistence{ // would be query of latest height, mocking 20 diff --git a/relayer/chains/penumbra/penumbra_chain_processor.go b/relayer/chains/penumbra/penumbra_chain_processor.go index 2f741d589..4142c1bf8 100644 --- a/relayer/chains/penumbra/penumbra_chain_processor.go +++ b/relayer/chains/penumbra/penumbra_chain_processor.go @@ -153,7 +153,7 @@ type queryCyclePersistence struct { // Run starts the query loop for the chain which will gather applicable ibc messages and push events out to the relevant PathProcessors. // The initialBlockHistory parameter determines how many historical blocks should be fetched and processed before continuing with current blocks. // ChainProcessors should obey the context and return upon context cancellation. -func (pcp *PenumbraChainProcessor) Run(ctx context.Context, initialBlockHistory uint64) error { +func (pcp *PenumbraChainProcessor) Run(ctx context.Context, initialBlockHistory uint64, _ *processor.StuckPacket) error { minQueryLoopDuration := pcp.chainProvider.PCfg.MinLoopDuration if minQueryLoopDuration == 0 { minQueryLoopDuration = defaultMinQueryLoopDuration diff --git a/relayer/processor/chain_processor.go b/relayer/processor/chain_processor.go index cb13b589e..aaccbd06d 100644 --- a/relayer/processor/chain_processor.go +++ b/relayer/processor/chain_processor.go @@ -12,7 +12,7 @@ type ChainProcessor interface { // Run starts the query loop for the chain which will gather applicable ibc messages and push events out to the relevant PathProcessors. // The initialBlockHistory parameter determines how many historical blocks should be fetched and processed before continuing with current blocks. // ChainProcessors should obey the context and return upon context cancellation. - Run(ctx context.Context, initialBlockHistory uint64) error + Run(ctx context.Context, initialBlockHistory uint64, stuckPacket *StuckPacket) error // Provider returns the ChainProvider, which provides the methods for querying, assembling IBC messages, and sending transactions. Provider() provider.ChainProvider diff --git a/relayer/processor/event_processor.go b/relayer/processor/event_processor.go index 1b577a3a3..37dba66fc 100644 --- a/relayer/processor/event_processor.go +++ b/relayer/processor/event_processor.go @@ -12,6 +12,7 @@ type EventProcessorBuilder struct { initialBlockHistory uint64 pathProcessors PathProcessors messageLifecycle MessageLifecycle + stuckPacket *StuckPacket } // EventProcessor is a built instance that is ready to be executed with Run(ctx). @@ -20,6 +21,7 @@ type EventProcessor struct { initialBlockHistory uint64 pathProcessors PathProcessors messageLifecycle MessageLifecycle + stuckPacket *StuckPacket } // NewEventProcessor creates a builder than can be used to construct a multi-ChainProcessor, multi-PathProcessor topology for the relayer. @@ -61,6 +63,12 @@ func (ep EventProcessorBuilder) WithMessageLifecycle(messageLifecycle MessageLif return ep } +// WithStuckPacket sets the stuck packet configuration. +func (ep EventProcessorBuilder) WithStuckPacket(stuckPacket *StuckPacket) EventProcessorBuilder { + ep.stuckPacket = stuckPacket + return ep +} + // Build links the relevant ChainProcessors and PathProcessors, then returns an EventProcessor that can be used to run the ChainProcessors and PathProcessors. func (ep EventProcessorBuilder) Build() EventProcessor { for _, chainProcessor := range ep.chainProcessors { @@ -95,7 +103,7 @@ func (ep EventProcessor) Run(ctx context.Context) error { for _, chainProcessor := range ep.chainProcessors { chainProcessor := chainProcessor eg.Go(func() error { - err := chainProcessor.Run(runCtx, ep.initialBlockHistory) + err := chainProcessor.Run(runCtx, ep.initialBlockHistory, ep.stuckPacket) // Signal the other chain processors to exit. runCtxCancel() return err diff --git a/relayer/processor/types.go b/relayer/processor/types.go index a5db23c9b..27b9b7f40 100644 --- a/relayer/processor/types.go +++ b/relayer/processor/types.go @@ -605,3 +605,10 @@ func ConnectionInfoConnectionKey(info provider.ConnectionInfo) ConnectionKey { CounterpartyConnID: info.CounterpartyConnID, } } + +// StuckPacket is used for narrowing block queries on packets that are stuck on a channel for a specific chain. +type StuckPacket struct { + ChainID string + StartHeight uint64 + EndHeight uint64 +} diff --git a/relayer/strategies.go b/relayer/strategies.go index fd2856aad..9412ecdb9 100644 --- a/relayer/strategies.go +++ b/relayer/strategies.go @@ -47,6 +47,7 @@ func StartRelayer( processorType string, initialBlockHistory uint64, metrics *processor.PrometheusMetrics, + stuckPacket *processor.StuckPacket, ) chan error { //prevent incorrect bech32 address prefixed addresses when calling AccAddress.String() sdk.SetAddrCacheEnabled(false) @@ -93,6 +94,7 @@ func StartRelayer( flushInterval, errorChan, metrics, + stuckPacket, ) return errorChan case ProcessorLegacy: @@ -118,7 +120,10 @@ type path struct { } // chainProcessor returns the corresponding ChainProcessor implementation instance for a pathChain. -func (chain *Chain) chainProcessor(log *zap.Logger, metrics *processor.PrometheusMetrics) processor.ChainProcessor { +func (chain *Chain) chainProcessor( + log *zap.Logger, + metrics *processor.PrometheusMetrics, +) processor.ChainProcessor { // Handle new ChainProcessor implementations as cases here switch p := chain.ChainProvider.(type) { case *penumbraprocessor.PenumbraProvider: @@ -144,10 +149,13 @@ func relayerStartEventProcessor( flushInterval time.Duration, errCh chan<- error, metrics *processor.PrometheusMetrics, + stuckPacket *processor.StuckPacket, ) { defer close(errCh) - epb := processor.NewEventProcessor().WithChainProcessors(chainProcessors...) + epb := processor.NewEventProcessor(). + WithChainProcessors(chainProcessors...). + WithStuckPacket(stuckPacket) for _, p := range paths { epb = epb. From 200d0fb88e46d49c893facc502e426d1fe432440 Mon Sep 17 00:00:00 2001 From: Andrew Gouin Date: Thu, 12 Oct 2023 02:33:32 +0300 Subject: [PATCH 36/37] Remove self hosted runners (#1306) --- .github/workflows/interchaintest.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/interchaintest.yml b/.github/workflows/interchaintest.yml index 158329a66..5a9fd18a3 100644 --- a/.github/workflows/interchaintest.yml +++ b/.github/workflows/interchaintest.yml @@ -5,7 +5,7 @@ on: jobs: events: - runs-on: self-hosted + runs-on: ubuntu-latest steps: - name: Set up Go 1.21 uses: actions/setup-go@v4 @@ -28,7 +28,7 @@ jobs: run: make interchaintest-events legacy: - runs-on: self-hosted + runs-on: ubuntu-latest steps: - name: Set up Go 1.21 uses: actions/setup-go@v4 From cb4708babe0c36339e747fc7a9c4998317e2d62e Mon Sep 17 00:00:00 2001 From: vimystic <122659254+vimystic@users.noreply.github.com> Date: Thu, 12 Oct 2023 10:56:12 -0600 Subject: [PATCH 37/37] edit rpc endpoints using command (#1292) * edit rpc endpoints using command * Update to search for tests recursively --- .github/workflows/interchaintest.yml | 2 +- cmd/appstate.go | 13 +++++++++++++ cmd/chains.go | 29 ++++++++++++++++++++++++++++ cmd/errors.go | 4 ++++ relayer/chains/cosmos/provider.go | 7 +++++++ relayer/chains/penumbra/provider.go | 7 +++++++ relayer/provider/provider.go | 2 ++ 7 files changed, 63 insertions(+), 1 deletion(-) diff --git a/.github/workflows/interchaintest.yml b/.github/workflows/interchaintest.yml index 5a9fd18a3..9d9d1165d 100644 --- a/.github/workflows/interchaintest.yml +++ b/.github/workflows/interchaintest.yml @@ -154,7 +154,7 @@ jobs: id: set-matrix run: | # Run the command and convert its output to a JSON array - TESTS=$(cd interchaintest && go test -list ^TestScenario | grep -v "^ok " | jq -R -s -c 'split("\n")[:-1]') + TESTS=$(cd interchaintest && go test -list ^TestScenario ./... | grep -v "^ok " | jq -R -s -c 'split("\n")[:-1]') echo "matrix=${TESTS}" >> $GITHUB_OUTPUT # Note : This job will not start until prepare-scenario-matrix completes sucessfully diff --git a/cmd/appstate.go b/cmd/appstate.go index 5017df85e..738e9af40 100644 --- a/cmd/appstate.go +++ b/cmd/appstate.go @@ -282,3 +282,16 @@ func (a *appState) useKey(chainName, key string) error { return nil }) } + +func (a *appState) useRpcAddr(chainName string, rpcAddr string) error { + + _, exists := a.config.Chains[chainName] + if !exists { + return fmt.Errorf("chain %s not found in config", chainName) + } + + return a.performConfigLockingOperation(context.Background(), func() error { + a.config.Chains[chainName].ChainProvider.SetRpcAddr(rpcAddr) + return nil + }) +} diff --git a/cmd/chains.go b/cmd/chains.go index aa66ed235..d39396412 100644 --- a/cmd/chains.go +++ b/cmd/chains.go @@ -40,11 +40,35 @@ func chainsCmd(a *appState) *cobra.Command { chainsAddrCmd(a), chainsAddDirCmd(a), cmdChainsConfigure(a), + cmdChainsUseRpcAddr(a), ) return cmd } +func cmdChainsUseRpcAddr(a *appState) *cobra.Command { + cmd := &cobra.Command{ + Use: "set-rpc-addr chain_name valid_rpc_url", + Aliases: []string{"rpc"}, + Short: "Sets chain's rpc address", + Args: withUsage(cobra.ExactArgs(2)), + Example: strings.TrimSpace(fmt.Sprintf(` +$ %s chains set-rpc-addr ibc-0 https://abc.xyz.com:443 +$ %s ch set-rpc-addr ibc-0 https://abc.xyz.com:443`, appName, appName)), + RunE: func(cmd *cobra.Command, args []string) error { + chainName := args[0] + rpc_address := args[1] + if !isValidURL(rpc_address) { + return invalidRpcAddr(rpc_address) + } + + return a.useRpcAddr(chainName, rpc_address) + }, + } + + return cmd +} + func chainsAddrCmd(a *appState) *cobra.Command { cmd := &cobra.Command{ Use: "address chain_name", @@ -513,3 +537,8 @@ func addChainsFromRegistry(ctx context.Context, a *appState, forceAdd, testnet b ) return nil } + +func isValidURL(str string) bool { + u, err := url.Parse(str) + return err == nil && u.Scheme != "" && u.Host != "" +} diff --git a/cmd/errors.go b/cmd/errors.go index d7a94dee8..5d763645d 100644 --- a/cmd/errors.go +++ b/cmd/errors.go @@ -17,6 +17,10 @@ func errChainNotFound(chainName string) error { return fmt.Errorf("chain with name \"%s\" not found in config. consider running `rly chains add %s`", chainName, chainName) } +func invalidRpcAddr(rpcAddr string) error { + return fmt.Errorf("rpc-addr %s is not valid", rpcAddr) +} + var ( errMultipleAddFlags = errors.New("expected either --file/-f OR --url/u, found multiple") errInvalidTestnetFlag = errors.New("cannot use --testnet with --file/-f OR --url/u, must be used alone") diff --git a/relayer/chains/cosmos/provider.go b/relayer/chains/cosmos/provider.go index 3c7ff47fc..a8041466d 100644 --- a/relayer/chains/cosmos/provider.go +++ b/relayer/chains/cosmos/provider.go @@ -257,6 +257,13 @@ func (cc *CosmosProvider) Sprint(toPrint proto.Message) (string, error) { return string(out), nil } +// SetPCAddr sets the rpc-addr for the chain. +// It will fail if the rpcAddr is invalid(not a url). +func (cc *CosmosProvider) SetRpcAddr(rpcAddr string) error { + cc.PCfg.RPCAddr = rpcAddr + return nil +} + // Init initializes the keystore, RPC client, amd light client provider. // 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. diff --git a/relayer/chains/penumbra/provider.go b/relayer/chains/penumbra/provider.go index 92918b3d0..fc680a41e 100644 --- a/relayer/chains/penumbra/provider.go +++ b/relayer/chains/penumbra/provider.go @@ -227,6 +227,13 @@ func (cc *PenumbraProvider) Sprint(toPrint proto.Message) (string, error) { return string(out), nil } +// SetPCAddr sets the rpc-addr for the chain. +// It will fail if the rpcAddr is invalid(not a url). +func (cc *PenumbraProvider) SetRpcAddr(rpcAddr string) error { + cc.PCfg.RPCAddr = rpcAddr + return nil +} + // Init initializes the keystore, RPC client, amd light client provider. // 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. diff --git a/relayer/provider/provider.go b/relayer/provider/provider.go index 2bce8c2c4..d5bd7abd7 100644 --- a/relayer/provider/provider.go +++ b/relayer/provider/provider.go @@ -407,6 +407,8 @@ type ChainProvider interface { TrustingPeriod(ctx context.Context) (time.Duration, error) WaitForNBlocks(ctx context.Context, n int64) error Sprint(toPrint proto.Message) (string, error) + + SetRpcAddr(rpcAddr string) error } // Do we need intermediate types? i.e. can we use the SDK types for both substrate and cosmos?