diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..ebf2bb36a --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,20 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + - package-ecosystem: gomod + directory: "/" + schedule: + interval: "weekly" + open-pull-requests-limit: 10 + labels: + - dependencies + + - package-ecosystem: github-actions + directory: "/" + schedule: + interval: monthly + open-pull-requests-limit: 10 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 123b8c4f8..cf32fa74f 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -11,9 +11,9 @@ jobs: name: lint runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: golangci-lint - uses: golangci/golangci-lint-action@v2 + uses: golangci/golangci-lint-action@v3 with: version: latest only-new-issues: true diff --git a/.github/workflows/prior-version-pr.yml b/.github/workflows/prior-version-pr.yml index a5ddba659..d2e4be23c 100644 --- a/.github/workflows/prior-version-pr.yml +++ b/.github/workflows/prior-version-pr.yml @@ -9,7 +9,7 @@ jobs: name: release_pull_request steps: - name: checkout - uses: actions/checkout@v1 + uses: actions/checkout@v3 - name: Create PR to branch uses: gorillio/github-action-cherry-pick@master with: diff --git a/.github/workflows/strangelove-project-management.yaml b/.github/workflows/strangelove-project-management.yaml index e0023dd71..5c288d9f5 100644 --- a/.github/workflows/strangelove-project-management.yaml +++ b/.github/workflows/strangelove-project-management.yaml @@ -15,7 +15,7 @@ jobs: github.event_name == 'issues' && (github.event.action == 'opened' || github.event.action == 'reopened') steps: - name: Add Issue to "Motherboard" Project Board - uses: leonsteinhaeuser/project-beta-automations@v2.0.1 + uses: leonsteinhaeuser/project-beta-automations@v2.1.0 with: gh_app_secret_key: ${{ secrets.MB_SECRET_KEY }} gh_app_ID: ${{ secrets.MB_APP_ID }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 6a0658092..389317a3f 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -17,7 +17,7 @@ jobs: steps: # Install and setup go - name: Set up Go 1.19 - uses: actions/setup-go@v3 + uses: actions/setup-go@v4 with: go-version: 1.19 @@ -39,7 +39,7 @@ jobs: steps: # Install and setup go - name: Set up Go 1.19 - uses: actions/setup-go@v3 + uses: actions/setup-go@v4 with: go-version: 1.19 @@ -60,7 +60,7 @@ jobs: steps: # Install and setup go - name: Set up Go 1.19 - uses: actions/setup-go@v3 + uses: actions/setup-go@v4 with: go-version: 1.19 @@ -81,7 +81,7 @@ jobs: steps: # Install and setup go - name: Set up Go 1.19 - uses: actions/setup-go@v3 + uses: actions/setup-go@v4 with: go-version: 1.19 diff --git a/.gitignore b/.gitignore index dff1bd8a8..d39e39ff1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,6 @@ # Don't commit the interchaintest.test file, # regardless of where it was built. interchaintest.test - -/bin .idea +/bin vendor diff --git a/chain/cosmos/broadcaster.go b/chain/cosmos/broadcaster.go index 294e77c1a..9ace40b04 100644 --- a/chain/cosmos/broadcaster.go +++ b/chain/cosmos/broadcaster.go @@ -107,7 +107,7 @@ func (b *Broadcaster) GetClientContext(ctx context.Context, user User) (client.C if !ok { localDir := b.t.TempDir() containerKeyringDir := path.Join(cn.HomeDir(), "keyring-test") - kr, err := dockerutil.NewLocalKeyringFromDockerContainer(ctx, cn.DockerClient, localDir, containerKeyringDir, cn.containerID) + kr, err := dockerutil.NewLocalKeyringFromDockerContainer(ctx, cn.DockerClient, localDir, containerKeyringDir, cn.containerLifecycle.ContainerID()) if err != nil { return client.Context{}, err } diff --git a/chain/cosmos/chain_node.go b/chain/cosmos/chain_node.go index 283f6b463..3ad74a323 100644 --- a/chain/cosmos/chain_node.go +++ b/chain/cosmos/chain_node.go @@ -17,26 +17,23 @@ import ( "time" "github.com/avast/retry-go/v4" + tmjson "github.com/cometbft/cometbft/libs/json" + "github.com/cometbft/cometbft/p2p" + rpcclient "github.com/cometbft/cometbft/rpc/client" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + coretypes "github.com/cometbft/cometbft/rpc/core/types" + libclient "github.com/cometbft/cometbft/rpc/jsonrpc/client" "github.com/cosmos/cosmos-sdk/client" "github.com/cosmos/cosmos-sdk/crypto/keyring" "github.com/cosmos/cosmos-sdk/types" + paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" stakingtypes "github.com/cosmos/cosmos-sdk/x/staking/types" - dockertypes "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" dockerclient "github.com/docker/docker/client" - "github.com/docker/docker/errdefs" "github.com/docker/go-connections/nat" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/internal/blockdb" "github.com/strangelove-ventures/interchaintest/v7/internal/dockerutil" "github.com/strangelove-ventures/interchaintest/v7/testutil" - tmjson "github.com/tendermint/tendermint/libs/json" - "github.com/tendermint/tendermint/p2p" - rpcclient "github.com/tendermint/tendermint/rpc/client" - rpchttp "github.com/tendermint/tendermint/rpc/client/http" - coretypes "github.com/tendermint/tendermint/rpc/core/types" - libclient "github.com/tendermint/tendermint/rpc/jsonrpc/client" "go.uber.org/zap" "golang.org/x/sync/errgroup" ) @@ -56,11 +53,32 @@ type ChainNode struct { lock sync.Mutex log *zap.Logger - containerID string + containerLifecycle *dockerutil.ContainerLifecycle // Ports set during StartContainer. hostRPCPort string hostGRPCPort string + + // preStartListeners dockerutil.Listeners +} + +func NewChainNode(log *zap.Logger, validator bool, chain *CosmosChain, dockerClient *dockerclient.Client, networkID string, testName string, image ibc.DockerImage, index int) *ChainNode { + tn := &ChainNode{ + log: log, + + Validator: validator, + + Chain: chain, + DockerClient: dockerClient, + NetworkID: networkID, + TestName: testName, + Image: image, + Index: index, + } + + tn.containerLifecycle = dockerutil.NewContainerLifecycle(log, dockerClient, tn.Name()) + + return tn } // ChainNodes is a collection of ChainNode @@ -135,8 +153,7 @@ func (tn *ChainNode) HostName() string { } func (tn *ChainNode) genesisFileContent(ctx context.Context) ([]byte, error) { - fr := dockerutil.NewFileRetriever(tn.logger(), tn.DockerClient, tn.TestName) - gen, err := fr.SingleFileContent(ctx, tn.VolumeName, "config/genesis.json") + gen, err := tn.ReadFile(ctx, "config/genesis.json") if err != nil { return nil, fmt.Errorf("getting genesis.json content: %w", err) } @@ -145,8 +162,8 @@ func (tn *ChainNode) genesisFileContent(ctx context.Context) ([]byte, error) { } func (tn *ChainNode) overwriteGenesisFile(ctx context.Context, content []byte) error { - fw := dockerutil.NewFileWriter(tn.logger(), tn.DockerClient, tn.TestName) - if err := fw.WriteFile(ctx, tn.VolumeName, "config/genesis.json", content); err != nil { + err := tn.WriteFile(ctx, content, "config/genesis.json") + if err != nil { return fmt.Errorf("overwriting genesis.json: %w", err) } @@ -161,14 +178,13 @@ func (tn *ChainNode) copyGentx(ctx context.Context, destVal *ChainNode) error { relPath := fmt.Sprintf("config/gentx/gentx-%s.json", nid) - fr := dockerutil.NewFileRetriever(tn.logger(), tn.DockerClient, tn.TestName) - gentx, err := fr.SingleFileContent(ctx, tn.VolumeName, relPath) + gentx, err := tn.ReadFile(ctx, relPath) if err != nil { return fmt.Errorf("getting gentx content: %w", err) } - fw := dockerutil.NewFileWriter(destVal.logger(), destVal.DockerClient, destVal.TestName) - if err := fw.WriteFile(ctx, destVal.VolumeName, relPath, gentx); err != nil { + err = destVal.WriteFile(ctx, gentx, relPath) + if err != nil { return fmt.Errorf("overwriting gentx: %w", err) } @@ -510,6 +526,36 @@ func (tn *ChainNode) InitHomeFolder(ctx context.Context) error { return err } +// WriteFile accepts file contents in a byte slice and writes the contents to +// the docker filesystem. relPath describes the location of the file in the +// docker volume relative to the home directory +func (tn *ChainNode) WriteFile(ctx context.Context, content []byte, relPath string) error { + fw := dockerutil.NewFileWriter(tn.logger(), tn.DockerClient, tn.TestName) + return fw.WriteFile(ctx, tn.VolumeName, relPath, content) +} + +// CopyFile adds a file from the host filesystem to the docker filesystem +// relPath describes the location of the file in the docker volume relative to +// the home directory +func (tn *ChainNode) CopyFile(ctx context.Context, srcPath, dstPath string) error { + content, err := os.ReadFile(srcPath) + if err != nil { + return err + } + return tn.WriteFile(ctx, content, dstPath) +} + +// ReadFile reads the contents of a single file at the specified path in the docker filesystem. +// relPath describes the location of the file in the docker volume relative to the home directory. +func (tn *ChainNode) ReadFile(ctx context.Context, relPath string) ([]byte, error) { + fr := dockerutil.NewFileRetriever(tn.logger(), tn.DockerClient, tn.TestName) + gen, err := fr.SingleFileContent(ctx, tn.VolumeName, relPath) + if err != nil { + return nil, fmt.Errorf("failed to read file at %s: %w", relPath, err) + } + return gen, nil +} + // CreateKey creates a key in the keyring backend test for the given node func (tn *ChainNode) CreateKey(ctx context.Context, name string) error { tn.lock.Lock() @@ -556,7 +602,14 @@ func (tn *ChainNode) AddGenesisAccount(ctx context.Context, address string, gene ctx, cancel := context.WithTimeout(ctx, time.Minute) defer cancel() - _, _, err := tn.ExecBin(ctx, "add-genesis-account", address, amount) + var command []string + if tn.Chain.Config().UsingNewGenesisCommand { + command = append(command, "genesis") + } + + command = append(command, "add-genesis-account", address, amount) + _, _, err := tn.ExecBin(ctx, command...) + return err } @@ -565,20 +618,28 @@ func (tn *ChainNode) Gentx(ctx context.Context, name string, genesisSelfDelegati tn.lock.Lock() defer tn.lock.Unlock() - _, _, err := tn.ExecBin(ctx, - "gentx", valKey, fmt.Sprintf("%d%s", genesisSelfDelegation.Amount.Int64(), genesisSelfDelegation.Denom), + var command []string + if tn.Chain.Config().UsingNewGenesisCommand { + command = append(command, "genesis") + } + + command = append(command, "gentx", valKey, fmt.Sprintf("%d%s", genesisSelfDelegation.Amount.Int64(), genesisSelfDelegation.Denom), "--keyring-backend", keyring.BackendTest, - "--chain-id", tn.Chain.Config().ChainID, - ) + "--chain-id", tn.Chain.Config().ChainID) + + _, _, err := tn.ExecBin(ctx, command...) return err } // CollectGentxs runs collect gentxs on the node's home folders func (tn *ChainNode) CollectGentxs(ctx context.Context) error { - command := []string{tn.Chain.Config().Bin, "collect-gentxs", - "--home", tn.HomeDir(), + command := []string{tn.Chain.Config().Bin} + if tn.Chain.Config().UsingNewGenesisCommand { + command = append(command, "genesis") } + command = append(command, "collect-gentxs", "--home", tn.HomeDir()) + tn.lock.Lock() defer tn.lock.Unlock() @@ -653,14 +714,9 @@ type CodeInfosResponse struct { // StoreContract takes a file path to smart contract and stores it on-chain. Returns the contracts code id. func (tn *ChainNode) StoreContract(ctx context.Context, keyName string, fileName string) (string, error) { - content, err := os.ReadFile(fileName) - if err != nil { - return "", err - } - _, file := filepath.Split(fileName) - fw := dockerutil.NewFileWriter(tn.logger(), tn.DockerClient, tn.TestName) - if err := fw.WriteFile(ctx, tn.VolumeName, file, content); err != nil { + err := tn.CopyFile(ctx, fileName, file) + if err != nil { return "", fmt.Errorf("writing contract file to docker volume: %w", err) } @@ -736,13 +792,9 @@ func (tn *ChainNode) QueryContract(ctx context.Context, contractAddress string, // StoreClientContract takes a file path to a client smart contract and stores it on-chain. Returns the contracts code id. func (tn *ChainNode) StoreClientContract(ctx context.Context, keyName string, fileName string) (string, error) { content, err := os.ReadFile(fileName) - if err != nil { - return "", err - } - _, file := filepath.Split(fileName) - fw := dockerutil.NewFileWriter(tn.logger(), tn.DockerClient, tn.TestName) - if err := fw.WriteFile(ctx, tn.VolumeName, file, content); err != nil { + err = tn.WriteFile(ctx, content, file) + if err != nil { return "", fmt.Errorf("writing contract file to docker volume: %w", err) } @@ -811,6 +863,7 @@ func (tn *ChainNode) SubmitProposal(ctx context.Context, keyName string, prop Tx return tn.ExecTx(ctx, keyName, command...) } + // UpgradeProposal submits a software-upgrade governance proposal to the chain. func (tn *ChainNode) UpgradeProposal(ctx context.Context, keyName string, prop SoftwareUpgradeProposal) (string, error) { command := []string{ @@ -844,6 +897,31 @@ func (tn *ChainNode) TextProposal(ctx context.Context, keyName string, prop Text return tn.ExecTx(ctx, keyName, command...) } +// ParamChangeProposal submits a param change proposal to the chain, signed by keyName. +func (tn *ChainNode) ParamChangeProposal(ctx context.Context, keyName string, prop *paramsutils.ParamChangeProposalJSON) (string, error) { + content, err := json.Marshal(prop) + if err != nil { + return "", err + } + + hash := sha256.Sum256(content) + proposalFilename := fmt.Sprintf("%x.json", hash) + err = tn.WriteFile(ctx, content, proposalFilename) + if err != nil { + return "", fmt.Errorf("writing param change proposal: %w", err) + } + + proposalPath := filepath.Join(tn.HomeDir(), proposalFilename) + + command := []string{ + "gov", "submit-proposal", + "param-change", + proposalPath, + } + + return tn.ExecTx(ctx, keyName, command...) +} + // DumpContractState dumps the state of a contract at a block height. func (tn *ChainNode) DumpContractState(ctx context.Context, contractAddress string, height int64) (*DumpContractStateResponse, error) { stdout, _, err := tn.ExecQuery(ctx, @@ -865,12 +943,12 @@ func (tn *ChainNode) ExportState(ctx context.Context, height int64) (string, err tn.lock.Lock() defer tn.lock.Unlock() - _, stderr, err := tn.ExecBin(ctx, "export", "--height", fmt.Sprint(height)) + stdout, stderr, err := tn.ExecBin(ctx, "export", "--height", fmt.Sprint(height)) if err != nil { return "", err } - // output comes to stderr for some reason - return string(stderr), nil + // output comes to stderr on older versions + return string(stdout) + string(stderr), nil } func (tn *ChainNode) UnsafeResetAll(ctx context.Context) error { @@ -883,68 +961,28 @@ func (tn *ChainNode) UnsafeResetAll(ctx context.Context) error { func (tn *ChainNode) CreateNodeContainer(ctx context.Context) error { chainCfg := tn.Chain.Config() - cmd := []string{chainCfg.Bin, "start", "--home", tn.HomeDir(), "--x-crisis-skip-assert-invariants"} + + var cmd []string if chainCfg.NoHostMount { cmd = []string{"sh", "-c", fmt.Sprintf("cp -r %s %s_nomnt && %s start --home %s_nomnt --x-crisis-skip-assert-invariants", tn.HomeDir(), tn.HomeDir(), chainCfg.Bin, tn.HomeDir())} + } else { + cmd = []string{chainCfg.Bin, "start", "--home", tn.HomeDir(), "--x-crisis-skip-assert-invariants"} } - imageRef := tn.Image.Ref() - tn.logger(). - Info("Running command", - zap.String("command", strings.Join(cmd, " ")), - zap.String("container", tn.Name()), - zap.String("image", imageRef), - ) - cc, err := tn.DockerClient.ContainerCreate( - ctx, - &container.Config{ - Image: imageRef, - - Entrypoint: []string{}, - Cmd: cmd, - - Hostname: tn.HostName(), - - Labels: map[string]string{dockerutil.CleanupLabel: tn.TestName}, - - ExposedPorts: sentryPorts, - }, - &container.HostConfig{ - Binds: tn.Bind(), - PublishAllPorts: true, - AutoRemove: false, - DNS: []string{}, - }, - &network.NetworkingConfig{ - EndpointsConfig: map[string]*network.EndpointSettings{ - tn.NetworkID: {}, - }, - }, - nil, - tn.Name(), - ) - if err != nil { - return err - } - tn.containerID = cc.ID - return nil + return tn.containerLifecycle.CreateContainer(ctx, tn.TestName, tn.NetworkID, tn.Image, sentryPorts, tn.Bind(), tn.HostName(), cmd) } func (tn *ChainNode) StartContainer(ctx context.Context) error { - if err := dockerutil.StartContainer(ctx, tn.DockerClient, tn.containerID); err != nil { + if err := tn.containerLifecycle.StartContainer(ctx); err != nil { return err } - c, err := tn.DockerClient.ContainerInspect(ctx, tn.containerID) + // Set the host ports once since they will not change after the container has started. + hostPorts, err := tn.containerLifecycle.GetHostPorts(ctx, rpcPort, grpcPort) if err != nil { return err } - - // Set the host ports once since they will not change after the container has started. - tn.hostRPCPort = dockerutil.GetHostPort(c, rpcPort) - tn.hostGRPCPort = dockerutil.GetHostPort(c, grpcPort) - - tn.logger().Info("Cosmos chain node started", zap.String("container", tn.Name()), zap.String("rpc_port", tn.hostRPCPort)) + tn.hostRPCPort, tn.hostGRPCPort = hostPorts[0], hostPorts[1] err = tn.NewClient("tcp://" + tn.hostRPCPort) if err != nil { @@ -967,19 +1005,11 @@ func (tn *ChainNode) StartContainer(ctx context.Context) error { } func (tn *ChainNode) StopContainer(ctx context.Context) error { - timeout := 30 * time.Second - return tn.DockerClient.ContainerStop(ctx, tn.containerID, &timeout) + return tn.containerLifecycle.StopContainer(ctx) } func (tn *ChainNode) RemoveContainer(ctx context.Context) error { - err := tn.DockerClient.ContainerRemove(ctx, tn.containerID, dockertypes.ContainerRemoveOptions{ - Force: true, - RemoveVolumes: true, - }) - if err != nil && !errdefs.IsNotFound(err) { - return fmt.Errorf("remove container %s: %w", tn.Name(), err) - } - return nil + return tn.containerLifecycle.RemoveContainer(ctx) } // InitValidatorFiles creates the node files and signs a genesis transaction @@ -1015,9 +1045,7 @@ func (tn *ChainNode) NodeID(ctx context.Context) (string, error) { // This used to call p2p.LoadNodeKey against the file on the host, // but because we are transitioning to operating on Docker volumes, // we only have to tmjson.Unmarshal the raw content. - - fr := dockerutil.NewFileRetriever(tn.logger(), tn.DockerClient, tn.TestName) - j, err := fr.SingleFileContent(ctx, tn.VolumeName, "config/node_key.json") + j, err := tn.ReadFile(ctx, "config/node_key.json") if err != nil { return "", fmt.Errorf("getting node_key.json content: %w", err) } diff --git a/chain/cosmos/cosmos_chain.go b/chain/cosmos/cosmos_chain.go index ba6f0a6d6..fb91094e7 100644 --- a/chain/cosmos/cosmos_chain.go +++ b/chain/cosmos/cosmos_chain.go @@ -24,6 +24,7 @@ import ( authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" bankTypes "github.com/cosmos/cosmos-sdk/x/bank/types" govtypes "github.com/cosmos/cosmos-sdk/x/gov/types" + paramsutils "github.com/cosmos/cosmos-sdk/x/params/client/utils" chanTypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" dockertypes "github.com/docker/docker/api/types" volumetypes "github.com/docker/docker/api/types/volume" @@ -309,6 +310,9 @@ func (c *CosmosChain) SendIBCTransfer( if err != nil { return tx, fmt.Errorf("failed to get transaction %s: %w", txHash, err) } + if txResp.Code != 0 { + return tx, fmt.Errorf("error in transaction (code: %d): %s", txResp.Code, txResp.RawLog) + } tx.Height = uint64(txResp.Height) tx.TxHash = txHash // In cosmos, user is charged for entire gas requested, not the actual gas used. @@ -369,7 +373,7 @@ func (c *CosmosChain) PushNewWasmClientProposal(ctx context.Context, keyName str } message := wasmtypes.MsgPushNewWasmCode{ Signer: types.MustBech32ifyAddressBytes(c.cfg.Bech32Prefix, authtypes.NewModuleAddress(govtypes.ModuleName)), - Code: content, + Code: content, } msg, err := c.cfg.EncodingConfig.Codec.MarshalInterfaceJSON(&message) prop.Messages = append(prop.Messages, msg) @@ -399,6 +403,16 @@ func (c *CosmosChain) TextProposal(ctx context.Context, keyName string, prop Tex return c.txProposal(txHash) } +// ParamChangeProposal submits a param change proposal to the chain, signed by keyName. +func (c *CosmosChain) ParamChangeProposal(ctx context.Context, keyName string, prop *paramsutils.ParamChangeProposalJSON) (tx TxProposal, _ error) { + txHash, err := c.getFullNode().ParamChangeProposal(ctx, keyName, prop) + if err != nil { + return tx, fmt.Errorf("failed to submit param change proposal: %w", err) + } + + return c.txProposal(txHash) +} + func (c *CosmosChain) txProposal(txHash string) (tx TxProposal, _ error) { txResp, err := c.getTransaction(txHash) if err != nil { @@ -481,6 +495,26 @@ func (c *CosmosChain) GetBalance(ctx context.Context, address string, denom stri return res.Balance.Amount.Int64(), nil } +// AllBalances fetches an account address's balance for all denoms it holds +func (c *CosmosChain) AllBalances(ctx context.Context, address string) (types.Coins, error) { + params := bankTypes.QueryAllBalancesRequest{Address: address} + grpcAddress := c.getFullNode().hostGRPCPort + conn, err := grpc.Dial(grpcAddress, grpc.WithTransportCredentials(insecure.NewCredentials())) + if err != nil { + return nil, err + } + defer conn.Close() + + queryClient := bankTypes.NewQueryClient(conn) + res, err := queryClient.AllBalances(ctx, ¶ms) + + if err != nil { + return nil, err + } + + return res.GetBalances(), nil +} + func (c *CosmosChain) getTransaction(txHash string) (*types.TxResponse, error) { // Retry because sometimes the tx is not committed to state yet. var txResp *types.TxResponse @@ -504,13 +538,15 @@ func (c *CosmosChain) GetGasFeesInNativeDenom(gasPaid int64) int64 { return int64(fees) } -func (c *CosmosChain) UpgradeVersion(ctx context.Context, cli *client.Client, version string) { +func (c *CosmosChain) UpgradeVersion(ctx context.Context, cli *client.Client, containerRepo, version string) { c.cfg.Images[0].Version = version for _, n := range c.Validators { n.Image.Version = version + n.Image.Repository = containerRepo } for _, n := range c.FullNodes { n.Image.Version = version + n.Image.Repository = containerRepo } c.pullImages(ctx, cli) } @@ -543,20 +579,11 @@ func (c *CosmosChain) NewChainNode( networkID string, image ibc.DockerImage, validator bool, + index int, ) (*ChainNode, error) { // Construct the ChainNode first so we can access its name. // The ChainNode's VolumeName cannot be set until after we create the volume. - tn := &ChainNode{ - log: c.log, - - Validator: validator, - - Chain: c, - DockerClient: cli, - NetworkID: networkID, - TestName: testName, - Image: image, - } + tn := NewChainNode(c.log, validator, c, cli, networkID, testName, image, index) v, err := cli.VolumeCreate(ctx, volumetypes.VolumeCreateBody{ Labels: map[string]string{ @@ -605,11 +632,10 @@ func (c *CosmosChain) initializeChainNodes( for i := len(c.Validators); i < c.numValidators; i++ { i := i eg.Go(func() error { - val, err := c.NewChainNode(egCtx, testName, cli, networkID, image, true) + val, err := c.NewChainNode(egCtx, testName, cli, networkID, image, true, i) if err != nil { return err } - val.Index = i newVals[i] = val return nil }) @@ -617,11 +643,10 @@ func (c *CosmosChain) initializeChainNodes( for i := len(c.FullNodes); i < c.numFullNodes; i++ { i := i eg.Go(func() error { - fn, err := c.NewChainNode(egCtx, testName, cli, networkID, image, false) + fn, err := c.NewChainNode(egCtx, testName, cli, networkID, image, false, i) if err != nil { return err } - fn.Index = i newFullNodes[i] = fn return nil }) diff --git a/chain/cosmos/query.go b/chain/cosmos/query.go index 8ef266b4a..b5a7ceb82 100644 --- a/chain/cosmos/query.go +++ b/chain/cosmos/query.go @@ -4,9 +4,9 @@ import ( "context" "fmt" + tmtypes "github.com/cometbft/cometbft/rpc/core/types" codectypes "github.com/cosmos/cosmos-sdk/codec/types" sdk "github.com/cosmos/cosmos-sdk/types" - tmtypes "github.com/tendermint/tendermint/rpc/core/types" ) type blockClient interface { diff --git a/chain/internal/tendermint/events.go b/chain/internal/tendermint/events.go index bb9c086a4..f05952cfe 100644 --- a/chain/internal/tendermint/events.go +++ b/chain/internal/tendermint/events.go @@ -3,7 +3,7 @@ package tendermint import ( "encoding/base64" - abcitypes "github.com/tendermint/tendermint/abci/types" + abcitypes "github.com/cometbft/cometbft/abci/types" ) // AttributeValue returns an event attribute value given the eventType and attribute key tuple. diff --git a/chain/internal/tendermint/events_test.go b/chain/internal/tendermint/events_test.go index 1f90f0bdd..558723165 100644 --- a/chain/internal/tendermint/events_test.go +++ b/chain/internal/tendermint/events_test.go @@ -3,8 +3,8 @@ package tendermint import ( "testing" + abcitypes "github.com/cometbft/cometbft/abci/types" "github.com/stretchr/testify/require" - abcitypes "github.com/tendermint/tendermint/abci/types" ) func TestAttributeValue(t *testing.T) { diff --git a/chain/internal/tendermint/tendermint_node.go b/chain/internal/tendermint/tendermint_node.go index 0948ca9c2..fe42b4f7f 100644 --- a/chain/internal/tendermint/tendermint_node.go +++ b/chain/internal/tendermint/tendermint_node.go @@ -9,19 +9,17 @@ import ( "time" "github.com/avast/retry-go/v4" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" + tmjson "github.com/cometbft/cometbft/libs/json" + "github.com/cometbft/cometbft/p2p" + rpcclient "github.com/cometbft/cometbft/rpc/client" + rpchttp "github.com/cometbft/cometbft/rpc/client/http" + libclient "github.com/cometbft/cometbft/rpc/jsonrpc/client" dockerclient "github.com/docker/docker/client" "github.com/docker/go-connections/nat" "github.com/hashicorp/go-version" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/internal/dockerutil" "github.com/strangelove-ventures/interchaintest/v7/testutil" - tmjson "github.com/tendermint/tendermint/libs/json" - "github.com/tendermint/tendermint/p2p" - rpcclient "github.com/tendermint/tendermint/rpc/client" - rpchttp "github.com/tendermint/tendermint/rpc/client/http" - libclient "github.com/tendermint/tendermint/rpc/jsonrpc/client" "go.uber.org/zap" ) @@ -38,7 +36,16 @@ type TendermintNode struct { TestName string Image ibc.DockerImage - containerID string + containerLifecycle *dockerutil.ContainerLifecycle +} + +func NewTendermintNode(log *zap.Logger, i int, c ibc.Chain, dockerClient *dockerclient.Client, networkID string, testName string, image ibc.DockerImage) *TendermintNode { + tn := &TendermintNode{Log: log, Index: i, Chain: c, + DockerClient: dockerClient, NetworkID: networkID, TestName: testName, Image: image} + + tn.containerLifecycle = dockerutil.NewContainerLifecycle(log, dockerClient, tn.Name()) + + return tn } // TendermintNodes is a collection of TendermintNode @@ -178,7 +185,7 @@ func (tn *TendermintNode) SetConfigAndPeers(ctx context.Context, peers string) e } // Tenderment deprecate snake_case in config for hyphen-case in v0.34.1 -// https://github.com/tendermint/tendermint/blob/main/CHANGELOG.md#v0341 +// https://github.com/cometbft/cometbft/blob/main/CHANGELOG.md#v0341 func (tn *TendermintNode) GetConfigSeparator() (string, error) { var sep = "_" @@ -218,62 +225,26 @@ func (tn *TendermintNode) CreateNodeContainer(ctx context.Context, additionalFla chainCfg := tn.Chain.Config() cmd := []string{chainCfg.Bin, "start", "--home", tn.HomeDir()} cmd = append(cmd, additionalFlags...) - fmt.Printf("{%s} -> '%s'\n", tn.Name(), strings.Join(cmd, " ")) - cc, err := tn.DockerClient.ContainerCreate( - ctx, - &container.Config{ - Image: tn.Image.Ref(), - - Entrypoint: []string{}, - Cmd: cmd, - - Hostname: tn.HostName(), - - Labels: map[string]string{dockerutil.CleanupLabel: tn.TestName}, - - ExposedPorts: sentryPorts, - }, - &container.HostConfig{ - Binds: tn.Bind(), - PublishAllPorts: true, - AutoRemove: false, - DNS: []string{}, - }, - &network.NetworkingConfig{ - EndpointsConfig: map[string]*network.EndpointSettings{ - tn.NetworkID: {}, - }, - }, - nil, - tn.Name(), - ) - if err != nil { - return err - } - tn.containerID = cc.ID - return nil + return tn.containerLifecycle.CreateContainer(ctx, tn.TestName, tn.NetworkID, tn.Image, sentryPorts, tn.Bind(), tn.HostName(), cmd) } func (tn *TendermintNode) StopContainer(ctx context.Context) error { - timeout := 30 * time.Second - return tn.DockerClient.ContainerStop(ctx, tn.containerID, &timeout) + return tn.containerLifecycle.StopContainer(ctx) } func (tn *TendermintNode) StartContainer(ctx context.Context) error { - if err := dockerutil.StartContainer(ctx, tn.DockerClient, tn.containerID); err != nil { + if err := tn.containerLifecycle.StartContainer(ctx); err != nil { return err } - c, err := tn.DockerClient.ContainerInspect(ctx, tn.containerID) + hostPorts, err := tn.containerLifecycle.GetHostPorts(ctx, rpcPort) if err != nil { return err } + rpcPort := hostPorts[0] - port := dockerutil.GetHostPort(c, rpcPort) - fmt.Printf("{%s} RPC => %s\n", tn.Name(), port) - - err = tn.NewClient(fmt.Sprintf("tcp://%s", port)) + err = tn.NewClient(fmt.Sprintf("tcp://%s", rpcPort)) if err != nil { return err } diff --git a/chain/penumbra/penumbra_app_node.go b/chain/penumbra/penumbra_app_node.go index e9f445d69..ba0794a5b 100644 --- a/chain/penumbra/penumbra_app_node.go +++ b/chain/penumbra/penumbra_app_node.go @@ -7,10 +7,7 @@ import ( "fmt" "path/filepath" "strings" - "time" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" "github.com/docker/docker/client" "github.com/docker/go-connections/nat" "github.com/strangelove-ventures/interchaintest/v7/ibc" @@ -29,11 +26,13 @@ type PenumbraAppNode struct { DockerClient *client.Client Image ibc.DockerImage - containerID string + containerLifecycle *dockerutil.ContainerLifecycle // Set during StartContainer. hostRPCPort string hostGRPCPort string + + // preStartListeners dockerutil.Listeners } const ( @@ -104,7 +103,7 @@ func (p *PenumbraAppNode) InitValidatorFile(ctx context.Context, valKeyName stri } func (p *PenumbraAppNode) ValidatorDefinitionTemplateFilePathContainer() string { - return filepath.Join(p.HomeDir(), "validator.json") + return filepath.Join(p.HomeDir(), "validator.toml") } func (p *PenumbraAppNode) ValidatorsInputFileContainer() string { @@ -214,61 +213,25 @@ func (p *PenumbraAppNode) SendIBCTransfer( func (p *PenumbraAppNode) CreateNodeContainer(ctx context.Context) error { cmd := []string{"pd", "start", "--host", "0.0.0.0", "--home", p.HomeDir()} - fmt.Printf("{%s} -> '%s'\n", p.Name(), strings.Join(cmd, " ")) - - cc, err := p.DockerClient.ContainerCreate( - ctx, - &container.Config{ - Image: p.Image.Ref(), - - Entrypoint: []string{}, - Cmd: cmd, - - Hostname: p.HostName(), - User: p.Image.UidGid, - - Labels: map[string]string{dockerutil.CleanupLabel: p.TestName}, - - ExposedPorts: exposedPorts, - }, - &container.HostConfig{ - Binds: p.Bind(), - PublishAllPorts: true, - AutoRemove: false, - DNS: []string{}, - }, - &network.NetworkingConfig{ - EndpointsConfig: map[string]*network.EndpointSettings{ - p.NetworkID: {}, - }, - }, - nil, - p.Name(), - ) - if err != nil { - return err - } - p.containerID = cc.ID - return nil + + return p.containerLifecycle.CreateContainer(ctx, p.TestName, p.NetworkID, p.Image, exposedPorts, p.Bind(), p.HostName(), cmd) } func (p *PenumbraAppNode) StopContainer(ctx context.Context) error { - timeout := 30 * time.Second - return p.DockerClient.ContainerStop(ctx, p.containerID, &timeout) + return p.containerLifecycle.StopContainer(ctx) } func (p *PenumbraAppNode) StartContainer(ctx context.Context) error { - if err := dockerutil.StartContainer(ctx, p.DockerClient, p.containerID); err != nil { + if err := p.containerLifecycle.StartContainer(ctx); err != nil { return err } - c, err := p.DockerClient.ContainerInspect(ctx, p.containerID) + hostPorts, err := p.containerLifecycle.GetHostPorts(ctx, rpcPort, grpcPort) if err != nil { return err } - p.hostRPCPort = dockerutil.GetHostPort(c, rpcPort) - p.hostGRPCPort = dockerutil.GetHostPort(c, grpcPort) + p.hostRPCPort, p.hostGRPCPort = hostPorts[0], hostPorts[1] return nil } diff --git a/chain/penumbra/penumbra_chain.go b/chain/penumbra/penumbra_chain.go index b9d016049..69b559071 100644 --- a/chain/penumbra/penumbra_chain.go +++ b/chain/penumbra/penumbra_chain.go @@ -9,6 +9,7 @@ import ( "strconv" "strings" + "github.com/BurntSushi/toml" "github.com/cosmos/cosmos-sdk/codec" codectypes "github.com/cosmos/cosmos-sdk/codec/types" cryptocodec "github.com/cosmos/cosmos-sdk/crypto/codec" @@ -17,6 +18,7 @@ import ( "github.com/docker/docker/api/types" volumetypes "github.com/docker/docker/api/types/volume" "github.com/docker/docker/client" + dockerclient "github.com/docker/docker/client" "github.com/strangelove-ventures/interchaintest/v7/chain/internal/tendermint" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/internal/dockerutil" @@ -43,18 +45,25 @@ type PenumbraChain struct { } type PenumbraValidatorDefinition struct { - IdentityKey string `json:"identity_key"` - ConsensusKey string `json:"consensus_key"` - Name string `json:"name"` - Website string `json:"website"` - Description string `json:"description"` - FundingStreams []PenumbraValidatorFundingStream `json:"funding_streams"` - SequenceNumber int64 `json:"sequence_number"` + SequenceNumber int `json:"sequence_number" toml:"sequence_number"` + Enabled bool `json:"enabled" toml:"enabled"` + Name string `json:"name" toml:"name"` + Website string `json:"website" toml:"website"` + Description string `json:"description" toml:"description"` + IdentityKey string `json:"identity_key" toml:"identity_key"` + GovernanceKey string `json:"governance_key" toml:"governance_key"` + ConsensusKey PenumbraConsensusKey `json:"consensus_key" toml:"consensus_key"` + FundingStreams []PenumbraValidatorFundingStream `json:"funding_streams" toml:"funding_stream"` +} + +type PenumbraConsensusKey struct { + Type string `json:"type" toml:"type"` + Value string `json:"value" toml:"value"` } type PenumbraValidatorFundingStream struct { - Address string `json:"address"` - RateBPS int64 `json:"rate_bps"` + Address string `json:"address" toml:"address"` + RateBPS int64 `json:"rate_bps" toml:"rate_bps"` } type PenumbraGenesisAppStateAllocation struct { @@ -238,6 +247,78 @@ func (c *PenumbraChain) GetGasFeesInNativeDenom(gasPaid int64) int64 { return int64(fees) } +// NewChainNode returns a penumbra chain node with tendermint and penumbra nodes +// with docker volumes created. +func (c *PenumbraChain) NewChainNode( + ctx context.Context, + i int, + dockerClient *dockerclient.Client, + networkID string, + testName string, + tendermintImage ibc.DockerImage, + penumbraImage ibc.DockerImage, +) (PenumbraNode, error) { + tn := tendermint.NewTendermintNode(c.log, i, c, dockerClient, networkID, testName, tendermintImage) + + tv, err := dockerClient.VolumeCreate(ctx, volumetypes.VolumeCreateBody{ + Labels: map[string]string{ + dockerutil.CleanupLabel: testName, + + dockerutil.NodeOwnerLabel: tn.Name(), + }, + }) + if err != nil { + return PenumbraNode{}, fmt.Errorf("creating tendermint volume: %w", err) + } + tn.VolumeName = tv.Name + if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ + Log: c.log, + + Client: dockerClient, + + VolumeName: tn.VolumeName, + ImageRef: tn.Image.Ref(), + TestName: tn.TestName, + UidGid: tn.Image.UidGid, + }); err != nil { + return PenumbraNode{}, fmt.Errorf("set tendermint volume owner: %w", err) + } + + pn := &PenumbraAppNode{log: c.log, Index: i, Chain: c, + DockerClient: dockerClient, NetworkID: networkID, TestName: testName, Image: penumbraImage} + + pn.containerLifecycle = dockerutil.NewContainerLifecycle(c.log, dockerClient, pn.Name()) + + pv, err := dockerClient.VolumeCreate(ctx, volumetypes.VolumeCreateBody{ + Labels: map[string]string{ + dockerutil.CleanupLabel: testName, + + dockerutil.NodeOwnerLabel: pn.Name(), + }, + }) + if err != nil { + return PenumbraNode{}, fmt.Errorf("creating penumbra volume: %w", err) + } + pn.VolumeName = pv.Name + if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ + Log: c.log, + + Client: dockerClient, + + VolumeName: pn.VolumeName, + ImageRef: pn.Image.Ref(), + TestName: pn.TestName, + UidGid: tn.Image.UidGid, + }); err != nil { + return PenumbraNode{}, fmt.Errorf("set penumbra volume owner: %w", err) + } + + return PenumbraNode{ + TendermintNode: tn, + PenumbraAppNode: pn, + }, nil +} + // creates the test node objects required for bootstrapping tests func (c *PenumbraChain) initializeChainNodes( ctx context.Context, @@ -266,60 +347,11 @@ func (c *PenumbraChain) initializeChainNodes( } } for i := 0; i < count; i++ { - tn := &tendermint.TendermintNode{Log: c.log, Index: i, Chain: c, - DockerClient: cli, NetworkID: networkID, TestName: testName, Image: chainCfg.Images[0]} - - tv, err := cli.VolumeCreate(ctx, volumetypes.VolumeCreateBody{ - Labels: map[string]string{ - dockerutil.CleanupLabel: testName, - - dockerutil.NodeOwnerLabel: tn.Name(), - }, - }) + pn, err := c.NewChainNode(ctx, i, cli, networkID, testName, chainCfg.Images[0], chainCfg.Images[1]) if err != nil { - return fmt.Errorf("creating tendermint volume: %w", err) - } - tn.VolumeName = tv.Name - if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ - Log: c.log, - - Client: cli, - - VolumeName: tn.VolumeName, - ImageRef: tn.Image.Ref(), - TestName: tn.TestName, - UidGid: tn.Image.UidGid, - }); err != nil { - return fmt.Errorf("set tendermint volume owner: %w", err) - } - - pn := &PenumbraAppNode{log: c.log, Index: i, Chain: c, - DockerClient: cli, NetworkID: networkID, TestName: testName, Image: chainCfg.Images[1]} - pv, err := cli.VolumeCreate(ctx, volumetypes.VolumeCreateBody{ - Labels: map[string]string{ - dockerutil.CleanupLabel: testName, - - dockerutil.NodeOwnerLabel: pn.Name(), - }, - }) - if err != nil { - return fmt.Errorf("creating penumbra volume: %w", err) - } - pn.VolumeName = pv.Name - if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ - Log: c.log, - - Client: cli, - - VolumeName: pn.VolumeName, - ImageRef: pn.Image.Ref(), - TestName: pn.TestName, - UidGid: tn.Image.UidGid, - }); err != nil { - return fmt.Errorf("set penumbra volume owner: %w", err) + return err } - - penumbraNodes = append(penumbraNodes, PenumbraNode{TendermintNode: tn, PenumbraAppNode: pn}) + penumbraNodes = append(penumbraNodes, pn) } c.PenumbraNodes = penumbraNodes @@ -382,15 +414,17 @@ func (c *PenumbraChain) Start(testName string, ctx context.Context, additionalGe // In all likelihood, the PenumbraAppNode and TendermintNode have the same DockerClient and TestName, // but instantiate a new FileRetriever to be defensive. fr = dockerutil.NewFileRetriever(c.log, v.PenumbraAppNode.DockerClient, v.PenumbraAppNode.TestName) - validatorTemplateDefinitionFileBytes, err := fr.SingleFileContent(egCtx, v.PenumbraAppNode.VolumeName, "validator.json") + validatorTemplateDefinitionFileBytes, err := fr.SingleFileContent(egCtx, v.PenumbraAppNode.VolumeName, "validator.toml") if err != nil { return fmt.Errorf("error reading validator definition template file: %v", err) } validatorTemplateDefinition := PenumbraValidatorDefinition{} - if err := json.Unmarshal(validatorTemplateDefinitionFileBytes, &validatorTemplateDefinition); err != nil { + if err := toml.Unmarshal(validatorTemplateDefinitionFileBytes, &validatorTemplateDefinition); err != nil { return fmt.Errorf("error unmarshaling validator definition template key: %v", err) } - validatorTemplateDefinition.ConsensusKey = privValKey.PubKey.Value + validatorTemplateDefinition.SequenceNumber = i + validatorTemplateDefinition.Enabled = true + validatorTemplateDefinition.ConsensusKey.Value = privValKey.PubKey.Value validatorTemplateDefinition.Name = fmt.Sprintf("validator-%d", i) validatorTemplateDefinition.Description = fmt.Sprintf("validator-%d description", i) validatorTemplateDefinition.Website = fmt.Sprintf("https://validator-%d", i) diff --git a/chain/polkadot/parachain_node.go b/chain/polkadot/parachain_node.go index 68da045aa..ecc9d4962 100644 --- a/chain/polkadot/parachain_node.go +++ b/chain/polkadot/parachain_node.go @@ -6,22 +6,19 @@ import ( "encoding/json" "fmt" "path/filepath" - "strings" - "time" "strconv" + "strings" "github.com/avast/retry-go/v4" - gsrpc "github.com/misko9/go-substrate-rpc-client/v4" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" + sdktypes "github.com/cosmos/cosmos-sdk/types" "github.com/docker/docker/client" "github.com/icza/dyno" p2pcrypto "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/peer" + gsrpc "github.com/misko9/go-substrate-rpc-client/v4" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/internal/dockerutil" "go.uber.org/zap" - sdktypes "github.com/cosmos/cosmos-sdk/types" ) // Increase parachain scaled wallet amounts relative to cosmos @@ -33,11 +30,11 @@ type ParachainNode struct { TestName string Index int - NetworkID string - containerID string - VolumeName string - DockerClient *client.Client - Image ibc.DockerImage + NetworkID string + containerLifecycle *dockerutil.ContainerLifecycle + VolumeName string + DockerClient *client.Client + Image ibc.DockerImage Chain ibc.Chain Bin string @@ -49,6 +46,8 @@ type ParachainNode struct { api *gsrpc.SubstrateAPI hostWsPort string hostRpcPort string + + // preStartListeners dockerutil.Listeners } type ParachainNodes []*ParachainNode @@ -258,68 +257,28 @@ func (pn *ParachainNode) CreateNodeContainer(ctx context.Context) error { cmd = append(cmd, pn.Flags...) cmd = append(cmd, "--", fmt.Sprintf("--chain=%s", pn.RawRelayChainSpecFilePathFull())) cmd = append(cmd, pn.RelayChainFlags...) - pn.logger(). - Info("Running command", - zap.String("command", strings.Join(cmd, " ")), - zap.String("container", pn.Name()), - ) - cc, err := pn.DockerClient.ContainerCreate( - ctx, - &container.Config{ - Image: pn.Image.Ref(), - - Entrypoint: []string{}, - Cmd: cmd, - - Hostname: pn.HostName(), - User: pn.Image.UidGid, - - Labels: map[string]string{dockerutil.CleanupLabel: pn.TestName}, - - ExposedPorts: exposedPorts, - }, - &container.HostConfig{ - Binds: pn.Bind(), - PublishAllPorts: true, - AutoRemove: false, - DNS: []string{}, - }, - &network.NetworkingConfig{ - EndpointsConfig: map[string]*network.EndpointSettings{ - pn.NetworkID: {}, - }, - }, - nil, - pn.Name(), - ) - if err != nil { - return err - } - pn.containerID = cc.ID - return nil + return pn.containerLifecycle.CreateContainer(ctx, pn.TestName, pn.NetworkID, pn.Image, exposedPorts, pn.Bind(), pn.HostName(), cmd) } // StopContainer stops the relay chain node container, waiting at most 30 seconds. func (pn *ParachainNode) StopContainer(ctx context.Context) error { - timeout := 30 * time.Second - return pn.DockerClient.ContainerStop(ctx, pn.containerID, &timeout) + return pn.containerLifecycle.StopContainer(ctx) } // StartContainer starts the container after it is built by CreateNodeContainer. func (pn *ParachainNode) StartContainer(ctx context.Context) error { - if err := dockerutil.StartContainer(ctx, pn.DockerClient, pn.containerID); err != nil { + if err := pn.containerLifecycle.StartContainer(ctx); err != nil { return err } - c, err := pn.DockerClient.ContainerInspect(ctx, pn.containerID) + hostPorts, err := pn.containerLifecycle.GetHostPorts(ctx, wsPort, rpcPort) if err != nil { return err } // Set the host ports once since they will not change after the container has started. - pn.hostWsPort = dockerutil.GetHostPort(c, wsPort) - pn.hostRpcPort = dockerutil.GetHostPort(c, rpcPort) + pn.hostWsPort, pn.hostRpcPort = hostPorts[0], hostPorts[1] explorerUrl := fmt.Sprintf("\033[4;34mhttps://polkadot.js.org/apps?rpc=ws://%s#/explorer\033[0m", strings.Replace(pn.hostWsPort, "localhost", "127.0.0.1", 1)) @@ -385,12 +344,12 @@ func (pn *ParachainNode) SendFunds(ctx context.Context, keyName string, amount i // SendIbcFunds sends funds to a wallet from a user account. func (pn *ParachainNode) SendIbcFunds( - ctx context.Context, + ctx context.Context, channelID string, - keyName string, + keyName string, amount ibc.WalletAmount, options ibc.TransferOptions, - ) error { +) error { kp, err := pn.Chain.(*PolkadotChain).GetKeyringPair(keyName) if err != nil { return err @@ -414,9 +373,9 @@ func (pn *ParachainNode) SendIbcFunds( // MintFunds mints an asset for a user on parachain, keyName must be the owner of the asset func (pn *ParachainNode) MintFunds( - keyName string, + keyName string, amount ibc.WalletAmount, - ) error { +) error { kp, err := pn.Chain.(*PolkadotChain).GetKeyringPair(keyName) if err != nil { return err diff --git a/chain/polkadot/polkadot_chain.go b/chain/polkadot/polkadot_chain.go index abc22d899..d8f70d2ca 100644 --- a/chain/polkadot/polkadot_chain.go +++ b/chain/polkadot/polkadot_chain.go @@ -2,29 +2,30 @@ package polkadot import ( "context" + "crypto/rand" crand "crypto/rand" "encoding/json" "fmt" "io" - "math/rand" "strings" "github.com/99designs/keyring" "github.com/StirlingMarketingGroup/go-namecase" - "github.com/misko9/go-substrate-rpc-client/v4/signature" - gstypes "github.com/misko9/go-substrate-rpc-client/v4/types" + sdktypes "github.com/cosmos/cosmos-sdk/types" "github.com/cosmos/go-bip39" "github.com/docker/docker/api/types" volumetypes "github.com/docker/docker/api/types/volume" "github.com/docker/docker/client" + dockerclient "github.com/docker/docker/client" "github.com/icza/dyno" p2pcrypto "github.com/libp2p/go-libp2p-core/crypto" + "github.com/misko9/go-substrate-rpc-client/v4/signature" + gstypes "github.com/misko9/go-substrate-rpc-client/v4/types" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/internal/blockdb" "github.com/strangelove-ventures/interchaintest/v7/internal/dockerutil" "go.uber.org/zap" "golang.org/x/sync/errgroup" - sdktypes "github.com/cosmos/cosmos-sdk/types" ) // Increase polkadot scaled wallet amounts relative to cosmos @@ -93,6 +94,148 @@ func (c *PolkadotChain) Config() ibc.ChainConfig { return c.cfg } +func (c *PolkadotChain) NewRelayChainNode( + ctx context.Context, + i int, + chain *PolkadotChain, + dockerClient *dockerclient.Client, + networkID string, + testName string, + image ibc.DockerImage, +) (*RelayChainNode, error) { + seed := make([]byte, 32) + if _, err := rand.Read(seed); err != nil { + return nil, err + } + + nodeKey, _, err := p2pcrypto.GenerateEd25519Key(crand.Reader) + if err != nil { + return nil, fmt.Errorf("error generating node key: %w", err) + } + + nameCased := namecase.New().NameCase(IndexedName[i]) + + ed25519PrivKey, err := DeriveEd25519FromName(nameCased) + if err != nil { + return nil, err + } + + accountKeyName := IndexedName[i] + accountKeyUri := IndexedUri[i] + stashKeyName := accountKeyName + "stash" + stashKeyUri := accountKeyUri + "//stash" + + if err := c.RecoverKey(ctx, accountKeyName, accountKeyUri); err != nil { + return nil, err + } + + if err := c.RecoverKey(ctx, stashKeyName, stashKeyUri); err != nil { + return nil, err + } + + ecdsaPrivKey, err := DeriveSecp256k1FromName(nameCased) + if err != nil { + return nil, fmt.Errorf("error generating secp256k1 private key: %w", err) + } + + pn := &RelayChainNode{ + log: c.log, + Index: i, + Chain: c, + DockerClient: dockerClient, + NetworkID: networkID, + TestName: testName, + Image: image, + NodeKey: nodeKey, + Ed25519PrivateKey: ed25519PrivKey, + AccountKeyName: accountKeyName, + StashKeyName: stashKeyName, + EcdsaPrivateKey: *ecdsaPrivKey, + } + + pn.containerLifecycle = dockerutil.NewContainerLifecycle(c.log, dockerClient, pn.Name()) + + v, err := dockerClient.VolumeCreate(ctx, volumetypes.VolumeCreateBody{ + Labels: map[string]string{ + dockerutil.CleanupLabel: testName, + + dockerutil.NodeOwnerLabel: pn.Name(), + }, + }) + if err != nil { + return nil, fmt.Errorf("creating volume for chain node: %w", err) + } + pn.VolumeName = v.Name + + if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ + Log: c.log, + Client: dockerClient, + VolumeName: v.Name, + ImageRef: image.Ref(), + TestName: testName, + UidGid: image.UidGid, + }); err != nil { + return nil, fmt.Errorf("set volume owner: %w", err) + } + + return pn, nil +} + +func (c *PolkadotChain) NewParachainNode( + ctx context.Context, + i int, + dockerClient *dockerclient.Client, + networkID string, + testName string, + parachainConfig ParachainConfig, +) (*ParachainNode, error) { + nodeKey, _, err := p2pcrypto.GenerateEd25519Key(crand.Reader) + if err != nil { + return nil, fmt.Errorf("error generating node key: %w", err) + } + pn := &ParachainNode{ + log: c.log, + Index: i, + Chain: c, + DockerClient: dockerClient, + NetworkID: networkID, + TestName: testName, + NodeKey: nodeKey, + Image: parachainConfig.Image, + Bin: parachainConfig.Bin, + ChainID: parachainConfig.ChainID, + Flags: parachainConfig.Flags, + RelayChainFlags: parachainConfig.RelayChainFlags, + } + + pn.containerLifecycle = dockerutil.NewContainerLifecycle(c.log, dockerClient, pn.Name()) + + v, err := dockerClient.VolumeCreate(ctx, volumetypes.VolumeCreateBody{ + Labels: map[string]string{ + dockerutil.CleanupLabel: testName, + + dockerutil.NodeOwnerLabel: pn.Name(), + }, + }) + if err != nil { + return nil, fmt.Errorf("creating volume for chain node: %w", err) + } + pn.VolumeName = v.Name + + if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ + Log: c.log, + Client: dockerClient, + VolumeName: v.Name, + ImageRef: parachainConfig.Image.Ref(), + TestName: testName, + UidGid: parachainConfig.Image.UidGid, + }); err != nil { + return nil, fmt.Errorf("set volume owner: %w", err) + } + + return pn, nil +} + // Initialize initializes node structs so that things like initializing keys can be done before starting the chain. // Implements Chain interface. func (c *PolkadotChain) Initialize(ctx context.Context, testName string, cli *client.Client, networkID string) error { @@ -121,121 +264,19 @@ func (c *PolkadotChain) Initialize(ctx context.Context, testName string, cli *cl } } for i := 0; i < c.numRelayChainNodes; i++ { - seed := make([]byte, 32) - rand.Read(seed) - - nodeKey, _, err := p2pcrypto.GenerateEd25519Key(crand.Reader) - if err != nil { - return fmt.Errorf("error generating node key: %w", err) - } - - nameCased := namecase.New().NameCase(IndexedName[i]) - - ed25519PrivKey, err := DeriveEd25519FromName(nameCased) - if err != nil { - return err - } - - accountKeyName := IndexedName[i] - accountKeyUri := IndexedUri[i] - stashKeyName := accountKeyName + "stash" - stashKeyUri := accountKeyUri + "//stash" - err = c.RecoverKey(ctx, accountKeyName, accountKeyUri) - if err != nil { - return err - } - err = c.RecoverKey(ctx, stashKeyName, stashKeyUri) + pn, err := c.NewRelayChainNode(ctx, i, c, cli, networkID, testName, chainCfg.Images[0]) if err != nil { return err } - - ecdsaPrivKey, err := DeriveSecp256k1FromName(nameCased) - if err != nil { - return fmt.Errorf("error generating secp256k1 private key: %w", err) - } - pn := &RelayChainNode{ - log: c.log, - Index: i, - Chain: c, - DockerClient: cli, - NetworkID: networkID, - TestName: testName, - Image: chainCfg.Images[0], - NodeKey: nodeKey, - Ed25519PrivateKey: ed25519PrivKey, - AccountKeyName: accountKeyName, - StashKeyName: stashKeyName, - EcdsaPrivateKey: *ecdsaPrivKey, - } - - v, err := cli.VolumeCreate(ctx, volumetypes.VolumeCreateBody{ - Labels: map[string]string{ - dockerutil.CleanupLabel: testName, - - dockerutil.NodeOwnerLabel: pn.Name(), - }, - }) - if err != nil { - return fmt.Errorf("creating volume for chain node: %w", err) - } - pn.VolumeName = v.Name - - if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ - Log: c.log, - Client: cli, - VolumeName: v.Name, - ImageRef: chainCfg.Images[0].Ref(), - TestName: testName, - UidGid: chainCfg.Images[0].UidGid, - }); err != nil { - return fmt.Errorf("set volume owner: %w", err) - } - relayChainNodes = append(relayChainNodes, pn) } c.RelayChainNodes = relayChainNodes - for _, parachainConfig := range c.parachainConfig { + for _, pc := range c.parachainConfig { parachainNodes := []*ParachainNode{} - for i := 0; i < parachainConfig.NumNodes; i++ { - nodeKey, _, err := p2pcrypto.GenerateEd25519Key(crand.Reader) - if err != nil { - return fmt.Errorf("error generating node key: %w", err) - } - pn := &ParachainNode{ - log: c.log, - Index: i, - Chain: c, - DockerClient: cli, - NetworkID: networkID, - TestName: testName, - NodeKey: nodeKey, - Image: parachainConfig.Image, - Bin: parachainConfig.Bin, - ChainID: parachainConfig.ChainID, - Flags: parachainConfig.Flags, - RelayChainFlags: parachainConfig.RelayChainFlags, - } - v, err := cli.VolumeCreate(ctx, volumetypes.VolumeCreateBody{ - Labels: map[string]string{ - dockerutil.CleanupLabel: testName, - - dockerutil.NodeOwnerLabel: pn.Name(), - }, - }) + for i := 0; i < pc.NumNodes; i++ { + pn, err := c.NewParachainNode(ctx, i, cli, networkID, testName, pc) if err != nil { - return fmt.Errorf("creating volume for chain node: %w", err) - } - pn.VolumeName = v.Name - - if err := dockerutil.SetVolumeOwner(ctx, dockerutil.VolumeOwnerOptions{ - Log: c.log, - Client: cli, - VolumeName: v.Name, - ImageRef: parachainConfig.Image.Ref(), - TestName: testName, - UidGid: parachainConfig.Image.UidGid, - }); err != nil { - return fmt.Errorf("set volume owner: %w", err) + return err } parachainNodes = append(parachainNodes, pn) } @@ -810,4 +851,4 @@ func (c *PolkadotChain) GetIbcBalance(ctx context.Context, address string) (sdkt // MintFunds mints an asset for a user on parachain, keyName must be the owner of the asset func (c *PolkadotChain) MintFunds(keyName string, amount ibc.WalletAmount) error { return c.ParachainNodes[0][0].MintFunds(keyName, amount) -} \ No newline at end of file +} diff --git a/chain/polkadot/relay_chain_node.go b/chain/polkadot/relay_chain_node.go index fd55be834..d5341392c 100644 --- a/chain/polkadot/relay_chain_node.go +++ b/chain/polkadot/relay_chain_node.go @@ -9,11 +9,9 @@ import ( "time" "github.com/avast/retry-go/v4" - gsrpc "github.com/misko9/go-substrate-rpc-client/v4" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" "github.com/docker/docker/client" "github.com/docker/go-connections/nat" + gsrpc "github.com/misko9/go-substrate-rpc-client/v4" p2pCrypto "github.com/libp2p/go-libp2p-core/crypto" "github.com/libp2p/go-libp2p-core/peer" @@ -30,11 +28,11 @@ type RelayChainNode struct { TestName string Index int - NetworkID string - containerID string - VolumeName string - DockerClient *client.Client - Image ibc.DockerImage + NetworkID string + containerLifecycle *dockerutil.ContainerLifecycle + VolumeName string + DockerClient *client.Client + Image ibc.DockerImage Chain ibc.Chain NodeKey p2pCrypto.PrivKey @@ -46,6 +44,8 @@ type RelayChainNode struct { api *gsrpc.SubstrateAPI hostWsPort string hostRpcPort string + + // preStartListeners dockerutil.Listeners } type RelayChainNodes []*RelayChainNode @@ -217,76 +217,35 @@ func (p *RelayChainNode) CreateNodeContainer(ctx context.Context) error { "--unsafe-ws-external", "--unsafe-rpc-external", "--prometheus-external", - "--enable-offchain-indexing=true", - "--rpc-methods=unsafe", - "--pruning=archive", + // "--enable-offchain-indexing=true", + // "--rpc-methods=unsafe", + // "--pruning=archive", fmt.Sprintf("--prometheus-port=%s", strings.Split(prometheusPort, "/")[0]), fmt.Sprintf("--listen-addr=/ip4/0.0.0.0/tcp/%s", strings.Split(nodePort, "/")[0]), fmt.Sprintf("--public-addr=%s", multiAddress), "--base-path", p.NodeHome(), } - p.logger(). - Info("Running command", - zap.String("command", strings.Join(cmd, " ")), - zap.String("container", p.Name()), - ) - - cc, err := p.DockerClient.ContainerCreate( - ctx, - &container.Config{ - Image: p.Image.Ref(), - - Entrypoint: []string{}, - Cmd: cmd, - - Hostname: p.HostName(), - User: p.Image.UidGid, - - Labels: map[string]string{dockerutil.CleanupLabel: p.TestName}, - - ExposedPorts: exposedPorts, - }, - &container.HostConfig{ - Binds: p.Bind(), - PublishAllPorts: true, - AutoRemove: false, - DNS: []string{}, - }, - &network.NetworkingConfig{ - EndpointsConfig: map[string]*network.EndpointSettings{ - p.NetworkID: {}, - }, - }, - nil, - p.Name(), - ) - if err != nil { - return err - } - p.containerID = cc.ID - return nil + return p.containerLifecycle.CreateContainer(ctx, p.TestName, p.NetworkID, p.Image, exposedPorts, p.Bind(), p.HostName(), cmd) } // StopContainer stops the relay chain node container, waiting at most 30 seconds. func (p *RelayChainNode) StopContainer(ctx context.Context) error { - timeout := 30 * time.Second - return p.DockerClient.ContainerStop(ctx, p.containerID, &timeout) + return p.containerLifecycle.StopContainer(ctx) } // StartContainer starts the container after it is built by CreateNodeContainer. func (p *RelayChainNode) StartContainer(ctx context.Context) error { - if err := dockerutil.StartContainer(ctx, p.DockerClient, p.containerID); err != nil { + if err := p.containerLifecycle.StartContainer(ctx); err != nil { return err } - c, err := p.DockerClient.ContainerInspect(ctx, p.containerID) + hostPorts, err := p.containerLifecycle.GetHostPorts(ctx, wsPort, rpcPort) if err != nil { return err } // Set the host ports once since they will not change after the container has started. - p.hostWsPort = dockerutil.GetHostPort(c, wsPort) - p.hostRpcPort = dockerutil.GetHostPort(c, rpcPort) + p.hostWsPort, p.hostRpcPort = hostPorts[0], hostPorts[1] p.logger().Info("Waiting for RPC endpoint to be available", zap.String("container", p.Name())) explorerUrl := fmt.Sprintf("\033[4;34mhttps://polkadot.js.org/apps?rpc=ws://%s#/explorer\033[0m", diff --git a/chain/polkadot/tx.go b/chain/polkadot/tx.go index e46793cbe..3640f78cd 100644 --- a/chain/polkadot/tx.go +++ b/chain/polkadot/tx.go @@ -60,8 +60,8 @@ func EnableIbc(api *gsrpc.SubstrateAPI, senderKeypair signature.KeyringPair) (gs // SendIbcFundsTx sends funds to a wallet using the SubstrateAPI func SendIbcFundsTx( - api *gsrpc.SubstrateAPI, - senderKeypair signature.KeyringPair, + api *gsrpc.SubstrateAPI, + senderKeypair signature.KeyringPair, channelID string, amount ibc.WalletAmount, options ibc.TransferOptions, @@ -78,7 +78,7 @@ func SendIbcFundsTx( } raw := gstypes.NewU8(1) - size := gstypes.NewU8(uint8(len(amount.Address) *4)) + size := gstypes.NewU8(uint8(len(amount.Address) * 4)) to := gstypes.NewStorageDataRaw([]byte(amount.Address)) channel := gstypes.NewU64(0) // Parse channel number from string timeout := gstypes.NewU8(1) @@ -98,8 +98,8 @@ func SendIbcFundsTx( // MintFunds mints an asset for a user on parachain, keyName must be the owner of the asset func MintFundsTx( - api *gsrpc.SubstrateAPI, - senderKeypair signature.KeyringPair, + api *gsrpc.SubstrateAPI, + senderKeypair signature.KeyringPair, amount ibc.WalletAmount, ) (gstypes.Hash, error) { hash := gstypes.Hash{} @@ -136,7 +136,7 @@ func MintFundsTx( // Common tx function to create an extrinsic and sign/submit it func CreateSignSubmitExt( - api *gsrpc.SubstrateAPI, + api *gsrpc.SubstrateAPI, meta *gstypes.Metadata, senderKeypair signature.KeyringPair, call gstypes.Call, @@ -190,4 +190,4 @@ func CreateSignSubmitExt( hash, err = api.RPC.Author.SubmitExtrinsic(ext) return hash, err -} \ No newline at end of file +} diff --git a/chainspec.go b/chainspec.go index a32f070d8..d40beb214 100644 --- a/chainspec.go +++ b/chainspec.go @@ -141,6 +141,7 @@ func (s *ChainSpec) applyConfigOverrides(cfg ibc.ChainConfig) (*ibc.ChainConfig, if s.ModifyGenesis != nil { cfg.ModifyGenesis = s.ModifyGenesis } + cfg.UsingNewGenesisCommand = s.UsingNewGenesisCommand // Set the version depending on the chain type. switch cfg.Type { diff --git a/chainspec_test.go b/chainspec_test.go index cbf0b21b5..24e25f2a3 100644 --- a/chainspec_test.go +++ b/chainspec_test.go @@ -133,6 +133,18 @@ func TestChainSpec_Config(t *testing.T) { require.Equal(t, m, cfg.NoHostMount) }) + + t.Run("UsingNewGenesisCommand", func(t *testing.T) { + require.False(t, baseCfg.UsingNewGenesisCommand) + + s := baseSpec + s.UsingNewGenesisCommand = true + + cfg, err := s.Config(zaptest.NewLogger(t)) + require.NoError(t, err) + + require.True(t, cfg.UsingNewGenesisCommand) + }) }) t.Run("error cases", func(t *testing.T) { diff --git a/cmd/interchaintest/example_matrix.json b/cmd/interchaintest/example_matrix.json index 6ecae2e45..d5dbe96c9 100644 --- a/cmd/interchaintest/example_matrix.json +++ b/cmd/interchaintest/example_matrix.json @@ -1,5 +1,5 @@ { - "Relayers": ["rly"], + "Relayers": ["rly", "hermes"], "ChainSets": [ [ diff --git a/cmd/interchaintest/interchaintest_test.go b/cmd/interchaintest/interchaintest_test.go index 76625105a..dd65f4b5d 100644 --- a/cmd/interchaintest/interchaintest_test.go +++ b/cmd/interchaintest/interchaintest_test.go @@ -103,7 +103,7 @@ func setUpTestMatrix() error { if extraFlags.MatrixFile == "" { fmt.Fprintln(os.Stderr, "No matrix file provided, falling back to rly with gaia and osmosis") - testMatrix.Relayers = []string{"rly"} + testMatrix.Relayers = []string{"rly", "hermes"} testMatrix.ChainSets = [][]*interchaintest.ChainSpec{ { {Name: "gaia", Version: "v7.0.1"}, diff --git a/conformance/flush.go b/conformance/flush.go index 69fcfe579..b03f6eb4f 100644 --- a/conformance/flush.go +++ b/conformance/flush.go @@ -19,7 +19,7 @@ func TestRelayerFlushing(t *testing.T, ctx context.Context, cf interchaintest.Ch // FlushPackets will be exercised in a subtest, // but check that capability first in case we can avoid setup. - requireCapabilities(t, rep, rf, relayer.FlushPackets) + requireCapabilities(t, rep, rf, relayer.Flush) client, network := interchaintest.DockerSetup(t) @@ -69,7 +69,6 @@ func TestRelayerFlushing(t *testing.T, ctx context.Context, cf interchaintest.Ch req.Len(channels, 1) c0ChannelID := channels[0].ChannelID - c1ChannelID := channels[0].Counterparty.ChannelID beforeTransferHeight, err := c0.Height(ctx) req.NoError(err) @@ -83,7 +82,7 @@ func TestRelayerFlushing(t *testing.T, ctx context.Context, cf interchaintest.Ch req.NoError(err) req.NoError(tx.Validate()) - t.Run("flush packets", func(t *testing.T) { + t.Run("flush", func(t *testing.T) { rep.TrackTest(t) eRep := rep.RelayerExecReporter(t) @@ -91,34 +90,12 @@ func TestRelayerFlushing(t *testing.T, ctx context.Context, cf interchaintest.Ch req := require.New(rep.TestifyT(t)) // Should trigger MsgRecvPacket. - req.NoError(r.FlushPackets(ctx, eRep, pathName, c0ChannelID)) - - req.NoError(testutil.WaitForBlocks(ctx, 3, c0, c1)) - - req.NoError(r.FlushPackets(ctx, eRep, pathName, c1ChannelID)) - - afterFlushHeight, err := c0.Height(ctx) - req.NoError(err) - - // Ack shouldn't happen yet. - _, err = testutil.PollForAck(ctx, c0, beforeTransferHeight, afterFlushHeight+2, tx.Packet) - req.ErrorIs(err, testutil.ErrNotFound) - }) - - t.Run("flush acks", func(t *testing.T) { - rep.TrackTest(t) - requireCapabilities(t, rep, rf, relayer.FlushAcknowledgements) - - eRep := rep.RelayerExecReporter(t) - - req := require.New(rep.TestifyT(t)) - req.NoError(r.FlushAcknowledgements(ctx, eRep, pathName, c0ChannelID)) + req.NoError(r.Flush(ctx, eRep, pathName, c0ChannelID)) afterFlushHeight, err := c0.Height(ctx) req.NoError(err) - // Now the ack must be present. - _, err = testutil.PollForAck(ctx, c0, beforeTransferHeight, afterFlushHeight+2, tx.Packet) + _, err = testutil.PollForAck(ctx, c0, beforeTransferHeight, afterFlushHeight+5, tx.Packet) req.NoError(err) }) } diff --git a/conformance/relayersetup.go b/conformance/relayersetup.go index 7e9e9702c..68619d6a2 100644 --- a/conformance/relayersetup.go +++ b/conformance/relayersetup.go @@ -102,7 +102,7 @@ func TestRelayerSetup(t *testing.T, ctx context.Context, cf interchaintest.Chain conn0 := conns0[0] req.NotEmpty(conn0.ID) req.NotEmpty(conn0.ClientID) - req.Equal(conn0.State, conntypes.OPEN.String()) + req.Subset([]string{conntypes.OPEN.String(), "Open"}, []string{conn0.State}) conns1, err := r.GetConnections(ctx, eRep, c1.Config().ChainID) req.NoError(err) @@ -111,7 +111,7 @@ func TestRelayerSetup(t *testing.T, ctx context.Context, cf interchaintest.Chain conn1 := conns1[0] req.NotEmpty(conn1.ID) req.NotEmpty(conn1.ClientID) - req.Equal(conn1.State, conntypes.OPEN.String()) + req.Subset([]string{conntypes.OPEN.String(), "Open"}, []string{conn1.State}) // Now validate counterparties. req.Equal(conn0.Counterparty.ClientId, conn1.ClientID) @@ -160,14 +160,14 @@ func TestRelayerSetup(t *testing.T, ctx context.Context, cf interchaintest.Chain // Piecemeal assertions against each channel. // Not asserting against ConnectionHops or ChannelID. - req.Equal(ch0.State, "STATE_OPEN") - req.Equal(ch0.Ordering, "ORDER_UNORDERED") + req.Subset([]string{"STATE_OPEN", "Open"}, []string{ch0.State}) + req.Subset([]string{"ORDER_UNORDERED", "Unordered"}, []string{ch0.Ordering}) req.Equal(ch0.Counterparty, ibc.ChannelCounterparty{PortID: "transfer", ChannelID: ch1.ChannelID}) req.Equal(ch0.Version, "ics20-1") req.Equal(ch0.PortID, "transfer") - req.Equal(ch1.State, "STATE_OPEN") - req.Equal(ch1.Ordering, "ORDER_UNORDERED") + req.Subset([]string{"STATE_OPEN", "Open"}, []string{ch1.State}) + req.Subset([]string{"ORDER_UNORDERED", "Unordered"}, []string{ch1.Ordering}) req.Equal(ch1.Counterparty, ibc.ChannelCounterparty{PortID: "transfer", ChannelID: ch0.ChannelID}) req.Equal(ch1.Version, "ics20-1") req.Equal(ch1.PortID, "transfer") diff --git a/conformance/test.go b/conformance/test.go index 51d8d0ebb..4f6b0ce7d 100644 --- a/conformance/test.go +++ b/conformance/test.go @@ -328,6 +328,7 @@ func TestChainPair( } if relayerImpl == nil { + t.Logf("creating relayer: %s", rf.Name()) // startup both chains. // creates wallets in the relayer for src and dst chain. // funds relayer src and dst wallets on respective chain in genesis. diff --git a/docs/writeCustomTests.md b/docs/writeCustomTests.md index c4bbb0bca..0ae606820 100644 --- a/docs/writeCustomTests.md +++ b/docs/writeCustomTests.md @@ -249,8 +249,7 @@ Notice, how it waits for blocks. Sometimes this is necessary. Here we instruct the relayer to flush packets and acknowledgments. ```go -require.NoError(t, r.FlushPackets(ctx, eRep, ibcPath, osmoChannelID)) -require.NoError(t, r.FlushAcknowledgements(ctx, eRep, ibcPath, gaiaChannelID)) +require.NoError(t, r.Flush(ctx, eRep, ibcPath, osmoChannelID)) ``` This could have also been accomplished by starting the relayer on a loop: diff --git a/examples/cosmos/chain_upgrade_ibc_test.go b/examples/cosmos/chain_upgrade_ibc_test.go index 204c25003..0903b6c86 100644 --- a/examples/cosmos/chain_upgrade_ibc_test.go +++ b/examples/cosmos/chain_upgrade_ibc_test.go @@ -17,10 +17,10 @@ import ( ) func TestJunoUpgradeIBC(t *testing.T) { - CosmosChainUpgradeIBCTest(t, "juno", "v6.0.0", "v8.0.0", "multiverse") + CosmosChainUpgradeIBCTest(t, "juno", "v6.0.0", "ghcr.io/strangelove-ventures/heighliner/juno", "v8.0.0", "multiverse") } -func CosmosChainUpgradeIBCTest(t *testing.T, chainName, initialVersion, upgradeVersion string, upgradeName string) { +func CosmosChainUpgradeIBCTest(t *testing.T, chainName, initialVersion, upgradeContainerRepo, upgradeVersion string, upgradeName string) { if testing.Short() { t.Skip("skipping in short mode") } @@ -139,7 +139,7 @@ func CosmosChainUpgradeIBCTest(t *testing.T, chainName, initialVersion, upgradeV require.NoError(t, err, "error stopping node(s)") // upgrade version on all nodes - chain.UpgradeVersion(ctx, client, upgradeVersion) + chain.UpgradeVersion(ctx, client, upgradeContainerRepo, upgradeVersion) // start all nodes back up. // validators reach consensus on first block after upgrade height diff --git a/examples/cosmos/chain_upgrade_test.go b/examples/cosmos/chain_upgrade_test.go index d57fe09a9..45fcfb93d 100644 --- a/examples/cosmos/chain_upgrade_test.go +++ b/examples/cosmos/chain_upgrade_test.go @@ -24,10 +24,10 @@ const ( ) func TestJunoUpgrade(t *testing.T) { - CosmosChainUpgradeTest(t, "juno", "v6.0.0", "v8.0.0", "multiverse") + CosmosChainUpgradeTest(t, "juno", "v6.0.0", "ghcr.io/strangelove-ventures/heighliner/juno", "v8.0.0", "multiverse") } -func CosmosChainUpgradeTest(t *testing.T, chainName, initialVersion, upgradeVersion string, upgradeName string) { +func CosmosChainUpgradeTest(t *testing.T, chainName, initialVersion, upgradeContainerRepo, upgradeVersion, upgradeName string) { if testing.Short() { t.Skip("skipping in short mode") } @@ -113,7 +113,7 @@ func CosmosChainUpgradeTest(t *testing.T, chainName, initialVersion, upgradeVers require.NoError(t, err, "error stopping node(s)") // upgrade version on all nodes - chain.UpgradeVersion(ctx, client, upgradeVersion) + chain.UpgradeVersion(ctx, client, upgradeContainerRepo, upgradeVersion) // start all nodes back up. // validators reach consensus on first block after upgrade height diff --git a/examples/ibc/interchain_accounts_test.go b/examples/ibc/interchain_accounts_test.go index db9b0ab04..3eafd56cf 100644 --- a/examples/ibc/interchain_accounts_test.go +++ b/examples/ibc/interchain_accounts_test.go @@ -9,6 +9,7 @@ import ( "time" "github.com/cosmos/cosmos-sdk/crypto/keyring" + chantypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types" interchaintest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" @@ -40,13 +41,15 @@ func TestInterchainAccounts(t *testing.T) { { Name: "icad", ChainConfig: ibc.ChainConfig{ - Images: []ibc.DockerImage{{Repository: "ghcr.io/cosmos/ibc-go-icad", Version: "v0.3.5"}}, + Images: []ibc.DockerImage{{Repository: "ghcr.io/cosmos/ibc-go-icad", Version: "v0.5.0"}}, + UsingNewGenesisCommand: true, }, }, { Name: "icad", ChainConfig: ibc.ChainConfig{ - Images: []ibc.DockerImage{{Repository: "ghcr.io/cosmos/ibc-go-icad", Version: "v0.3.5"}}, + Images: []ibc.DockerImage{{Repository: "ghcr.io/cosmos/ibc-go-icad", Version: "v0.5.0"}}, + UsingNewGenesisCommand: true, }, }, }) @@ -54,7 +57,7 @@ func TestInterchainAccounts(t *testing.T) { chains, err := cf.Chains(t.Name()) require.NoError(t, err) - chain1, chain2 := chains[0], chains[1] + chain1, chain2 := chains[0].(*cosmos.CosmosChain), chains[1].(*cosmos.CosmosChain) // Get a relayer instance r := interchaintest.NewBuiltinRelayerFactory( @@ -99,14 +102,14 @@ func TestInterchainAccounts(t *testing.T) { err = r.CreateClients(ctx, eRep, pathName, ibc.CreateClientOptions{TrustingPeriod: "330h"}) require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 5, chain1, chain2) + err = testutil.WaitForBlocks(ctx, 2, chain1, chain2) require.NoError(t, err) // Create a new connection err = r.CreateConnections(ctx, eRep, pathName) require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 5, chain1, chain2) + err = testutil.WaitForBlocks(ctx, 2, chain1, chain2) require.NoError(t, err) // Query for the newly created connection @@ -114,6 +117,19 @@ func TestInterchainAccounts(t *testing.T) { require.NoError(t, err) require.Equal(t, 1, len(connections)) + // Start the relayer and set the cleanup function. + err = r.StartRelayer(ctx, eRep, pathName) + require.NoError(t, err) + + t.Cleanup( + func() { + err := r.StopRelayer(ctx, eRep) + if err != nil { + t.Logf("an error occurred while stopping the relayer: %s", err) + } + }, + ) + // Register a new interchain account on chain2, on behalf of the user acc on chain1 chain1Addr := chain1User.(*cosmos.CosmosWallet).FormattedAddressWithPrefix(chain1.Config().Bech32Prefix) @@ -130,21 +146,18 @@ func TestInterchainAccounts(t *testing.T) { _, _, err = chain1.Exec(ctx, registerICA, nil) require.NoError(t, err) - // Start the relayer and set the cleanup function. - err = r.StartRelayer(ctx, eRep, pathName) + ir := cosmos.DefaultEncoding().InterfaceRegistry + + c2h, err := chain2.Height(ctx) require.NoError(t, err) - t.Cleanup( - func() { - err := r.StopRelayer(ctx, eRep) - if err != nil { - t.Logf("an error occured while stopping the relayer: %s", err) - } - }, - ) + channelFound := func(found *chantypes.MsgChannelOpenConfirm) bool { + return found.PortId == "icahost" + } - // Wait for relayer to start up and finish channel handshake - err = testutil.WaitForBlocks(ctx, 15, chain1, chain2) + // Wait for channel open confirm + _, err = cosmos.PollForMessage(ctx, chain2, ir, + c2h, c2h+30, channelFound) require.NoError(t, err) // Query for the newly registered interchain account @@ -179,10 +192,6 @@ func TestInterchainAccounts(t *testing.T) { err = chain2.SendFunds(ctx, chain2User.KeyName(), transfer) require.NoError(t, err) - // Wait for transfer to be complete and assert balances - err = testutil.WaitForBlocks(ctx, 5, chain2) - require.NoError(t, err) - chain2Bal, err := chain2.GetBalance(ctx, chain2Addr, chain2.Config().Denom) require.NoError(t, err) require.Equal(t, chain2OrigBal-transferAmount, chain2Bal) @@ -220,7 +229,17 @@ func TestInterchainAccounts(t *testing.T) { require.NoError(t, err) // Wait for tx to be relayed - err = testutil.WaitForBlocks(ctx, 10, chain2) + c1h, err := chain1.Height(ctx) + require.NoError(t, err) + + ackFound := func(found *chantypes.MsgAcknowledgement) bool { + return found.Packet.Sequence == 1 && + found.Packet.SourcePort == "icacontroller-"+chain1Addr && + found.Packet.DestinationPort == "icahost" + } + + // Wait for ack + _, err = cosmos.PollForMessage(ctx, chain1, ir, c1h, c1h+10, ackFound) require.NoError(t, err) // Assert that the funds have been received by the user account on chain2 @@ -237,9 +256,6 @@ func TestInterchainAccounts(t *testing.T) { err = r.StopRelayer(ctx, eRep) require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 5, chain1, chain2) - require.NoError(t, err) - // Send another bank transfer msg to ICA on chain2 from the user account on chain1. // This message should timeout and the channel will be closed when we re-start the relayer. _, _, err = chain1.Exec(ctx, sendICATransfer, nil) @@ -252,7 +268,15 @@ func TestInterchainAccounts(t *testing.T) { err = r.StartRelayer(ctx, eRep, pathName) require.NoError(t, err) - err = testutil.WaitForBlocks(ctx, 15, chain1, chain2) + c2h, err = chain2.Height(ctx) + require.NoError(t, err) + + chanCloseFound := func(found *chantypes.MsgChannelCloseConfirm) bool { + return found.PortId == "icahost" + } + + // Wait for channel close confirm + _, err = cosmos.PollForMessage(ctx, chain2, ir, c2h, c2h+30, chanCloseFound) require.NoError(t, err) // Assert that the packet timed out and that the acc balances are correct @@ -268,19 +292,23 @@ func TestInterchainAccounts(t *testing.T) { chain1Chans, err := r.GetChannels(ctx, eRep, chain1.Config().ChainID) require.NoError(t, err) require.Equal(t, 1, len(chain1Chans)) - require.Equal(t, "STATE_CLOSED", chain1Chans[0].State) + require.Subset(t, []string{"STATE_CLOSED", "Closed"}, []string{chain1Chans[0].State}) chain2Chans, err := r.GetChannels(ctx, eRep, chain2.Config().ChainID) require.NoError(t, err) require.Equal(t, 1, len(chain2Chans)) - require.Equal(t, "STATE_CLOSED", chain2Chans[0].State) + require.Subset(t, []string{"STATE_CLOSED", "Closed"}, []string{chain2Chans[0].State}) // Attempt to open another channel for the same ICA _, _, err = chain1.Exec(ctx, registerICA, nil) require.NoError(t, err) - // Wait for channel handshake to finish - err = testutil.WaitForBlocks(ctx, 15, chain1, chain2) + c2h, err = chain2.Height(ctx) + require.NoError(t, err) + + // Wait for channel open confirm + _, err = cosmos.PollForMessage(ctx, chain2, ir, + c2h, c2h+30, channelFound) require.NoError(t, err) // Assert that a new channel has been opened and the same ICA is in use @@ -294,12 +322,12 @@ func TestInterchainAccounts(t *testing.T) { chain1Chans, err = r.GetChannels(ctx, eRep, chain1.Config().ChainID) require.NoError(t, err) require.Equal(t, 2, len(chain1Chans)) - require.Equal(t, "STATE_OPEN", chain1Chans[1].State) + require.Subset(t, []string{"STATE_OPEN", "Open"}, []string{chain1Chans[1].State}) chain2Chans, err = r.GetChannels(ctx, eRep, chain2.Config().ChainID) require.NoError(t, err) require.Equal(t, 2, len(chain2Chans)) - require.Equal(t, "STATE_OPEN", chain2Chans[1].State) + require.Subset(t, []string{"STATE_OPEN", "Open"}, []string{chain2Chans[1].State}) } // parseInterchainAccountField takes a slice of bytes which should be returned when querying for an ICA via diff --git a/examples/ibc/learn_ibc_test.go b/examples/ibc/learn_ibc_test.go index 0d92e0ab0..029a8427e 100644 --- a/examples/ibc/learn_ibc_test.go +++ b/examples/ibc/learn_ibc_test.go @@ -104,9 +104,8 @@ func TestLearn(t *testing.T) { require.NoError(t, err) require.NoError(t, tx.Validate()) - // relay packets and acknoledgments - require.NoError(t, r.FlushPackets(ctx, eRep, ibcPath, osmoChannelID)) - require.NoError(t, r.FlushAcknowledgements(ctx, eRep, ibcPath, gaiaChannelID)) + // relay MsgRecvPacket to osmosis, then MsgAcknowledgement back to gaia + require.NoError(t, r.Flush(ctx, eRep, ibcPath, gaiaChannelID)) // test source wallet has decreased funds expectedBal := gaiaUserBalInitial - amountToSend @@ -115,7 +114,7 @@ func TestLearn(t *testing.T) { require.Equal(t, expectedBal, gaiaUserBalNew) // Trace IBC Denom - srcDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", gaiaChannelID, gaia.Config().Denom)) + srcDenomTrace := transfertypes.ParseDenomTrace(transfertypes.GetPrefixedDenom("transfer", osmoChannelID, gaia.Config().Denom)) dstIbcDenom := srcDenomTrace.IBCDenom() // Test destination wallet has increased funds diff --git a/examples/ibc/packet_forward_test.go b/examples/ibc/packet_forward_test.go index eb6a92db0..6538639de 100644 --- a/examples/ibc/packet_forward_test.go +++ b/examples/ibc/packet_forward_test.go @@ -10,8 +10,6 @@ import ( interchaintest "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" - "github.com/strangelove-ventures/interchaintest/v7/relayer" - "github.com/strangelove-ventures/interchaintest/v7/relayer/rly" "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/stretchr/testify/require" @@ -47,10 +45,10 @@ func TestPacketForwardMiddleware(t *testing.T) { chainID_A, chainID_B, chainID_C, chainID_D := "chain-a", "chain-b", "chain-c", "chain-d" cf := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ - {Name: "gaia", Version: "v8.0.0-rc3", ChainConfig: ibc.ChainConfig{ChainID: chainID_A, GasPrices: "0.0uatom"}}, - {Name: "gaia", Version: "v8.0.0-rc3", ChainConfig: ibc.ChainConfig{ChainID: chainID_B, GasPrices: "0.0uatom"}}, - {Name: "gaia", Version: "v8.0.0-rc3", ChainConfig: ibc.ChainConfig{ChainID: chainID_C, GasPrices: "0.0uatom"}}, - {Name: "gaia", Version: "v8.0.0-rc3", ChainConfig: ibc.ChainConfig{ChainID: chainID_D, GasPrices: "0.0uatom"}}, + {Name: "gaia", Version: "v9.0.1", ChainConfig: ibc.ChainConfig{ChainID: chainID_A, GasPrices: "0.0uatom"}}, + {Name: "gaia", Version: "v9.0.1", ChainConfig: ibc.ChainConfig{ChainID: chainID_B, GasPrices: "0.0uatom"}}, + {Name: "gaia", Version: "v9.0.1", ChainConfig: ibc.ChainConfig{ChainID: chainID_C, GasPrices: "0.0uatom"}}, + {Name: "gaia", Version: "v9.0.1", ChainConfig: ibc.ChainConfig{ChainID: chainID_D, GasPrices: "0.0uatom"}}, }) chains, err := cf.Chains(t.Name()) @@ -61,8 +59,6 @@ func TestPacketForwardMiddleware(t *testing.T) { r := interchaintest.NewBuiltinRelayerFactory( ibc.CosmosRly, zaptest.NewLogger(t), - // TODO remove this line once default rly version includes https://github.com/cosmos/relayer/pull/1038 - relayer.CustomDockerImage("ghcr.io/cosmos/relayer", "main", rly.RlyDefaultUidGid), ).Build(t, client, network) const pathAB = "ab" diff --git a/examples/penumbra/penumbra_chain_test.go b/examples/penumbra/penumbra_chain_test.go index f646095c7..494b77c0a 100644 --- a/examples/penumbra/penumbra_chain_test.go +++ b/examples/penumbra/penumbra_chain_test.go @@ -23,8 +23,9 @@ func TestPenumbraChainStart(t *testing.T) { chains, err := interchaintest.NewBuiltinChainFactory(zaptest.NewLogger(t), []*interchaintest.ChainSpec{ { - Name: "penumbra", - Version: "040-themisto.1,v0.34.21", + Name: "penumbra", + // Version: "040-themisto.1,v0.34.23", + Version: "045-metis,v0.34.23", ChainConfig: ibc.ChainConfig{ ChainID: "penumbra-1", }, diff --git a/examples/polkadot/push_wasm_client_code_test.go b/examples/polkadot/push_wasm_client_code_test.go index 08f329c37..a729c3eff 100644 --- a/examples/polkadot/push_wasm_client_code_test.go +++ b/examples/polkadot/push_wasm_client_code_test.go @@ -4,24 +4,24 @@ import ( "context" "crypto/sha256" "encoding/hex" - "testing" "encoding/json" "fmt" + "testing" + "github.com/icza/dyno" "github.com/strangelove-ventures/interchaintest/v7" "github.com/strangelove-ventures/interchaintest/v7/chain/cosmos" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/testreporter" "github.com/strangelove-ventures/interchaintest/v7/testutil" - "github.com/icza/dyno" "github.com/stretchr/testify/require" "go.uber.org/zap/zaptest" ) const ( - heightDelta = uint64(20) - votingPeriod = "30s" - maxDepositPeriod = "10s" + heightDelta = uint64(20) + votingPeriod = "30s" + maxDepositPeriod = "10s" ) // Spin up a simd chain, push a contract, and get that contract code from chain @@ -82,7 +82,7 @@ func TestPushWasmClientCode(t *testing.T) { //EncodingConfig: WasmClientEncoding(), NoHostMount: true, ConfigFileOverrides: configFileOverrides, - ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), + ModifyGenesis: modifyGenesisShortProposals(votingPeriod, maxDepositPeriod), }, }, }) @@ -121,12 +121,12 @@ func TestPushWasmClientCode(t *testing.T) { // Verify a normal user cannot push a wasm light client contract _, err = simdChain.StoreClientContract(ctx, simd1User.KeyName(), "ics10_grandpa_cw.wasm") require.ErrorContains(t, err, "invalid authority") - + proposal := cosmos.TxProposalv1{ Metadata: "none", - Deposit: "500000000" + simdChain.Config().Denom, // greater than min deposit - Title: "Grandpa Contract", - Summary: "new grandpa contract", + Deposit: "500000000" + simdChain.Config().Denom, // greater than min deposit + Title: "Grandpa Contract", + Summary: "new grandpa contract", } proposalTx, codeHash, err := simdChain.PushNewWasmClientProposal(ctx, simd1User.KeyName(), "ics10_grandpa_cw.wasm", proposal) @@ -134,7 +134,7 @@ func TestPushWasmClientCode(t *testing.T) { height, err := simdChain.Height(ctx) require.NoError(t, err, "error fetching height before submit upgrade proposal") - + err = simdChain.VoteOnProposalAllValidators(ctx, proposalTx.ProposalID, cosmos.ProposalVoteYes) require.NoError(t, err, "failed to submit votes") @@ -179,4 +179,4 @@ func modifyGenesisShortProposals(votingPeriod string, maxDepositPeriod string) f } return out, nil } -} \ No newline at end of file +} diff --git a/go.mod b/go.mod index 2ee41d172..4131fe089 100644 --- a/go.mod +++ b/go.mod @@ -3,86 +3,87 @@ module github.com/strangelove-ventures/interchaintest/v7 go 1.19 require ( - github.com/99designs/keyring v1.2.1 - github.com/BurntSushi/toml v1.2.0 + github.com/99designs/keyring v1.2.2 + github.com/BurntSushi/toml v1.2.1 github.com/ChainSafe/go-schnorrkel/1 v0.0.0-00010101000000-000000000000 github.com/StirlingMarketingGroup/go-namecase v1.0.0 github.com/atotto/clipboard v0.1.4 - github.com/avast/retry-go/v4 v4.0.4 - github.com/cosmos/cosmos-sdk v0.47.0-rc2 + github.com/avast/retry-go/v4 v4.3.3 + github.com/cometbft/cometbft v0.37.0 + github.com/cosmos/cosmos-sdk v0.47.1 github.com/cosmos/go-bip39 v1.0.0 - github.com/cosmos/gogoproto v1.4.4 - github.com/cosmos/ibc-go/v7 v7.0.0-rc0 + github.com/cosmos/gogoproto v1.4.6 + github.com/cosmos/ibc-go/v7 v7.0.0 github.com/davecgh/go-spew v1.1.1 github.com/decred/dcrd/dcrec/secp256k1/v2 v2.0.0 - github.com/docker/docker v20.10.17+incompatible + github.com/docker/docker v20.10.19+incompatible github.com/docker/go-connections v0.4.0 - github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1 + github.com/gdamore/tcell/v2 v2.6.0 github.com/google/go-cmp v0.5.9 github.com/grpc-ecosystem/grpc-gateway v1.16.0 github.com/hashicorp/go-version v1.6.0 github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845 - github.com/libp2p/go-libp2p-core v0.15.1 + github.com/libp2p/go-libp2p-core v0.20.1 github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230316181816-6037bb49fa8d github.com/mr-tron/base58 v1.2.0 + github.com/pelletier/go-toml v1.9.5 github.com/pelletier/go-toml/v2 v2.0.6 github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8 github.com/spf13/cobra v1.6.1 - github.com/stretchr/testify v1.8.1 - github.com/tendermint/tendermint v0.37.0-rc2 + github.com/stretchr/testify v1.8.2 github.com/tyler-smith/go-bip32 v1.0.0 github.com/tyler-smith/go-bip39 v1.0.1-0.20181017060643-dbb3b84ba2ef go.uber.org/multierr v1.8.0 - go.uber.org/zap v1.21.0 - golang.org/x/crypto v0.4.0 + go.uber.org/zap v1.24.0 + golang.org/x/crypto v0.7.0 golang.org/x/sync v0.1.0 - golang.org/x/tools v0.1.12 - google.golang.org/grpc v1.52.3 + golang.org/x/tools v0.7.0 + google.golang.org/grpc v1.54.0 gopkg.in/yaml.v3 v3.0.1 - modernc.org/sqlite v1.17.3 + modernc.org/sqlite v1.21.1 ) require ( - cloud.google.com/go v0.105.0 // indirect - cloud.google.com/go/compute v1.14.0 // indirect + cloud.google.com/go v0.110.0 // indirect + cloud.google.com/go/compute v1.18.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/iam v0.8.0 // indirect - cloud.google.com/go/storage v1.27.0 // indirect - cosmossdk.io/api v0.2.6 // indirect - cosmossdk.io/core v0.3.2 // indirect + cloud.google.com/go/iam v0.12.0 // indirect + cloud.google.com/go/storage v1.29.0 // 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/math v1.0.0-beta.4 // indirect - cosmossdk.io/tools/rosetta v0.2.0 // indirect - filippo.io/edwards25519 v1.0.0-rc.1 // indirect + cosmossdk.io/math v1.0.0 // 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 github.com/ChainSafe/go-schnorrkel v1.0.0 // indirect github.com/ComposableFi/go-subkey/v2 v2.0.0-tm03420 // indirect github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e // indirect github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec // indirect - github.com/Microsoft/go-winio v0.5.2 // indirect + github.com/Microsoft/go-winio v0.6.0 // indirect github.com/armon/go-metrics v0.4.1 // indirect - github.com/aws/aws-sdk-go v1.40.45 // 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 github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d // indirect github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 // indirect - github.com/btcsuite/btcd v0.22.3 // indirect github.com/btcsuite/btcd/btcec/v2 v2.3.2 // indirect github.com/cenkalti/backoff/v4 v4.1.3 // indirect github.com/cespare/xxhash v1.1.0 // indirect - github.com/cespare/xxhash/v2 v2.1.2 // indirect - github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e // indirect + github.com/cespare/xxhash/v2 v2.2.0 // indirect + github.com/chzyer/readline v1.5.1 // indirect + github.com/coinbase/rosetta-sdk-go/types v1.0.0 // indirect + github.com/cometbft/cometbft-db v0.7.0 // indirect github.com/confio/ics23/go v0.9.0 // indirect github.com/cosmos/btcutil v1.0.5 // indirect - github.com/cosmos/cosmos-proto v1.0.0-beta.1 // indirect + github.com/cosmos/cosmos-proto v1.0.0-beta.2 // indirect github.com/cosmos/gogogateway v1.2.0 // indirect - github.com/cosmos/gorocksdb v1.2.0 // indirect - github.com/cosmos/iavl v0.19.5-rc.1 // indirect + github.com/cosmos/iavl v0.20.0 // indirect github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab // indirect github.com/cosmos/ledger-cosmos-go v0.12.1 // indirect - github.com/cosmos/rosetta-sdk-go v0.9.0 // indirect - github.com/creachadair/taskgroup v0.3.2 // indirect + github.com/cosmos/rosetta-sdk-go v0.10.0 // indirect + github.com/creachadair/taskgroup v0.4.2 // indirect github.com/danieljoos/wincred v1.1.2 // indirect github.com/deckarep/golang-set v1.8.0 // indirect github.com/decred/base58 v1.0.4 // indirect @@ -93,8 +94,8 @@ require ( github.com/dgraph-io/ristretto v0.1.1 // indirect github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 // indirect github.com/docker/distribution v2.8.1+incompatible // indirect - github.com/docker/go-units v0.4.0 // indirect - github.com/dustin/go-humanize v1.0.0 // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/dustin/go-humanize v1.0.1 // indirect github.com/dvsekhvalnov/jose2go v1.5.0 // indirect github.com/ethereum/go-ethereum v1.10.20 // indirect github.com/felixge/httpsnoop v1.0.2 // indirect @@ -102,20 +103,20 @@ require ( github.com/gdamore/encoding v1.0.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.5.1 // indirect + github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-stack/stack v1.8.1 // indirect github.com/godbus/dbus v0.0.0-20190726142602-4481cbc300e2 // indirect - github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869 // indirect + github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/protobuf v1.3.3 // indirect - github.com/golang/glog v1.0.0 // indirect + github.com/golang/glog v1.1.0 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/mock v1.6.0 // indirect - github.com/golang/protobuf v1.5.2 // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 // indirect github.com/google/btree v1.1.2 // indirect github.com/google/orderedcode v0.0.1 // indirect github.com/google/uuid v1.3.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.2.1 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.2.3 // indirect github.com/googleapis/gax-go/v2 v2.7.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/mux v1.8.0 // indirect @@ -125,62 +126,64 @@ require ( github.com/gtank/merlin v0.1.1 // indirect github.com/gtank/ristretto255 v0.1.2 // indirect github.com/hashicorp/go-cleanhttp v0.5.2 // indirect - github.com/hashicorp/go-getter v1.6.2 // indirect + github.com/hashicorp/go-getter v1.7.0 // indirect github.com/hashicorp/go-immutable-radix v1.3.1 // indirect github.com/hashicorp/go-safetemp v1.0.0 // indirect github.com/hashicorp/golang-lru v0.5.5-0.20210104140557-80c98217689d // indirect github.com/hashicorp/hcl v1.0.0 // indirect - github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 // indirect + github.com/hdevalence/ed25519consensus v0.1.0 // indirect github.com/huandu/skiplist v1.2.0 // indirect github.com/improbable-eng/grpc-web v0.15.0 // indirect - github.com/inconshreveable/mousetrap v1.0.1 // indirect - github.com/ipfs/go-cid v0.0.7 // indirect + github.com/inconshreveable/mousetrap v1.1.0 // indirect + github.com/ipfs/go-cid v0.2.0 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/jmhodges/levigo v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/klauspost/compress v1.15.12 // indirect - github.com/klauspost/cpuid/v2 v2.0.9 // indirect + github.com/klauspost/compress v1.16.3 // indirect + github.com/klauspost/cpuid/v2 v2.2.3 // indirect github.com/lib/pq v1.10.7 // indirect github.com/libp2p/go-buffer-pool v0.1.0 // indirect - github.com/libp2p/go-openssl v0.0.7 // indirect + github.com/libp2p/go-libp2p v0.22.0 // indirect + github.com/libp2p/go-openssl v0.1.0 // indirect github.com/lucasb-eyer/go-colorful v1.2.0 // 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.16 // indirect - github.com/mattn/go-runewidth v0.0.13 // indirect - github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 // indirect + github.com/mattn/go-isatty v0.0.17 // indirect + github.com/mattn/go-pointer v0.0.1 // indirect + github.com/mattn/go-runewidth v0.0.14 // indirect + github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b // indirect - github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 // indirect github.com/minio/highwayhash v1.0.2 // indirect github.com/minio/sha256-simd v1.0.0 // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect - github.com/mitchellh/go-testing-interface v1.0.0 // indirect + github.com/mitchellh/go-testing-interface v1.14.1 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mtibben/percent v0.2.1 // indirect - github.com/multiformats/go-base32 v0.0.3 // indirect + github.com/multiformats/go-base32 v0.0.4 // indirect github.com/multiformats/go-base36 v0.1.0 // indirect - github.com/multiformats/go-multiaddr v0.4.1 // indirect - github.com/multiformats/go-multibase v0.0.3 // indirect - github.com/multiformats/go-multicodec v0.4.1 // indirect - github.com/multiformats/go-multihash v0.1.0 // indirect + github.com/multiformats/go-multiaddr v0.6.0 // indirect + github.com/multiformats/go-multibase v0.1.1 // indirect + github.com/multiformats/go-multicodec v0.5.0 // indirect + github.com/multiformats/go-multihash v0.2.1 // indirect github.com/multiformats/go-varint v0.0.6 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect - github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect - github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 // indirect + github.com/opencontainers/image-spec v1.1.0-rc2 // indirect + github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d // indirect github.com/pierrec/xxHash v0.1.5 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_golang v1.14.0 // indirect github.com/prometheus/client_model v0.3.0 // indirect - github.com/prometheus/common v0.37.0 // indirect - github.com/prometheus/procfs v0.8.0 // indirect + github.com/prometheus/common v0.40.0 // indirect + 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/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0 // indirect - github.com/rivo/uniseg v0.2.0 // indirect - github.com/rs/cors v1.8.2 // indirect - github.com/rs/zerolog v1.28.0 // indirect + github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect + github.com/rivo/uniseg v0.4.3 // indirect + github.com/rs/cors v1.8.3 // 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 @@ -191,44 +194,43 @@ require ( github.com/spf13/pflag v1.0.5 // indirect github.com/spf13/viper v1.15.0 // indirect github.com/subosito/gotenv v1.4.2 // indirect - github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a // indirect + github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d // indirect + github.com/tecbot/gorocksdb v0.0.0-20191217155057-f0fad39f321c // indirect github.com/tendermint/go-amino v0.16.0 // indirect - github.com/tendermint/tm-db v0.6.7 // indirect - github.com/tidwall/btree v1.5.2 // indirect - github.com/ulikunitz/xz v0.5.8 // indirect + github.com/tidwall/btree v1.6.0 // indirect + github.com/ulikunitz/xz v0.5.11 // indirect github.com/zondax/hid v0.9.1 // indirect - github.com/zondax/ledger-go v0.14.0 // indirect - go.etcd.io/bbolt v1.3.6 // indirect + github.com/zondax/ledger-go v0.14.1 // indirect + go.etcd.io/bbolt v1.3.7 // indirect go.opencensus.io v0.24.0 // indirect - go.uber.org/atomic v1.9.0 // indirect - go.uber.org/goleak v1.1.12 // indirect - golang.org/x/exp v0.0.0-20221019170559-20944726eadf // indirect - golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect - golang.org/x/net v0.4.0 // indirect - golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 // indirect - golang.org/x/sys v0.3.0 // indirect - golang.org/x/term v0.3.0 // indirect - golang.org/x/text v0.5.0 // indirect + go.uber.org/atomic v1.10.0 // indirect + golang.org/x/exp v0.0.0-20230321023759-10a507213a29 // indirect + golang.org/x/mod v0.9.0 // indirect + golang.org/x/net v0.8.0 // indirect + golang.org/x/oauth2 v0.5.0 // indirect + golang.org/x/sys v0.6.0 // indirect + golang.org/x/term v0.6.0 // indirect + golang.org/x/text v0.8.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect - google.golang.org/api v0.107.0 // indirect + google.golang.org/api v0.110.0 // indirect google.golang.org/appengine v1.6.7 // indirect - google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef // indirect - google.golang.org/protobuf v1.28.1 // indirect + google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44 // indirect + google.golang.org/protobuf v1.29.1 // 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 - lukechampine.com/blake3 v1.1.6 // indirect - lukechampine.com/uint128 v1.1.1 // indirect - modernc.org/cc/v3 v3.36.0 // indirect - modernc.org/ccgo/v3 v3.16.6 // indirect - modernc.org/libc v1.16.7 // indirect - modernc.org/mathutil v1.4.1 // indirect - modernc.org/memory v1.1.1 // indirect - modernc.org/opt v0.1.1 // indirect - modernc.org/strutil v1.1.1 // indirect - modernc.org/token v1.0.0 // indirect + lukechampine.com/blake3 v1.1.7 // indirect + lukechampine.com/uint128 v1.2.0 // indirect + modernc.org/cc/v3 v3.40.0 // indirect + modernc.org/ccgo/v3 v3.16.13 // indirect + modernc.org/libc v1.22.3 // indirect + modernc.org/mathutil v1.5.0 // indirect + modernc.org/memory v1.5.0 // indirect + modernc.org/opt v0.1.3 // indirect + modernc.org/strutil v1.1.3 // indirect + modernc.org/token v1.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect - pgregory.net/rapid v0.5.3 // indirect + pgregory.net/rapid v0.5.5 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index 4394088fb..f2afbe13d 100644 --- a/go.sum +++ b/go.sum @@ -17,58 +17,200 @@ cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHOb cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.105.0 h1:DNtEKRBAAzeS4KyIory52wWHuClNaXJ5x1F7xa4q+5Y= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= +cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= +cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= +cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= +cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= +cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= +cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= +cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= +cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= +cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= +cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= +cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= +cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= +cloud.google.com/go 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/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= +cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= +cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= +cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= +cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= +cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= +cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= +cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= +cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= +cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= +cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= +cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= +cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= +cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/compute v1.14.0 h1:hfm2+FfxVmnRlh6LpB7cg1ZNU+5edAHmW679JePztk0= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= +cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= +cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= +cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= +cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= +cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= +cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= +cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= +cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= +cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= +cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= +cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= +cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= +cloud.google.com/go/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.18.0 h1:FEigFqoDbys2cvFkZ9Fjq4gnHBP55anJ0yQyau2f9oY= +cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= 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= +cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= +cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= +cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= +cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= +cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= +cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= +cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= +cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= +cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= +cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= +cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= +cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/iam v0.8.0 h1:E2osAkZzxI/+8pZcxVLcDtAQx/u+hZXVryUaYQ5O0Kk= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= +cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= +cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= +cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= +cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= +cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= +cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= +cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= +cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= +cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= +cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= +cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= +cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= +cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= +cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= +cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= +cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= +cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= +cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= +cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= +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.12.0 h1:DRtTY29b75ciH6Ov1PHb4/iat2CLCvrOm40Q0a6DFpE= +cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= +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.3.0 h1:NjljC+FYPV3uh5/OwWT6pVU+doBqMg2x/rZlE+CamDs= +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= +cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= +cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= +cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= +cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= +cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= +cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= +cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= +cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= +cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= +cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= +cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= +cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= +cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= +cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= +cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= +cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= +cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= +cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= +cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= +cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= +cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= +cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= +cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= +cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= +cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= +cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= +cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= +cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= +cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= +cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= +cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= +cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= +cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= +cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= +cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= +cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= +cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= +cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= +cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= +cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= +cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.27.0 h1:YOO045NZI9RKfCj1c5A/ZtuuENUc8OAW+gHdGnDgyMQ= +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= -cosmossdk.io/api v0.2.6 h1:AoNwaLLapcLsphhMK6+o0kZl+D6MMUaHVqSdwinASGU= -cosmossdk.io/api v0.2.6/go.mod h1:u/d+GAxil0nWpl1XnQL8nkziQDIWuBDhv8VnDm/s6dI= -cosmossdk.io/core v0.3.2 h1:KlQIufpJHJvOs7YLGTZsZcCo1WlkencDXepsr8STKZQ= -cosmossdk.io/core v0.3.2/go.mod h1:CO7vbe+evrBvHc0setFHL/u7nlY7HJGzdRSBkT/sirc= +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/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= +cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= +cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= +cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= +cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= +cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= +cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= +cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= +cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= +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/math v1.0.0-beta.4 h1:JtKedVLGzA0vv84xjYmZ75RKG35Kf2WwcFu8IjRkIIw= -cosmossdk.io/math v1.0.0-beta.4/go.mod h1:An0MllWJY6PxibUpnwGk8jOm+a/qIxlKmL5Zyp9NnaM= -cosmossdk.io/tools/rosetta v0.2.0 h1:Ae499UiZ9yPNCXvjOBO/R9I1pksCJfxoqWauEZgA/gs= -cosmossdk.io/tools/rosetta v0.2.0/go.mod h1:3mn8QuE2wLUdTi77/gbDXdFqXZdBdiBJhgAWUTSXPv8= +cosmossdk.io/math v1.0.0 h1:ro9w7eKx23om2tZz/VM2Pf+z2WAbGX1yDQQOJ6iGeJw= +cosmossdk.io/math v1.0.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +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= -filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4 h1:/vQbFIOMbk2FiG/kXiLl8BRyzTWDw7gX/Hz7Dd5eDMs= github.com/99designs/go-keychain v0.0.0-20191008050251-8e49817e8af4/go.mod h1:hN7oaIRCjzsZ2dE+yG5k+rsdt3qcwykqK6HVGcKwsw4= -github.com/99designs/keyring v1.2.1 h1:tYLp1ULvO7i3fI5vE21ReQuj99QFSs7lGm0xWyJo87o= -github.com/99designs/keyring v1.2.1/go.mod h1:fc+wB5KTk9wQ9sDx0kFXB3A0MaeGHM9AwRStKOQ5vOA= +github.com/99designs/keyring v1.2.2 h1:pZd3neh/EmUzWONb35LxQfvuY7kiSXAq3HQd97+XBn0= +github.com/99designs/keyring v1.2.2/go.mod h1:wes/FrByc8j7lFOAGLGSNEg8f/PaI3cgTBqhFkHUrPk= github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/BurntSushi/toml v1.2.0 h1:Rt8g24XnyGTyglgET/PRUNlrUeu9F5L+7FilkXfZgs0= -github.com/BurntSushi/toml v1.2.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/BurntSushi/toml v1.2.1 h1:9F2/+DoOYIOksmaJFPw1tGFy1eDnIJXg+UHjuD8lTak= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d h1:nalkkPQcITbvhmL4+C4cKA87NW0tfm3Kl9VXRoPywFg= github.com/ChainSafe/go-schnorrkel v0.0.0-20200405005733-88cbf1b4c40d/go.mod h1:URdX5+vg25ts3aCh8H5IFZybJYKWhJHYMTnf+ULtoC4= @@ -82,8 +224,8 @@ github.com/FactomProject/basen v0.0.0-20150613233007-fe3947df716e/go.mod h1:kGUq github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec h1:1Qb69mGp/UtRPn422BH4/Y4Q3SLUrD9KHuDkm8iodFc= github.com/FactomProject/btcutilecc v0.0.0-20130527213604-d3a63a5752ec/go.mod h1:CD8UlnlLDiqb36L110uqiP2iSflVjx9g/3U9hCI4q2U= github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -github.com/Microsoft/go-winio v0.5.2 h1:a9IhgEQBCUEk6QCdml9CiJGhAws+YwffDHEMp1VMrpA= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= +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/OneOfOne/xxhash v1.2.2 h1:KMrpdQIwFcEqXDklaen+P1axHaj9BSKzvpUUfnHldSE= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= @@ -114,15 +256,14 @@ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4= github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI= -github.com/avast/retry-go/v4 v4.0.4 h1:38hLf0DsRXh+hOF6HbTni0+5QGTNdw9zbaMD7KAO830= -github.com/avast/retry-go/v4 v4.0.4/go.mod h1:HqmLvS2VLdStPCGDFjSuZ9pzlTqVRldCI4w2dO4m1Ms= +github.com/avast/retry-go/v4 v4.3.3 h1:G56Bp6mU0b5HE1SkaoVjscZjlQb0oy4mezwY/cGH19w= +github.com/avast/retry-go/v4 v4.3.3/go.mod h1:rg6XFaiuFYII0Xu3RDbZQkxCofFwruZKW8oEF1jpWiU= github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.15.78/go.mod h1:E3/ieXAlvM0XWO57iftYVDLLvQ824smPP3ATZkfNZeM= github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go v1.40.45 h1:QN1nsY27ssD/JmW4s83qmSb+uL6DG4GmCDzjmJB4xUI= -github.com/aws/aws-sdk-go v1.40.45/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= +github.com/aws/aws-sdk-go v1.44.122/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= +github.com/aws/aws-sdk-go v1.44.203 h1:pcsP805b9acL3wUqa4JR2vg1k2wnItkDYNvfmcy6F+U= +github.com/aws/aws-sdk-go v1.44.203/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -134,8 +275,6 @@ github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816 h1:41iFGWnSlI2gVpmOtVTJZNodLdLQLn/KsJqFvXwnd/s= github.com/bgentry/speakeasy v0.1.1-0.20220910012023-760eaf8b6816/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/btcsuite/btcd v0.22.3 h1:kYNaWFvOw6xvqP0vR20RP1Zq1DVMBxEO8QN5d1/EfNg= -github.com/btcsuite/btcd v0.22.3/go.mod h1:wqgTSL29+50LRkmOVknEdmt8ZojIzhuWvgu/iptuN7Y= github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf7DClJ3U= github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/btcutil v1.1.2 h1:XLMbX8JQEiwMcYft2EGi8zPUkoa0abKIU6/BJSRsjzQ= @@ -151,15 +290,18 @@ github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cbYE= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cespare/xxhash/v2 v2.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= +github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cheggaaa/pb v1.0.27/go.mod h1:pQciLPpbU0oxA0h+VJYYLxO+XeDQb5pZijXscXHm81s= -github.com/chzyer/logex v1.1.10 h1:Swpa1K6QvQznwJRcfTfQJmTE72DqScAa40E+fbHEXEE= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= -github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8= +github.com/chzyer/logex v1.2.1 h1:XHDu3E6q+gdHgsdTPH6ImJMIp436vR6MPtH8gP05QzM= +github.com/chzyer/logex v1.2.1/go.mod h1:JLbx6lG2kDbNRFnfkgvh4eRJRPX1QCoOIWomwysCBrQ= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= -github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWsoZXJNW3xEE4JJyHa5Q25/sd8= +github.com/chzyer/readline v1.5.1 h1:upd/6fQk4src78LMRzh5vItIt361/o4uq553V8B5sGI= +github.com/chzyer/readline v1.5.1/go.mod h1:Eh+b79XXUwfKfcPLepksvw2tcLE/Ct21YObkaSkeBlk= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/chzyer/test v1.0.0 h1:p3BQDXSxOhOG0P9z6/hGnII4LGiEPOYBhs8asl/fC04= +github.com/chzyer/test v1.0.0/go.mod h1:2JlltgoNkt4TW/z9V/IzDdFaMTM2JPIi26O1pF38GC8= github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= @@ -170,6 +312,7 @@ github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGX github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= +github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= @@ -178,6 +321,12 @@ github.com/cockroachdb/apd/v2 v2.0.2 h1:weh8u7Cneje73dDh+2tEVLUvyBc89iwepWCD8b80 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/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= +github.com/cometbft/cometbft v0.37.0 h1:M005vBaSaugvYYmNZwJOopynQSjwLoDTwflnQ/I/eYk= +github.com/cometbft/cometbft v0.37.0/go.mod h1:Y2MMMN//O5K4YKd8ze4r9jmk4Y7h0ajqILXbH5JQFVs= +github.com/cometbft/cometbft-db v0.7.0 h1:uBjbrBx4QzU0zOEnU8KxoDl18dMNgDh+zZRUE0ucsbo= +github.com/cometbft/cometbft-db v0.7.0/go.mod h1:yiKJIm2WKrt6x8Cyxtq9YTEcIMPcEe4XPxhgX59Fzf0= 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= @@ -185,39 +334,36 @@ github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= 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.1 h1:iDL5qh++NoXxG8hSy93FdYJut4XfgbShIocllGaXx/0= -github.com/cosmos/cosmos-proto v1.0.0-beta.1/go.mod h1:8k2GNZghi5sDRFw/scPL8gMSowT1vDA+5ouxL8GjaUE= -github.com/cosmos/cosmos-sdk v0.47.0-rc2 h1:BwQC41zQXG/pN9DdLaWzYJrC911St5lYOQIoW4Hf5wQ= -github.com/cosmos/cosmos-sdk v0.47.0-rc2/go.mod h1:e0ZEpY/nhVoXAkijdHPdFOJNOXCddfvyFrFLp2QmCCY= +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.1 h1:HnaCYtaAMWZp1SdlwwE1mPJ8kFlZ/TuEJ/ciNXH6Uno= +github.com/cosmos/cosmos-sdk v0.47.1/go.mod h1:14tO5KQaTrl2q3OxBnDRfue7TRN9zkXS0cLutrSqkOo= github.com/cosmos/go-bip39 v0.0.0-20180819234021-555e2067c45d/go.mod h1:tSxLoYXyBmiFeKpvmq4dzayMdCjCnu8uqmCysIGBT2Y= github.com/cosmos/go-bip39 v1.0.0 h1:pcomnQdrdH22njcAatO0yWojsUnCO3y2tNoV1cb6hHY= github.com/cosmos/go-bip39 v1.0.0/go.mod h1:RNJv0H/pOIVgxw6KS7QeX2a0Uo0aKUlfhZ4xuwvCdJw= github.com/cosmos/gogogateway v1.2.0 h1:Ae/OivNhp8DqBi/sh2A8a1D0y638GpL3tkmLQAiKxTE= github.com/cosmos/gogogateway v1.2.0/go.mod h1:iQpLkGWxYcnCdz5iAdLcRBSw3h7NXeOkZ4GUkT+tbFI= github.com/cosmos/gogoproto v1.4.2/go.mod h1:cLxOsn1ljAHSV527CHOtaIP91kK6cCrZETRBrkzItWU= -github.com/cosmos/gogoproto v1.4.4 h1:nVAsgLlAf5jeN0fV7hRlkZvf768zU+dy4pG+hxc2P34= -github.com/cosmos/gogoproto v1.4.4/go.mod h1:/yl6/nLwsZcZ2JY3OrqjRqvqCG9InUMcXRfRjQiF9DU= -github.com/cosmos/gorocksdb v1.2.0 h1:d0l3jJG8M4hBouIZq0mDUHZ+zjOx044J3nGRskwTb4Y= -github.com/cosmos/gorocksdb v1.2.0/go.mod h1:aaKvKItm514hKfNJpUJXnnOWeBnk2GL4+Qw9NHizILw= -github.com/cosmos/iavl v0.19.5-rc.1 h1:4PjF2PdScyPbN1WbXpiQU21YtyonnrMU31xN74g8Rkg= -github.com/cosmos/iavl v0.19.5-rc.1/go.mod h1:X9PKD3J0iFxdmgNLa7b2LYWdsGd90ToV5cAONApkEPw= -github.com/cosmos/ibc-go/v7 v7.0.0-rc0 h1:K/75iNLn/WaBC8kz2C8XTtAWOCGgI0+cO6dbDtP2VeQ= -github.com/cosmos/ibc-go/v7 v7.0.0-rc0/go.mod h1:lHwqedXjafbUCFd5KQBvK5JoHLW5aHXz5vUswTktip8= +github.com/cosmos/gogoproto v1.4.6 h1:Ee7z15dWJaGlgM2rWrK8N2IX7PQcuccu8oG68jp5RL4= +github.com/cosmos/gogoproto v1.4.6/go.mod h1:VS/ASYmPgv6zkPKLjR9EB91lwbLHOzaGCirmKKhncfI= +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/v7 v7.0.0 h1:j4kyywlG0hhDmT9FmSaR5iCIka7Pz7kJTxGWY1nlV9Q= +github.com/cosmos/ibc-go/v7 v7.0.0/go.mod h1:BFh8nKWjr5zeR2OZfhkzdgDzj1+KjRn3aJLpwapStj8= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab h1:I9ialKTQo7248V827Bba4OuKPmk+FPzmTVHsLXaIJWw= github.com/cosmos/ics23/go v0.9.1-0.20221207100636-b1abd8678aab/go.mod h1:2CwqasX5dSD7Hbp/9b6lhK6BwoBDCBldx7gPKRukR60= github.com/cosmos/ledger-cosmos-go v0.12.1 h1:sMBxza5p/rNK/06nBSNmsI/WDqI0pVJFVNihy1Y984w= github.com/cosmos/ledger-cosmos-go v0.12.1/go.mod h1:dhO6kj+Y+AHIOgAe4L9HL/6NDdyyth4q238I9yFpD2g= -github.com/cosmos/rosetta-sdk-go v0.9.0 h1:3mj2naR+GUhUXabtb96WWSsPFZDCYkdtp6r0jffgugg= -github.com/cosmos/rosetta-sdk-go v0.9.0/go.mod h1:2v41yXL25xxAXrczVSnbDHcQH9CgildruDlGQGKW/JU= +github.com/cosmos/rosetta-sdk-go v0.10.0 h1:E5RhTruuoA7KTIXUcMicL76cffyeoyvNybzUGSKFTcM= +github.com/cosmos/rosetta-sdk-go v0.10.0/go.mod h1:SImAZkb96YbwvoRkzSMQB6noNJXFgWl/ENIznEoYQI4= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creachadair/taskgroup v0.3.2 h1:zlfutDS+5XG40AOxcHDSThxKzns8Tnr9jnr6VqkYlkM= -github.com/creachadair/taskgroup v0.3.2/go.mod h1:wieWwecHVzsidg2CsUnFinW1faVN4+kq+TDlRJQ0Wbk= +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= @@ -251,15 +397,16 @@ github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13 h1:fAjc9m62+UWV/WA github.com/dgryski/go-farm v0.0.0-20200201041132-a6ae2369ad13/go.mod h1:SqUrOPUnsFjfmXRMNPybcSiG0BgUW2AuFH8PAnS2iTw= github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68= github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE= -github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v20.10.19+incompatible h1:lzEmjivyNHFHMNAFLXORMBXyGIhw/UP4DvJwvyKYq64= +github.com/docker/docker v20.10.19+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= 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.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +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 h1:VSnTsYCnlFHaM2/igO1h6X3HA71jcobQuxemgkq4zYo= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= +github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY= +github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dvsekhvalnov/jose2go v1.5.0 h1:3j8ya4Z4kMCwT5nXIKFSV84YS+HdqSSO0VsTQxaLAeM= github.com/dvsekhvalnov/jose2go v1.5.0/go.mod h1:QsHjhyTlD/lAVqn/NSbVZmSCGeDehTB/mPZadG+mhXU= github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= @@ -272,6 +419,8 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= +github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= @@ -295,13 +444,14 @@ github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4 github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/gdamore/encoding v1.0.0 h1:+7OoQ1Bc6eTm5niUzBa0Ctsh6JbMW6Ra+YNuAtDBdko= github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= -github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1 h1:QqwPZCwh/k1uYqq6uXSb9TRDhTkfQbO80v8zhnIe5zM= github.com/gdamore/tcell/v2 v2.4.1-0.20210905002822-f057f0a857a1/go.mod h1:Az6Jt+M5idSED2YPGtwnfJV0kXohgdCBPmHGSYc1r04= +github.com/gdamore/tcell/v2 v2.6.0 h1:OKbluoP9VYmJwZwq/iLb4BxwKcwGthaa1YNBJIyCySg= +github.com/gdamore/tcell/v2 v2.6.0/go.mod h1:be9omFATkdr0D9qewWW3d+MEvl5dha+Etb5y65J2H8Y= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= -github.com/gin-gonic/gin v1.7.0 h1:jGB9xAJQ12AIGNB4HguylppmDK1Am9ppF7XnGXXJuoU= +github.com/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= @@ -310,23 +460,21 @@ github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2 github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= github.com/go-kit/kit v0.12.0 h1:e4o3o3IsBfAKQh5Qbbiqyfu97Ku7jrO/JbohvztANh4= github.com/go-kit/kit v0.12.0/go.mod h1:lHd+EkCZPIwYItmGDDRdhinkzX2A1sj+M9biaEaizzs= -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-kit/log v0.2.1 h1:MRVx0/zhvdseW+Gza6N9rVzU/IVzaeE1SFI4raAhmBU= github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1 h1:otpy5pqBCBZ1ng9RQ0dPu4PN7ba75Y/aA+UpowDyNVA= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= +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-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/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no= github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA= -github.com/go-playground/validator/v10 v10.2.0 h1:KgJ0snyC2R9VXYN2rneOtQcw5aHQB1Vv0sFl1UcHBOY= github.com/go-playground/validator/v10 v10.2.0/go.mod h1:uOYAAleCW8F/7oMFd6aG0GOhaH6EGOAJShg8Id5JGkI= +github.com/go-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= @@ -338,16 +486,17 @@ 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= -github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0= +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 h1:kRpU4zq+Pzh4feET49aEWPOzwQy3U2SsbZEQ7QEcif0= github.com/gogo/googleapis v1.4.1-0.20201022092350-68b0159b7869/go.mod h1:5YRNX2z1oM5gXdAkurHa942MDgEJyk02w4OecKY87+c= +github.com/gogo/googleapis v1.4.1 h1:1Yx4Myt7BxzvUr5ldGSbwYiZG6t9wGBZ+8/fX3Wvtq0= +github.com/gogo/googleapis v1.4.1/go.mod h1:2lpHqI5OcWCtVElxXnPt+s8oJvMpySlOyM6xDCrzib4= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0 h1:nfP3RFugxnNRyKgeWd4oI1nYvXpxrx8ck8ZrcizshdQ= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= +github.com/golang/glog v1.1.0 h1:/d3pCKDPWNnvIWe0vVUpNP32qc8U3PDVxySP/y360qE= +github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= @@ -361,6 +510,7 @@ github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= +github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= github.com/golang/mock v1.6.0 h1:ErTB+efbowRARo13NNdxyJji2egdxLGQhRaY+DUumQc= github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -379,8 +529,10 @@ github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QD github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw= +github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= @@ -401,6 +553,8 @@ github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= +github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v0.0.0-20170612174753-24818f796faf/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI= @@ -410,7 +564,8 @@ github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPg 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 h1:d8MncMlErDFTwQGBK1xhv026j9kqhvw1Qv9IbWT1VLQ= +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/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= @@ -423,18 +578,35 @@ github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.2.1 h1:RY7tHKZcRlk788d5WSo/e83gOyyy742E8GSs771ySpg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= +github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= +github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= +github.com/googleapis/enterprise-certificate-proxy v0.2.3 h1:yk9/cqRKtT9wXZSsRH9aurXEpJX+U6FLtpYTdC3R06k= +github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= +github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= +github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= +github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= +github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= +github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= +github.com/googleapis/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.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ= github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= +github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= @@ -470,8 +642,8 @@ github.com/hashicorp/go-cleanhttp v0.5.0/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= -github.com/hashicorp/go-getter v1.6.2 h1:7jX7xcB+uVCliddZgeKyNxv0xoT7qL5KDtH7rU4IqIk= -github.com/hashicorp/go-getter v1.6.2/go.mod h1:IZCrswsZPeWv9IkVnLElzRU/gz/QPi6pZHn4tv6vbwA= +github.com/hashicorp/go-getter v1.7.0 h1:bzrYP+qu/gMrL1au7/aDvkoOVGUJpeKBgbqRHACAFDY= +github.com/hashicorp/go-getter v1.7.0/go.mod h1:W7TalhMmbPmsSMdNjD0ZskARur/9GJ17cfHTRtXV744= github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc= github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= @@ -486,7 +658,6 @@ github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdv github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE= github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.1.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= @@ -501,8 +672,8 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3 h1:aSVUgRRRtOrZOC1fYmY9gV0e9z/Iu+xNVSASWjsuyGU= -github.com/hdevalence/ed25519consensus v0.0.0-20220222234857-c00d1f31bab3/go.mod h1:5PC6ZNPde8bBqU/ewGZig35+UIZtw9Ytxez8/q5ZyFE= +github.com/hdevalence/ed25519consensus v0.1.0 h1:jtBwzzcHuTmFrQN6xQZn6CQEO/V9f7HsjsjeEZ6auqU= +github.com/hdevalence/ed25519consensus v0.1.0/go.mod h1:w3BHWjwJbFU29IRHL1Iqkw3sus+7FctEyM4RqDxYNzo= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= github.com/huandu/go-assert v1.1.5 h1:fjemmA7sSfYHJD7CUqs9qTwwfdNAx7/j2/ZlHXzNB3c= github.com/huandu/go-assert v1.1.5/go.mod h1:yOLvuqZwmcHIC5rIzrBhT7D3Q9c3GFnd0JrPVhn/06U= @@ -516,13 +687,13 @@ github.com/icza/dyno v0.0.0-20220812133438-f0b6f8a18845/go.mod h1:c1tRKs5Tx7E2+u github.com/improbable-eng/grpc-web v0.15.0 h1:BN+7z6uNXZ1tQGcNAuaU1YjsLTApzkjt2tzCixLaUPQ= github.com/improbable-eng/grpc-web v0.15.0/go.mod h1:1sy9HKV4Jt9aEs9JSnkWlRJPuPtwNr0l57L4f878wP8= github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= -github.com/inconshreveable/mousetrap v1.0.1 h1:U3uMjPSQEBMNp1lFxmllqCPM6P5u/Xq7Pgzkat/bFNc= github.com/inconshreveable/mousetrap v1.0.1/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= +github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= +github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/ipfs/go-cid v0.0.7 h1:ysQJVJA3fNDF1qigJbsSQOdjhVLsOEoPdh0+R97k3jY= -github.com/ipfs/go-cid v0.0.7/go.mod h1:6Ux9z5e+HpkQdckYoX1PG/6xqKspzlEIR5SDmgqgC/I= +github.com/ipfs/go-cid v0.2.0 h1:01JTiihFq9en9Vz0lc0VDWvZe/uBonGpzo4THP0vcQ0= +github.com/ipfs/go-cid v0.2.0/go.mod h1:P+HXFDF4CVhaVayiEb4wkAy7zBHxBwsJyt0Y5U6MLro= github.com/jhump/protoreflect v1.12.1-0.20220721211354-060cc04fc18b h1:izTof8BKh/nE1wrKOrloNA5q4odOarjf+Xpe+4qow98= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= 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= @@ -537,7 +708,6 @@ github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= 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.11/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= @@ -550,20 +720,21 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:C github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.10.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= -github.com/klauspost/compress v1.11.2/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.11.7/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/klauspost/compress v1.12.3/go.mod h1:8dP1Hq4DHOhN9w426knH3Rhby4rFm6D8eO+e+Dq5Gzg= -github.com/klauspost/compress v1.15.12 h1:YClS/PImqYbn+UILDnqxQCZ3RehC9N318SU3kElDUEM= -github.com/klauspost/compress v1.15.12/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.15.11/go.mod h1:QPwzmACJjUTFsnSHH934V6woptycfrDDJnH7hvFVbGM= +github.com/klauspost/compress v1.16.3 h1:XuJt9zzcnaz6a16/OU53ZjWp/v7/42WcR5t2a0PcNQY= +github.com/klauspost/compress v1.16.3/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= github.com/klauspost/cpuid/v2 v2.0.4/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= +github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU= +github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= 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= @@ -573,10 +744,12 @@ 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= github.com/libp2p/go-buffer-pool v0.1.0/go.mod h1:N+vh8gMqimBzdKkSMVuydVDq+UV5QTWy5HSiZacSbPg= -github.com/libp2p/go-libp2p-core v0.15.1 h1:0RY+Mi/ARK9DgG1g9xVQLb8dDaaU8tCePMtGALEfBnM= -github.com/libp2p/go-libp2p-core v0.15.1/go.mod h1:agSaboYM4hzB1cWekgVReqV5M4g5M+2eNNejV+1EEhs= -github.com/libp2p/go-openssl v0.0.7 h1:eCAzdLejcNVBzP/iZM9vqHnQm+XyCEbSSIheIPRGNsw= -github.com/libp2p/go-openssl v0.0.7/go.mod h1:unDrJpgy3oFr+rqXsarWifmJuNnJR4chtO1HmaZjggc= +github.com/libp2p/go-libp2p v0.22.0 h1:2Tce0kHOp5zASFKJbNzRElvh0iZwdtG5uZheNW8chIw= +github.com/libp2p/go-libp2p v0.22.0/go.mod h1:UDolmweypBSjQb2f7xutPnwZ/fxioLbMBxSjRksxxU4= +github.com/libp2p/go-libp2p-core v0.20.1 h1:fQz4BJyIFmSZAiTbKV8qoYhEH5Dtv/cVhZbG3Ib/+Cw= +github.com/libp2p/go-libp2p-core v0.20.1/go.mod h1:6zR8H7CvQWgYLsbG4on6oLNSGcyKaYFSEYyDt51+bIY= +github.com/libp2p/go-openssl v0.1.0 h1:LBkKEcUv6vtZIQLVTegAil8jbNpJErQ9AnT+bWV+Ooo= +github.com/libp2p/go-openssl v0.1.0/go.mod h1:OiOxwPpL3n4xlenjx2h7AwSGaFSC/KZvf6gNdOBQMtc= github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY= @@ -588,33 +761,28 @@ github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3v github.com/manifoldco/promptui v0.9.0 h1:3V4HzJk1TtXW1MTZMP7mdlwbBpIinw3HztaIlYthEiA= github.com/manifoldco/promptui v0.9.0/go.mod h1:ka04sppxSGFAtxX0qhlYQjISsg9mR4GWtQEhdbn6Pgg= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= -github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= 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 h1:bq3VjFmv/sOjHtdEhmkEV4x1AJtvUvOJ2PFAZ5+peKQ= -github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +github.com/mattn/go-isatty v0.0.17 h1:BTarxUcIeDqL27Mc+vyvdWYSL28zpIhv3RoTdsLMPng= +github.com/mattn/go-isatty v0.0.17/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= +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= github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.13 h1:lTGmDsbAYt5DmK6OnoV7EuIF1wEIFAcxld6ypU4OSgU= github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= -github.com/mattn/go-sqlite3 v1.14.12 h1:TJ1bhYJPV44phC+IMu1u2K/i5RriLTPe+yc68XDJ1Z0= -github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= +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/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI= -github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= +github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= +github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/mimoo/StrobeGo v0.0.0-20181016162300-f8f6d4d2b643/go.mod h1:43+3pMjjKimDBf5Kr4ZFNGbLql1zKkbImw+fZbw3geM= github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b h1:QrHweqAtyJ9EwCaGHBu1fghwxIPiopAHV06JlXrMHjk= github.com/mimoo/StrobeGo v0.0.0-20220103164710-9a04d6ca976b/go.mod h1:xxLb2ip6sSUts3g1irPVHyk/DGslwQsNOo9I7smJfNU= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g= -github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ= github.com/minio/highwayhash v1.0.2 h1:Aak5U0nElisjDCfPSG79Tgzkn2gl66NxOMspRrKnA/g= github.com/minio/highwayhash v1.0.2/go.mod h1:BQskDq+xkJ12lmlUUi7U0M5Swg3EWR+dLTk+kldvVxY= -github.com/minio/sha256-simd v0.1.1-0.20190913151208-6de447530771/go.mod h1:B5e1o+1/KgNmWrSQK08Y6Z1Vb5pwIktudl0J58iy0KM= github.com/minio/sha256-simd v1.0.0 h1:v1ta+49hkWZyvaKwrQB8elexRqm6Y0aMLjCNsrYxo6g= github.com/minio/sha256-simd v1.0.0/go.mod h1:OuYzVNI5vcoYIAmbIvHPl3N3jUzVedXbKy5RFepssQM= github.com/misko9/go-substrate-rpc-client/v4 v4.0.0-20230316181816-6037bb49fa8d h1:4F9ELzQO+EH/UXBVav0C+xcEjkGXFYRW/+9e1OwK6yM= @@ -623,15 +791,16 @@ github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceT github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0= github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= +github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= +github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= -github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc= +github.com/moby/term v0.0.0-20220808134915-39b0c02b01ae h1:O4SWKdcHVCvYqyDV+9CJA1fcDN2L11Bule0iFy3YlAI= 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= @@ -640,27 +809,22 @@ github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3Rllmb github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= -github.com/mr-tron/base58 v1.1.0/go.mod h1:xcD2VGqlgYjBdcBLw+TuYLr8afG+Hj8g2eTVqeSzSU8= -github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= 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/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/multiformats/go-base32 v0.0.3 h1:tw5+NhuwaOjJCC5Pp82QuXbrmLzWg7uxlMFp8Nq/kkI= -github.com/multiformats/go-base32 v0.0.3/go.mod h1:pLiuGC8y0QR3Ue4Zug5UzK9LjgbkL8NSQj0zQ5Nz/AA= +github.com/multiformats/go-base32 v0.0.4 h1:+qMh4a2f37b4xTNs6mqitDinryCI+tfO2dRVMN9mjSE= +github.com/multiformats/go-base32 v0.0.4/go.mod h1:jNLFzjPZtp3aIARHbJRZIaPuspdH0J6q39uUM5pnABM= github.com/multiformats/go-base36 v0.1.0 h1:JR6TyF7JjGd3m6FbLU2cOxhC0Li8z8dLNGQ89tUg4F4= github.com/multiformats/go-base36 v0.1.0/go.mod h1:kFGE83c6s80PklsHO9sRn2NCoffoRdUUOENyW/Vv6sM= -github.com/multiformats/go-multiaddr v0.4.1 h1:Pq37uLx3hsyNlTDir7FZyU8+cFCTqd5y1KiM2IzOutI= -github.com/multiformats/go-multiaddr v0.4.1/go.mod h1:3afI9HfVW8csiF8UZqtpYRiDyew8pRX7qLIGHu9FLuM= -github.com/multiformats/go-multibase v0.0.3 h1:l/B6bJDQjvQ5G52jw4QGSYeOTZoAwIO77RblWplfIqk= -github.com/multiformats/go-multibase v0.0.3/go.mod h1:5+1R4eQrT3PkYZ24C3W2Ue2tPwIdYQD509ZjSb5y9Oc= -github.com/multiformats/go-multicodec v0.4.1 h1:BSJbf+zpghcZMZrwTYBGwy0CPcVZGWiC72Cp8bBd4R4= -github.com/multiformats/go-multicodec v0.4.1/go.mod h1:1Hj/eHRaVWSXiSNNfcEPcwZleTmdNP81xlxDLnWU9GQ= -github.com/multiformats/go-multihash v0.0.13/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.0.14/go.mod h1:VdAWLKTwram9oKAatUcLxBNUjdtcVwxObEQBtRfuyjc= -github.com/multiformats/go-multihash v0.1.0 h1:CgAgwqk3//SVEw3T+6DqI4mWMyRuDwZtOWcJT0q9+EA= -github.com/multiformats/go-multihash v0.1.0/go.mod h1:RJlXsxt6vHGaia+S8We0ErjhojtKzPP2AH4+kYM7k84= -github.com/multiformats/go-varint v0.0.5/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= +github.com/multiformats/go-multiaddr v0.6.0 h1:qMnoOPj2s8xxPU5kZ57Cqdr0hHhARz7mFsPMIiYNqzg= +github.com/multiformats/go-multiaddr v0.6.0/go.mod h1:F4IpaKZuPP360tOMn2Tpyu0At8w23aRyVqeK0DbFeGM= +github.com/multiformats/go-multibase v0.1.1 h1:3ASCDsuLX8+j4kx58qnJ4YFq/JWTJpCyDW27ztsVTOI= +github.com/multiformats/go-multibase v0.1.1/go.mod h1:ZEjHE+IsUrgp5mhlEAYjMtZwK1k4haNkcaPg9aoe1a8= +github.com/multiformats/go-multicodec v0.5.0 h1:EgU6cBe/D7WRwQb1KmnBvU7lrcFGMggZVTPtOW9dDHs= +github.com/multiformats/go-multicodec v0.5.0/go.mod h1:DiY2HFaEp5EhEXb/iYzVAunmyX/aSFMxq2KMKfWEues= +github.com/multiformats/go-multihash v0.2.1 h1:aem8ZT0VA2nCHHk7bPJ1BjUbHNciqZC/d16Vve9l108= +github.com/multiformats/go-multihash v0.2.1/go.mod h1:WxoMcYG85AZVQUyRyo9s4wULvW5qrI9vb2Lt6evduFc= github.com/multiformats/go-varint v0.0.6 h1:gk85QWKxh3TazbLxED/NlDVv8+q+ReFJk7Y2W/KhfNY= github.com/multiformats/go-varint v0.0.6/go.mod h1:3Ls8CIEsrijN6+B7PbrXRPxHRPuXSrVKRY101jdMZYE= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= @@ -697,8 +861,8 @@ github.com/onsi/gomega v1.20.0 h1:8W0cWlwFkflGPLltQvLRB7ZVD5HuP6ng320w2IS245Q= 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.0.3-0.20211202183452-c5a74bcca799 h1:rc3tiVYb5z54aKaDfakKn0dDjIyPpTtszkjuMzyt7ec= -github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= +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/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= @@ -715,16 +879,18 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.0.6 h1:nrzqCb7j9cDFj2coyLNLaZuJTLjWjlaz6nvTvIwycIU= github.com/pelletier/go-toml/v2 v2.0.6/go.mod h1:eumQOmlWiOPt5WriQQqoM5y18pDHwha2N+QD+EUNTek= github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5 h1:q2e307iGHPdTGp0hoxKjt1H5pDo6utceo3dQVK3I5XQ= github.com/petermattis/goid v0.0.0-20180202154549-b0b1615b78e5/go.mod h1:jvVRKCrJTQWu0XVbaOlby/2lO20uSCHEMzzplHXte1o= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d h1:htwtWgtQo8YS6JFWWi2DNgY0RwSGJ1ruMoxY6CUUclk= +github.com/petermattis/goid v0.0.0-20221215004737-a150e88a970d/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/pierrec/xxHash v0.1.5 h1:n/jBpwTHiER4xYvK3/CdPVnLDPchj8eTJFFLUb4QHBo= github.com/pierrec/xxHash v0.1.5/go.mod h1:w2waW5Zoa/Wc4Yqe0wgrIYAGKqRMf7czn2HNKXmuL+I= -github.com/pierrre/gotestcover v0.0.0-20160517101806-924dca7d15f0/go.mod h1:4xpMLz7RBWyB+ElzHu8Llua96TRCB3YwX+l5EP1wmHk= 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= @@ -740,8 +906,6 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU= github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= github.com/prometheus/client_golang v1.14.0 h1:nJdhIvne2eSX/XRAFV9PcvFFRbrjbcTUj0VP62TMhnw= github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= @@ -758,20 +922,16 @@ github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt2 github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= +github.com/prometheus/common v0.40.0 h1:Afz7EVRqGg2Mqqf4JuF9vdvp1pi220m55Pi9T2JnO4Q= +github.com/prometheus/common v0.40.0/go.mod h1:L65ZJPSmfn/UBWLQIHV7dBrKFidB/wPlF1y5TlSt9OE= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.3.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +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/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= @@ -780,23 +940,21 @@ github.com/rcrowley/go-metrics v0.0.0-20201227073835-cf1acfcdf475/go.mod h1:bCqn 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 h1:OdAsTTz6OkFY5QxjkYwrChwuRruF69c169dPK26NUlk= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= +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/tview v0.0.0-20220307222120-9994674d60a8 h1:xe+mmCnDN82KhC010l3NfYlA8ZbOuzbXAzSYBa6wbMc= github.com/rivo/tview v0.0.0-20220307222120-9994674d60a8/go.mod h1:WIfMkQNY+oq/mWwtsjOYHIZBuwthioY2srOmljJkTnk= -github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= -github.com/robertkrimen/godocdown v0.0.0-20130622164427-0bfa04905481/go.mod h1:C9WhFzY47SzYBIvzFqSvHIR6ROgDo4TtdTuRaOMjF/s= +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= -github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= +github.com/rogpeppe/go-internal v1.9.0 h1:73kH8U+JUqXU8lRuOHeVHaa/SZPifC7BkcraZVejAe8= github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= -github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.4.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.28.0 h1:MirSo27VyNi7RJYP3078AA1+Cyzd2GB66qy3aUHvsWY= -github.com/rs/zerolog v1.28.0/go.mod h1:NILgTygv/Uej1ra5XxGf82ZFSLk58MFGAUS2o6usyD0= +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/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= @@ -860,20 +1018,19 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8= +github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/subosito/gotenv v1.4.2 h1:X1TuBLAMDFbaTAChgCBLu3DU3UPyELpnF2jjJ2cz/S8= github.com/subosito/gotenv v1.4.2/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= -github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a h1:1ur3QoCqvE5fl+nylMaIr9PVV1w343YRDtsy+Rwu7XI= -github.com/syndtr/goleveldb v1.0.1-0.20220614013038-64ee5596c38a/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d h1:vfofYNRScrDdvS342BElfbETmL1Aiz3i2t0zfRj16Hs= +github.com/syndtr/goleveldb v1.0.1-0.20220721030215-126854af5e6d/go.mod h1:RRCYJbIwD5jmqPI9XoAFR0OcDxqUctll6zUj/+B4S48= +github.com/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/go-amino v0.16.0 h1:GyhmgQKvqF82e2oZeuMSp9JTN0N09emoSZlb2lyGa2E= github.com/tendermint/go-amino v0.16.0/go.mod h1:TQU0M1i/ImAo+tYpZi73AU3V/dKeCoMC9Sphe2ZwGME= -github.com/tendermint/tendermint v0.37.0-rc2 h1:2n1em+jfbhSv6QnBj8F6KHCpbIzZCB8KgcjidJUQNlY= -github.com/tendermint/tendermint v0.37.0-rc2/go.mod h1:uYQO9DRNPeZROa9X3hJOZpYcVREDC2/HST+EiU5g2+A= -github.com/tendermint/tm-db v0.6.7 h1:fE00Cbl0jayAoqlExN6oyQJ7fR/ZtoVOmvPJ//+shu8= -github.com/tendermint/tm-db v0.6.7/go.mod h1:byQDzFkZV1syXr/ReXS808NxA2xvyuuVgXOJ/088L6I= -github.com/tidwall/btree v1.5.2 h1:5eA83Gfki799V3d3bJo9sWk+yL2LRoTEah3O/SA6/8w= -github.com/tidwall/btree v1.5.2/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY= +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/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -887,8 +1044,9 @@ github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVM github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= -github.com/ulikunitz/xz v0.5.8 h1:ERv8V6GKqVi23rgu5cj9pVfVzJbOqAY2Ntl88O6c2nQ= -github.com/ulikunitz/xz v0.5.8/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +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= github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= @@ -898,14 +1056,14 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.0/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= +github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/zondax/hid v0.9.1 h1:gQe66rtmyZ8VeGFcOpbuH3r7erYtNEAezCAYu8LdkJo= github.com/zondax/hid v0.9.1/go.mod h1:l5wttcP0jwtdLjqjMMWFVEE7d1zO0jvSPA9OPZxWpEM= -github.com/zondax/ledger-go v0.14.0 h1:dlMC7aO8Wss1CxBq2I96kZ69Nh1ligzbs8UWOtq/AsA= -github.com/zondax/ledger-go v0.14.0/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= +github.com/zondax/ledger-go v0.14.1 h1:Pip65OOl4iJ84WTpA4BKChvOufMhhbxED3BaihoZN4c= +github.com/zondax/ledger-go v0.14.1/go.mod h1:fZ3Dqg6qcdXWSOJFKMG8GCTnD7slO/RL2feOQv8K320= go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.6 h1:/ecaJf0sk1l4l6V4awd65v2C3ILy7MSj+s/x1ADCIMU= -go.etcd.io/bbolt v1.3.6/go.mod h1:qXsaaIqmgQH0T+OPdb99Bf+PKfBBQVAdyD6TY9G8XM4= +go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= +go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= @@ -915,6 +1073,7 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= +go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= @@ -922,21 +1081,18 @@ go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.9.0 h1:ECmE8Bn/WFTYwEW/bpKD3M8VtR/zQVbavAoalC1PYyE= -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/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.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8= go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak= go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -go.uber.org/zap v1.21.0 h1:WefMeulhovoZ2sYXz7st6K0sLj7bBhpiFaud4r4zST8= -go.uber.org/zap v1.21.0/go.mod h1:wjWOCqI0f2ZZrJF/UufIOkiC8ii6tm1iqIsLo76RfJw= +go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= +go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= golang.org/x/crypto v0.0.0-20170613210332-850760c427c5/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= @@ -944,17 +1100,16 @@ golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= -golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A= +golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= 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= @@ -966,8 +1121,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-20221019170559-20944726eadf h1:nFVjjKDgNY37+ZSYCJmtYf7tOlfQswHqplG2eosjOMg= -golang.org/x/exp v0.0.0-20221019170559-20944726eadf/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29 h1:ooxPy7fPvB4kwsA2h+iBNHkAbp/4JxTSwCmvdjEYmug= +golang.org/x/exp v0.0.0-20230321023759-10a507213a29/go.mod h1:CxIveKay+FTh1D0yPZemJVgC/95VzuuOLq5Qi4xnoYc= 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= @@ -981,6 +1136,7 @@ golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRu golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= +golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= @@ -992,8 +1148,9 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 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 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= +golang.org/x/mod v0.9.0 h1:KENHtAZL2y3NLMYZeHY9DW8HW8V+kQyJsY/V9JlKvCs= +golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1035,17 +1192,27 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= +golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210805182204-aaa1db679c0d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.4.0 h1:Q5QPcMlvfxFTAPV0+07Xz/MpK9NTXu2VDUuy0FeMfaU= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= +golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= +golang.org/x/net v0.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.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ= +golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= 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= @@ -1055,10 +1222,24 @@ golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= +golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783 h1:nt+Q6cXKz4MosCSpnbMtqiQ8Oz0pxTef2B4Vca2lvfk= +golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= +golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= +golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= +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.5.0 h1:HuArIo48skDwlrvM3sEdHXElYslAMsf3KwRkkW4MC4s= +golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= 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= @@ -1070,6 +1251,9 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-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/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -1120,47 +1304,67 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210819135213-f52c844e1c1c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211107104306-e0b2ad06fe42/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220315194320-039c03cc5b86/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220517195934-5e4e11fc645e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20221010170243-090e33056c14/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ= +golang.org/x/sys v0.6.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-20201210144234-2321bbc49cbf/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= +golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= +golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw= +golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= 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= @@ -1170,8 +1374,10 @@ golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.5.0 h1:OLmvp0KP+FVG99Ct/qFiL/Fhk4zp4QQnZ7b2U+5piUM= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.4.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 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68= +golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= 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= @@ -1225,7 +1431,6 @@ golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= @@ -1234,15 +1439,20 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.7/go.mod h1:LGqMHiF4EqQNHR1JncWGqT5BVaXmza+X+BDGol+dOxo= -golang.org/x/tools v0.1.12 h1:VveCTK38A2rkS8ZqFY25HIDFscX5X9OoEhJd3quQmXU= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= +golang.org/x/tools v0.7.0 h1:W4OVu8VVOaIO0yzWMNdepAulS7YfoS3Zabrm8DOXXU4= +golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= +golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= @@ -1265,8 +1475,37 @@ google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz513 google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.107.0 h1:I2SlFjD8ZWabaIFOfeEDg3pf0BHJDh6iYQ1ic3Yu/UU= -google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= +google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= +google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= +google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= +google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= +google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= +google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= +google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= +google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= +google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= +google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= +google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= +google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= +google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= +google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= +google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= +google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= +google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= +google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= +google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= +google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= +google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= +google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= +google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= +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.110.0 h1:l+rh0KYUooe9JGbGVx71tbFo4SMbMTXK3I3ia2QSEeU= +google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= 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= @@ -1317,10 +1556,76 @@ google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6D google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210126160654-44e461bb6506/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= +google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= +google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= +google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= +google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= +google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= +google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= +google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= +google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= +google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= +google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= +google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= google.golang.org/genproto v0.0.0-20220314164441-57ef72a4c106/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef h1:uQ2vjV/sHTsWSqdKeLqmwitzgvjMl7o4IdtHwUDXSJY= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= +google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= +google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= +google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= +google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= +google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= +google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= +google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= +google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= +google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= +google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= +google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= +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-20230216225411-c8e22ba71e44 h1:EfLuoKW5WfkgVdDy7dTK8qSbH37AX5mj/MFh+bGPz14= +google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= 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= @@ -1345,10 +1650,26 @@ google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= +google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= +google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= +google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= +google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= +google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= +google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.52.3 h1:pf7sOysg4LdgBqduXveGKrcEwbStiK2rtfghdzlUYDQ= -google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= +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.54.0 h1:EhTqbhiYeixwWQtAEZAxmV9MGqcjEU2mFx52xCzNyag= +google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= +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= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -1362,8 +1683,10 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w= +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.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM= +google.golang.org/protobuf v1.29.1/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= @@ -1397,6 +1720,7 @@ gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= 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= @@ -1408,47 +1732,36 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54= launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM= -lukechampine.com/blake3 v1.1.6 h1:H3cROdztr7RCfoaTpGZFQsrqvweFLrqS73j7L7cmR5c= -lukechampine.com/blake3 v1.1.6/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= -lukechampine.com/uint128 v1.1.1 h1:pnxCASz787iMf+02ssImqk6OLt+Z5QHMoZyUXR4z6JU= -lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc/v3 v3.36.0 h1:0kmRkTmqNidmu3c7BNDSdVHCxXCkWLmWmCIVX4LUboo= -modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= -modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= -modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.6 h1:3l18poV+iUemQ98O3X5OMr97LOqlzis+ytivU4NqGhA= -modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= +lukechampine.com/blake3 v1.1.7 h1:GgRMhmdsuK8+ii6UZFDL8Nb+VyMwadAgcJyfYHxG6n0= +lukechampine.com/blake3 v1.1.7/go.mod h1:tkKEOtDkNtklkXtLNEOGNq5tcV90tJiA1vAA12R78LA= +lukechampine.com/uint128 v1.2.0 h1:mBi/5l91vocEN8otkC5bDLhi2KdCticRiwbdB0O+rjI= +lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= +modernc.org/cc/v3 v3.40.0 h1:P3g79IUS/93SYhtoeaHW+kRCIrYaxJ27MFPv+7kaTOw= +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 v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= -modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= -modernc.org/libc v1.16.7 h1:qzQtHhsZNpVPpeCu+aMIQldXeV1P0vRhSqCL0nOIJOA= -modernc.org/libc v1.16.7/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1 h1:ij3fYGe8zBF4Vu+g0oT7mB06r8sqGWKuJu1yXeR4by8= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.1.1 h1:bDOL0DIDLQv7bWhP3gMvIrnoFw+Eo6F7a2QK9HPDiFU= -modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/opt v0.1.1 h1:/0RX92k9vwVeDXj+Xn23DKp2VJubL7k8qNffND6qn3A= -modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.17.3 h1:iE+coC5g17LtByDYDWKpR6m2Z9022YrSh3bumwOnIrI= -modernc.org/sqlite v1.17.3/go.mod h1:10hPVYar9C0kfXuTWGz8s0XtB8uAGymUy51ZzStYe3k= -modernc.org/strutil v1.1.1 h1:xv+J1BXY3Opl2ALrBwyfEikFAj8pmqcpnfmuwUwcozs= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/tcl v1.13.1 h1:npxzTwFTZYM8ghWicVIX1cRWzj7Nd8i6AqqX2p+IYao= -modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= -modernc.org/token v1.0.0 h1:a0jaWiNMDhDUtqOj09wvjWWAqd3q7WpBulmL9H2egsk= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/z v1.5.1 h1:RTNHdsrOpeoSeOF4FbzTo8gBYByaJ5xT7NgZ9ZqRiJM= -modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= +modernc.org/libc v1.22.3 h1:D/g6O5ftAfavceqlLOFwaZuA5KYafKwmr30A6iSqoyY= +modernc.org/libc v1.22.3/go.mod h1:MQrloYP209xa2zHome2a8HLiLm6k0UT8CoHpV74tOFw= +modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= +modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= +modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= +modernc.org/memory v1.5.0/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= +modernc.org/opt v0.1.3 h1:3XOZf2yznlhC+ibLltsDGzABUGVx8J6pnFMS3E4dcq4= +modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= +modernc.org/sqlite v1.21.1 h1:GyDFqNnESLOhwwDRaHGdp2jKLDzpyT/rNLglX3ZkMSU= +modernc.org/sqlite v1.21.1/go.mod h1:XwQ0wZPIh1iKb5mkvCJ3szzbhk+tykC8ZWqTRTgYRwI= +modernc.org/strutil v1.1.3 h1:fNMm+oJklMGYfU9Ylcywl0CO5O6nTfaowNsh2wpPjzY= +modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= +modernc.org/tcl v1.15.1 h1:mOQwiEK4p7HruMZcwKTZPw/aqtGM4aY00uzWhlKKYws= +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.0 h1:xkDw/KepgEjeizO2sNco+hqYkU12taxQFqPEmgm1GWE= 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.3 h1:163N50IHFqr1phZens4FQOdPgfJscR7a562mjQqeo4M= -pgregory.net/rapid v0.5.3/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= +pgregory.net/rapid v0.5.5 h1:jkgx1TjbQPD/feRoK+S/mXw9e1uj6WilpHrXJowi6oA= +pgregory.net/rapid v0.5.5/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= diff --git a/ibc/relayer.go b/ibc/relayer.go index 9594a3fc9..8224332e2 100644 --- a/ibc/relayer.go +++ b/ibc/relayer.go @@ -64,11 +64,8 @@ type Relayer interface { // StopRelayer stops a relayer that started work through StartRelayer. StopRelayer(ctx context.Context, rep RelayerExecReporter) error - // FlushPackets flushes any outstanding packets and then returns. - FlushPackets(ctx context.Context, rep RelayerExecReporter, pathName string, channelID string) error - - // FlushAcknowledgements flushes any outstanding acknowledgements and then returns. - FlushAcknowledgements(ctx context.Context, rep RelayerExecReporter, pathName string, channelID string) error + // Flush flushes any outstanding packets and then returns. + Flush(ctx context.Context, rep RelayerExecReporter, pathName string, channelID string) error // CreateClients performs the client handshake steps necessary for creating a light client // on src that tracks the state of dst, and a light client on dst that tracks the state of src. @@ -97,7 +94,7 @@ type Relayer interface { // "env" are environment variables in the format "MY_ENV_VAR=value" Exec(ctx context.Context, rep RelayerExecReporter, cmd []string, env []string) RelayerExecResult - // Set the wasm client contract hash in the chain's config if the counterparty chain in a path used 08-wasm + // Set the wasm client contract hash in the chain's config if the counterparty chain in a path used 08-wasm // to instantiate the client. SetClientContractHash(ctx context.Context, rep RelayerExecReporter, cfg ChainConfig, hash string) error } diff --git a/ibc/types.go b/ibc/types.go index e538e31eb..788bc9ef7 100644 --- a/ibc/types.go +++ b/ibc/types.go @@ -40,6 +40,8 @@ type ChainConfig struct { ConfigFileOverrides map[string]any // Non-nil will override the encoding config, used for cosmos chains only. EncodingConfig *testutil.TestEncodingConfig + // Required when the chain uses the new sub commands for genesis (https://github.com/cosmos/cosmos-sdk/pull/14149) + UsingNewGenesisCommand bool `yaml:"using-new-genesis-command"` } func (c ChainConfig) Clone() ChainConfig { diff --git a/interchain_test.go b/interchain_test.go index 17f476ddd..77950022a 100644 --- a/interchain_test.go +++ b/interchain_test.go @@ -25,7 +25,15 @@ import ( clienttypes "github.com/cosmos/ibc-go/v7/modules/core/02-client/types" ) -func TestInterchain_DuplicateChain(t *testing.T) { +func TestInterchain_DuplicateChain_CosmosRly(t *testing.T) { + duplicateChainTest(t, ibc.CosmosRly) +} + +func TestInterchain_DuplicateChain_HermesRelayer(t *testing.T) { + duplicateChainTest(t, ibc.Hermes) +} + +func duplicateChainTest(t *testing.T, relayerImpl ibc.RelayerImplementation) { if testing.Short() { t.Skip("skipping in short mode") } @@ -45,7 +53,7 @@ func TestInterchain_DuplicateChain(t *testing.T) { gaia0, gaia1 := chains[0], chains[1] - r := interchaintest.NewBuiltinRelayerFactory(ibc.CosmosRly, zaptest.NewLogger(t)).Build( + r := interchaintest.NewBuiltinRelayerFactory(relayerImpl, zaptest.NewLogger(t)).Build( t, client, network, ) @@ -73,7 +81,15 @@ func TestInterchain_DuplicateChain(t *testing.T) { _ = ic.Close() } -func TestInterchain_GetRelayerWallets(t *testing.T) { +func TestInterchain_GetRelayerWallets_CosmosRly(t *testing.T) { + getRelayerWalletsTest(t, ibc.CosmosRly) +} + +func TestInterchain_GetRelayerWallets_HermesRelayer(t *testing.T) { + getRelayerWalletsTest(t, ibc.Hermes) +} + +func getRelayerWalletsTest(t *testing.T, relayerImpl ibc.RelayerImplementation) { if testing.Short() { t.Skip("skipping in short mode") } @@ -93,7 +109,7 @@ func TestInterchain_GetRelayerWallets(t *testing.T) { gaia0, gaia1 := chains[0], chains[1] - r := interchaintest.NewBuiltinRelayerFactory(ibc.CosmosRly, zaptest.NewLogger(t)).Build( + r := interchaintest.NewBuiltinRelayerFactory(relayerImpl, zaptest.NewLogger(t)).Build( t, client, network, ) @@ -229,7 +245,15 @@ func TestInterchain_CreateUser(t *testing.T) { }) } -func TestCosmosChain_BroadcastTx(t *testing.T) { +func TestCosmosChain_BroadcastTx_CosmosRly(t *testing.T) { + broadcastTxCosmosChainTest(t, ibc.CosmosRly) +} + +func TestCosmosChain_BroadcastTx_HermesRelayer(t *testing.T) { + broadcastTxCosmosChainTest(t, ibc.Hermes) +} + +func broadcastTxCosmosChainTest(t *testing.T, relayerImpl ibc.RelayerImplementation) { if testing.Short() { t.Skip("skipping in short mode") } @@ -249,7 +273,7 @@ func TestCosmosChain_BroadcastTx(t *testing.T) { gaia0, gaia1 := chains[0], chains[1] - r := interchaintest.NewBuiltinRelayerFactory(ibc.CosmosRly, zaptest.NewLogger(t)).Build( + r := interchaintest.NewBuiltinRelayerFactory(relayerImpl, zaptest.NewLogger(t)).Build( t, client, network, ) diff --git a/internal/blockdb/messages_view_test.go b/internal/blockdb/messages_view_test.go index 6a7ed4d00..e88d9f85b 100644 --- a/internal/blockdb/messages_view_test.go +++ b/internal/blockdb/messages_view_test.go @@ -278,13 +278,13 @@ WHERE type = "/ibc.applications.transfer.v1.MsgTransfer" AND chain_id = ? return } - if !rf.Capabilities()[relayer.FlushPackets] { - t.Skip("cannot continue due to missing capability FlushPackets") + if !rf.Capabilities()[relayer.Flush] { + t.Skip("cannot continue due to missing capability Flush") } - t.Run("relay packet", func(t *testing.T) { - require.NoError(t, r.FlushPackets(ctx, eRep, pathName, gaia0ChannelID)) - require.NoError(t, testutil.WaitForBlocks(ctx, 2, gaia0)) + t.Run("relay", func(t *testing.T) { + require.NoError(t, r.Flush(ctx, eRep, pathName, gaia0ChannelID)) + require.NoError(t, testutil.WaitForBlocks(ctx, 5, gaia0)) const qMsgRecvPacket = `SELECT port_id, channel_id, counterparty_port_id, counterparty_channel_id @@ -293,31 +293,19 @@ WHERE type = "/ibc.core.channel.v1.MsgRecvPacket" AND chain_id = ? ` var portID, channelID, counterpartyPortID, counterpartyChannelID string + require.NoError(t, db.QueryRow(qMsgRecvPacket, gaia1ChainID).Scan(&portID, &channelID, &counterpartyPortID, &counterpartyChannelID)) require.Equal(t, portID, gaia0Port) require.Equal(t, channelID, gaia0ChannelID) require.Equal(t, counterpartyPortID, gaia1Port) require.Equal(t, counterpartyChannelID, gaia1ChannelID) - }) - if t.Failed() { - return - } - - if !rf.Capabilities()[relayer.FlushAcknowledgements] { - t.Skip("cannot continue due to missing capability FlushAcknowledgements") - } - - t.Run("relay acknowledgement", func(t *testing.T) { - require.NoError(t, r.FlushAcknowledgements(ctx, eRep, pathName, gaia0ChannelID)) - require.NoError(t, testutil.WaitForBlocks(ctx, 2, gaia1)) const qMsgAck = `SELECT port_id, channel_id, counterparty_port_id, counterparty_channel_id FROM v_cosmos_messages WHERE type = "/ibc.core.channel.v1.MsgAcknowledgement" AND chain_id = ? ` - var portID, channelID, counterpartyPortID, counterpartyChannelID string require.NoError(t, db.QueryRow(qMsgAck, gaia0ChainID).Scan(&portID, &channelID, &counterpartyPortID, &counterpartyChannelID)) require.Equal(t, portID, gaia0Port) diff --git a/internal/dockerutil/container_lifecycle.go b/internal/dockerutil/container_lifecycle.go new file mode 100644 index 000000000..d16e90d45 --- /dev/null +++ b/internal/dockerutil/container_lifecycle.go @@ -0,0 +1,147 @@ +package dockerutil + +import ( + "context" + "fmt" + "net" + "strings" + "time" + + dockertypes "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" + dockerclient "github.com/docker/docker/client" + "github.com/docker/docker/errdefs" + "github.com/docker/go-connections/nat" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "go.uber.org/zap" +) + +type ContainerLifecycle struct { + log *zap.Logger + client *dockerclient.Client + containerName string + id string + preStartListeners Listeners +} + +func NewContainerLifecycle(log *zap.Logger, client *dockerclient.Client, containerName string) *ContainerLifecycle { + return &ContainerLifecycle{ + log: log, + client: client, + containerName: containerName, + } +} + +func (c *ContainerLifecycle) CreateContainer( + ctx context.Context, + testName string, + networkID string, + image ibc.DockerImage, + ports nat.PortSet, + volumeBinds []string, + hostName string, + cmd []string, +) error { + imageRef := image.Ref() + c.log.Info( + "Will run command", + zap.String("image", imageRef), + zap.String("container", c.containerName), + zap.String("command", strings.Join(cmd, " ")), + ) + + pb, listeners, err := GeneratePortBindings(ports) + if err != nil { + return fmt.Errorf("failed to generate port bindings: %w", err) + } + + c.preStartListeners = listeners + + cc, err := c.client.ContainerCreate( + ctx, + &container.Config{ + Image: imageRef, + + Entrypoint: []string{}, + Cmd: cmd, + + Hostname: hostName, + + Labels: map[string]string{CleanupLabel: testName}, + + ExposedPorts: ports, + }, + &container.HostConfig{ + Binds: volumeBinds, + PortBindings: pb, + PublishAllPorts: true, + AutoRemove: false, + DNS: []string{}, + }, + &network.NetworkingConfig{ + EndpointsConfig: map[string]*network.EndpointSettings{ + networkID: {}, + }, + }, + nil, + c.containerName, + ) + if err != nil { + listeners.CloseAll() + c.preStartListeners = []net.Listener{} + return err + } + c.id = cc.ID + return nil +} + +func (c *ContainerLifecycle) StartContainer(ctx context.Context) error { + // lock port allocation for the time between freeing the ports from the + // temporary listeners to the consumption of the ports by the container + mu.RLock() + defer mu.RUnlock() + + c.preStartListeners.CloseAll() + c.preStartListeners = []net.Listener{} + + if err := StartContainer(ctx, c.client, c.id); err != nil { + return err + } + + c.log.Info("Container started", zap.String("container", c.containerName)) + + return nil +} + +func (c *ContainerLifecycle) StopContainer(ctx context.Context) error { + timeout := 30 * time.Second + return c.client.ContainerStop(ctx, c.id, &timeout) +} + +func (c *ContainerLifecycle) RemoveContainer(ctx context.Context) error { + err := c.client.ContainerRemove(ctx, c.id, dockertypes.ContainerRemoveOptions{ + Force: true, + RemoveVolumes: true, + }) + if err != nil && !errdefs.IsNotFound(err) { + return fmt.Errorf("remove container %s: %w", c.containerName, err) + } + return nil +} + +func (c *ContainerLifecycle) ContainerID() string { + return c.id +} + +func (c *ContainerLifecycle) GetHostPorts(ctx context.Context, portIDs ...string) ([]string, error) { + cjson, err := c.client.ContainerInspect(ctx, c.id) + if err != nil { + return nil, err + } + ports := make([]string, len(portIDs)) + for i, p := range portIDs { + ports[i] = GetHostPort(cjson, p) + } + return ports, nil +} diff --git a/internal/dockerutil/filewriter.go b/internal/dockerutil/filewriter.go index 44bde3f4b..7b66ca2f2 100644 --- a/internal/dockerutil/filewriter.go +++ b/internal/dockerutil/filewriter.go @@ -5,7 +5,6 @@ import ( "bytes" "context" "fmt" - "path" "time" "github.com/docker/docker/api/types" @@ -48,10 +47,10 @@ func (w *FileWriter) WriteFile(ctx context.Context, volumeName, relPath string, Cmd: []string{ // Take the uid and gid of the mount path, // and set that as the owner of the new relative path. - `chown "$(stat -c '%u:%g' "$1")" "$2"`, + `chown -R "$(stat -c '%u:%g' "$1")" "$2"`, "_", // Meaningless arg0 for sh -c with positional args. mountPath, - path.Join(mountPath, relPath), + mountPath, }, // Use root user to avoid permission issues when reading files from the volume. diff --git a/internal/dockerutil/ports.go b/internal/dockerutil/ports.go new file mode 100644 index 000000000..a4f12db1a --- /dev/null +++ b/internal/dockerutil/ports.go @@ -0,0 +1,72 @@ +package dockerutil + +import ( + "fmt" + "net" + "sync" + + "github.com/docker/go-connections/nat" +) + +var mu sync.RWMutex + +type Listeners []net.Listener + +func (l Listeners) CloseAll() { + for _, listener := range l { + listener.Close() + } +} + +// openListenerOnFreePort opens the next free port +func openListenerOnFreePort() (*net.TCPListener, error) { + addr, err := net.ResolveTCPAddr("tcp", "localhost:0") + if err != nil { + return nil, err + } + + mu.Lock() + defer mu.Unlock() + l, err := net.ListenTCP("tcp", addr) + if err != nil { + return nil, err + } + + return l, nil +} + +// nextAvailablePort generates a docker PortBinding by finding the next available port. +// The listener will be closed in the case of an error, otherwise it will be left open. +// This allows multiple nextAvailablePort calls to find multiple available ports +// before closing them so they are available for the PortBinding. +func nextAvailablePort() (nat.PortBinding, *net.TCPListener, error) { + l, err := openListenerOnFreePort() + if err != nil { + l.Close() + return nat.PortBinding{}, nil, err + } + + return nat.PortBinding{ + HostIP: "0.0.0.0", + HostPort: fmt.Sprint(l.Addr().(*net.TCPAddr).Port), + }, l, nil +} + +// GeneratePortBindings will find open ports on the local +// machine and create a PortBinding for every port in the portSet. +func GeneratePortBindings(portSet nat.PortSet) (nat.PortMap, Listeners, error) { + m := make(nat.PortMap) + listeners := make(Listeners, 0, len(portSet)) + + for p := range portSet { + pb, l, err := nextAvailablePort() + if err != nil { + listeners.CloseAll() + return nat.PortMap{}, nil, err + } + listeners = append(listeners, l) + m[p] = []nat.PortBinding{pb} + } + + return m, listeners, nil +} diff --git a/internal/dockerutil/startcontainer.go b/internal/dockerutil/startcontainer.go index e42699b53..a4a3153c5 100644 --- a/internal/dockerutil/startcontainer.go +++ b/internal/dockerutil/startcontainer.go @@ -2,37 +2,25 @@ package dockerutil import ( "context" - "errors" "time" - "github.com/avast/retry-go/v4" "github.com/docker/docker/api/types" "github.com/docker/docker/client" ) // StartContainer attempts to start the container with the given ID. -// If the request times out, it retries a certain number of times before failing. -// Any other failure modes stop immediately. func StartContainer(ctx context.Context, cli *client.Client, id string) error { - return retry.Do( - func() error { - retryCtx, cancel := context.WithTimeout(ctx, 5*time.Second) - defer cancel() + // add a deadline for the request if the calling context does not provide one + if _, hasDeadline := ctx.Deadline(); !hasDeadline { + var cancel func() + ctx, cancel = context.WithTimeout(ctx, 30*time.Second) + defer cancel() + } - err := cli.ContainerStart(retryCtx, id, types.ContainerStartOptions{}) - if err != nil { - // One special case: retryCtx timed out and the outer ctx didn't. - if errors.Is(err, context.DeadlineExceeded) && ctx.Err() == nil { - return err - } + err := cli.ContainerStart(ctx, id, types.ContainerStartOptions{}) + if err != nil { + return err + } - // Otherwise, assume the error cannot be retried. - return retry.Unrecoverable(err) - } - - return nil - }, - retry.Context(ctx), - retry.DelayType(retry.FixedDelay), - ) + return nil } diff --git a/relayer/capability.go b/relayer/capability.go index 820be4c14..9babf6bc4 100644 --- a/relayer/capability.go +++ b/relayer/capability.go @@ -15,9 +15,8 @@ const ( TimestampTimeout Capability = iota HeightTimeout - // Whether the relayer supports a one-off flush packets or flush acknowledgements command. - FlushPackets - FlushAcknowledgements + // Whether the relayer supports a one-off flush command. + Flush ) // FullCapabilities returns a mapping of all known relayer features to true, @@ -29,7 +28,6 @@ func FullCapabilities() map[Capability]bool { TimestampTimeout: true, HeightTimeout: true, - FlushPackets: true, - FlushAcknowledgements: true, + Flush: true, } } diff --git a/relayer/capability_string.go b/relayer/capability_string.go index ae6e55e5c..fe9d5090b 100644 --- a/relayer/capability_string.go +++ b/relayer/capability_string.go @@ -10,13 +10,12 @@ func _() { var x [1]struct{} _ = x[TimestampTimeout-0] _ = x[HeightTimeout-1] - _ = x[FlushPackets-2] - _ = x[FlushAcknowledgements-3] + _ = x[Flush-2] } -const _Capability_name = "TimestampTimeoutHeightTimeoutFlushPacketsFlushAcknowledgements" +const _Capability_name = "TimestampTimeoutHeightTimeoutFlush" -var _Capability_index = [...]uint8{0, 16, 29, 41, 62} +var _Capability_index = [...]uint8{0, 16, 29, 34} func (i Capability) String() string { if i < 0 || i >= Capability(len(_Capability_index)-1) { diff --git a/relayer/docker.go b/relayer/docker.go index 9f7a5c2d1..01168d8fc 100644 --- a/relayer/docker.go +++ b/relayer/docker.go @@ -10,17 +10,19 @@ import ( "time" "github.com/docker/docker/api/types" - "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/network" volumetypes "github.com/docker/docker/api/types/volume" "github.com/docker/docker/client" "github.com/docker/docker/pkg/stdcopy" - "github.com/strangelove-ventures/interchaintest/v7/testutil" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/internal/dockerutil" + "github.com/strangelove-ventures/interchaintest/v7/testutil" "go.uber.org/zap" ) +const ( + defaultRlyHomeDirectory = "/home/relayer" +) + // DockerRelayer provides a common base for relayer implementations // that run on Docker. type DockerRelayer struct { @@ -39,10 +41,12 @@ type DockerRelayer struct { pullImage bool // The ID of the container created by StartRelayer. - containerID string + containerLifecycle *dockerutil.ContainerLifecycle // wallets contains a mapping of chainID to relayer wallet wallets map[string]ibc.Wallet + + homeDir string } var _ ibc.Relayer = (*DockerRelayer)(nil) @@ -65,12 +69,16 @@ func NewDockerRelayer(ctx context.Context, log *zap.Logger, testName string, cli wallets: map[string]ibc.Wallet{}, } + r.homeDir = defaultRlyHomeDirectory + for _, opt := range options { switch o := opt.(type) { case RelayerOptionDockerImage: r.customImage = &o.DockerImage case RelayerOptionImagePull: r.pullImage = o.Pull + case RelayerOptionHomeDir: + r.homeDir = o.HomeDir } } @@ -146,7 +154,7 @@ func (r *DockerRelayer) ReadFileFromHomeDir(ctx context.Context, relativePath st // Modify a toml config file in relayer home directory func (r *DockerRelayer) ModifyTomlConfigFile(ctx context.Context, relativePath string, modification testutil.Toml) error { - return testutil.ModifyTomlConfigFile(ctx, r.log, r.client, r.testName, r.volumeName, relativePath, modification) + return testutil.ModifyTomlConfigFile(ctx, r.log, r.client, r.testName, r.volumeName, relativePath, modification) } // AddWallet adds a stores a wallet for the given chain ID. @@ -226,14 +234,8 @@ func (r *DockerRelayer) CreateConnections(ctx context.Context, rep ibc.RelayerEx return res.Err } -func (r *DockerRelayer) FlushAcknowledgements(ctx context.Context, rep ibc.RelayerExecReporter, pathName, channelID string) error { - cmd := r.c.FlushAcknowledgements(pathName, channelID, r.HomeDir()) - res := r.Exec(ctx, rep, cmd, nil) - return res.Err -} - -func (r *DockerRelayer) FlushPackets(ctx context.Context, rep ibc.RelayerExecReporter, pathName, channelID string) error { - cmd := r.c.FlushPackets(pathName, channelID, r.HomeDir()) +func (r *DockerRelayer) Flush(ctx context.Context, rep ibc.RelayerExecReporter, pathName, channelID string) error { + cmd := r.c.Flush(pathName, channelID, r.HomeDir()) res := r.Exec(ctx, rep, cmd, nil) return res.Err } @@ -323,7 +325,6 @@ func (r *DockerRelayer) Exec(ctx context.Context, rep ibc.RelayerExecReporter, c func (r *DockerRelayer) RestoreKey(ctx context.Context, rep ibc.RelayerExecReporter, cfg ibc.ChainConfig, keyName, mnemonic string) error { chainID := cfg.ChainID coinType := cfg.CoinType - cmd := r.c.RestoreKey(chainID, keyName, coinType, mnemonic, r.HomeDir()) // Restoring a key should be near-instantaneous, so add a 1-minute timeout @@ -349,17 +350,40 @@ func (r *DockerRelayer) UpdateClients(ctx context.Context, rep ibc.RelayerExecRe } func (r *DockerRelayer) StartRelayer(ctx context.Context, rep ibc.RelayerExecReporter, pathNames ...string) error { - return r.createNodeContainer(ctx, pathNames...) + if r.containerLifecycle != nil { + return fmt.Errorf("tried to start relayer again without stopping first") + } + + containerImage := r.containerImage() + joinedPaths := strings.Join(pathNames, ".") + containerName := fmt.Sprintf("%s-%s", r.c.Name(), joinedPaths) + + cmd := r.c.StartRelayer(r.HomeDir(), pathNames...) + + r.containerLifecycle = dockerutil.NewContainerLifecycle(r.log, r.client, containerName) + + if err := r.containerLifecycle.CreateContainer( + ctx, r.testName, r.networkID, containerImage, nil, + r.Bind(), r.HostName(joinedPaths), cmd, + ); err != nil { + return err + } + + return r.containerLifecycle.StartContainer(ctx) } func (r *DockerRelayer) StopRelayer(ctx context.Context, rep ibc.RelayerExecReporter) error { - if err := r.stopContainer(ctx); err != nil { + if r.containerLifecycle == nil { + return nil + } + if err := r.containerLifecycle.StopContainer(ctx); err != nil { return err } stdoutBuf := new(bytes.Buffer) stderrBuf := new(bytes.Buffer) - rc, err := r.client.ContainerLogs(ctx, r.containerID, types.ContainerLogsOptions{ + containerID := r.containerLifecycle.ContainerID() + rc, err := r.client.ContainerLogs(ctx, containerID, types.ContainerLogsOptions{ ShowStdout: true, ShowStderr: true, Tail: "50", @@ -379,7 +403,7 @@ func (r *DockerRelayer) StopRelayer(ctx context.Context, rep ibc.RelayerExecRepo stdout := stdoutBuf.String() stderr := stderrBuf.String() - c, err := r.client.ContainerInspect(ctx, r.containerID) + c, err := r.client.ContainerInspect(ctx, containerID) if err != nil { return fmt.Errorf("StopRelayer: inspecting container: %w", err) } @@ -408,14 +432,17 @@ func (r *DockerRelayer) StopRelayer(ctx context.Context, rep ibc.RelayerExecRepo r.log.Debug( fmt.Sprintf("Stopped docker container\nstdout:\n%s\nstderr:\n%s", stdout, stderr), - zap.String("container_id", r.containerID), + zap.String("container_id", containerID), zap.String("container", c.Name), ) - return r.client.ContainerRemove(ctx, r.containerID, types.ContainerRemoveOptions{ - RemoveVolumes: true, - // TODO: should this set Force=true? - }) + if err := r.containerLifecycle.RemoveContainer(ctx); err != nil { + return err + } + + r.containerLifecycle = nil + + return nil } func (r *DockerRelayer) containerImage() ibc.DockerImage { @@ -444,54 +471,6 @@ func (r *DockerRelayer) pullContainerImageIfNecessary(containerImage ibc.DockerI return nil } -func (r *DockerRelayer) createNodeContainer(ctx context.Context, pathNames ...string) error { - containerImage := r.containerImage() - joinedPaths := strings.Join(pathNames, ".") - containerName := fmt.Sprintf("%s-%s", r.c.Name(), joinedPaths) - cmd := r.c.StartRelayer(r.HomeDir(), pathNames...) - r.log.Info( - "Running command", - zap.String("command", strings.Join(cmd, " ")), - zap.String("container", containerName), - ) - cc, err := r.client.ContainerCreate( - ctx, - &container.Config{ - Image: containerImage.Ref(), - - Entrypoint: []string{}, - Cmd: cmd, - - Hostname: r.HostName(joinedPaths), - User: r.c.DockerUser(), - - Labels: map[string]string{dockerutil.CleanupLabel: r.testName}, - }, - &container.HostConfig{ - Binds: r.Bind(), - AutoRemove: false, - }, - &network.NetworkingConfig{ - EndpointsConfig: map[string]*network.EndpointSettings{ - r.networkID: {}, - }, - }, - nil, - containerName, - ) - if err != nil { - return err - } - - r.containerID = cc.ID - return dockerutil.StartContainer(ctx, r.client, r.containerID) -} - -func (r *DockerRelayer) stopContainer(ctx context.Context) error { - timeout := 30 * time.Second - return r.client.ContainerStop(ctx, r.containerID, &timeout) -} - func (r *DockerRelayer) Name() string { return r.c.Name() + "-" + dockerutil.SanitizeContainerName(r.testName) } @@ -503,7 +482,7 @@ func (r *DockerRelayer) Bind() []string { // HomeDir returns the home directory of the relayer on the underlying Docker container's filesystem. func (r *DockerRelayer) HomeDir() string { - return "/home/relayer" + return r.homeDir } func (r *DockerRelayer) HostName(pathName string) string { @@ -562,8 +541,7 @@ type RelayerCommander interface { CreateChannel(pathName string, opts ibc.CreateChannelOptions, homeDir string) []string CreateClients(pathName string, opts ibc.CreateClientOptions, homeDir string) []string CreateConnections(pathName, homeDir string) []string - FlushAcknowledgements(pathName, channelID, homeDir string) []string - FlushPackets(pathName, channelID, homeDir string) []string + Flush(pathName, channelID, homeDir string) []string GeneratePath(srcChainID, dstChainID, pathName, homeDir string) []string UpdatePath(pathName, homeDir string, filter ibc.ChannelFilter) []string GetChannels(chainID, homeDir string) []string diff --git a/relayer/hermes/hermes_commander.go b/relayer/hermes/hermes_commander.go new file mode 100644 index 000000000..d73c018f5 --- /dev/null +++ b/relayer/hermes/hermes_commander.go @@ -0,0 +1,204 @@ +package hermes + +import ( + "context" + "encoding/json" + "fmt" + + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/relayer" + "go.uber.org/zap" + + ibcexported "github.com/cosmos/ibc-go/v7/modules/core/03-connection/types" + "github.com/cosmos/ibc-go/v7/modules/core/23-commitment/types" +) + +var _ relayer.RelayerCommander = &commander{} + +type commander struct { + log *zap.Logger +} + +func (c commander) Name() string { + return hermes +} + +func (c commander) DefaultContainerImage() string { + return defaultContainerImage +} + +func (c commander) DefaultContainerVersion() string { + return DefaultContainerVersion +} + +func (c commander) DockerUser() string { + return hermesDefaultUidGid +} + +func (c commander) ParseGetChannelsOutput(stdout, stderr string) ([]ibc.ChannelOutput, error) { + jsonBz := extractJsonResult([]byte(stdout)) + var result ChannelOutputResult + if err := json.Unmarshal(jsonBz, &result); err != nil { + return nil, err + } + + var ibcChannelOutput []ibc.ChannelOutput + for _, r := range result.Result { + ibcChannelOutput = append(ibcChannelOutput, ibc.ChannelOutput{ + State: r.ChannelEnd.State, + Ordering: r.ChannelEnd.Ordering, + Counterparty: ibc.ChannelCounterparty{ + PortID: r.CounterPartyChannelEnd.Remote.PortID, + ChannelID: r.CounterPartyChannelEnd.Remote.ChannelID, + }, + ConnectionHops: r.ChannelEnd.ConnectionHops, + Version: r.ChannelEnd.Version, + PortID: r.ChannelEnd.Remote.PortID, + ChannelID: r.ChannelEnd.Remote.ChannelID, + }) + } + + return ibcChannelOutput, nil +} + +func (c commander) ParseGetConnectionsOutput(stdout, stderr string) (ibc.ConnectionOutputs, error) { + jsonBz := extractJsonResult([]byte(stdout)) + var queryResult ConnectionQueryResult + if err := json.Unmarshal(jsonBz, &queryResult); err != nil { + return ibc.ConnectionOutputs{}, err + } + + var outputs ibc.ConnectionOutputs + for _, r := range queryResult.Result { + + var versions []*ibcexported.Version + for _, v := range r.ConnectionEnd.Versions { + versions = append(versions, &ibcexported.Version{ + Identifier: v.Identifier, + Features: v.Features, + }) + } + + outputs = append(outputs, &ibc.ConnectionOutput{ + ID: r.ConnectionID, + ClientID: r.ConnectionEnd.ClientID, + Versions: versions, + State: r.ConnectionEnd.State, + Counterparty: &ibcexported.Counterparty{ + ClientId: r.ConnectionEnd.Counterparty.ClientID, + ConnectionId: r.ConnectionEnd.Counterparty.ConnectionID, + Prefix: types.MerklePrefix{ + KeyPrefix: []byte(r.ConnectionEnd.Counterparty.Prefix), + }, + }, + }) + } + return outputs, nil +} + +func (c commander) ParseGetClientsOutput(stdout, stderr string) (ibc.ClientOutputs, error) { + jsonBz := extractJsonResult([]byte(stdout)) + var queryResult ClientQueryResult + if err := json.Unmarshal(jsonBz, &queryResult); err != nil { + return ibc.ClientOutputs{}, err + } + + var clientOutputs []*ibc.ClientOutput + for _, r := range queryResult.ClientResult { + clientOutputs = append(clientOutputs, &ibc.ClientOutput{ + ClientID: r.ClientID, + ClientState: ibc.ClientState{ + ChainID: r.ChainID, + }, + }) + } + + return clientOutputs, nil +} + +func (c commander) Init(homeDir string) []string { + return nil +} + +func (c commander) GetChannels(chainID, homeDir string) []string { + // the --verbose and --show-counterparty options are required to get enough information to correctly populate + // the path. + return []string{hermes, "--json", "query", "channels", "--chain", chainID, "--show-counterparty", "--verbose"} +} + +func (c commander) GetConnections(chainID, homeDir string) []string { + return []string{hermes, "--config", fmt.Sprintf("%s/%s", homeDir, hermesConfigPath), "--json", "query", "connections", "--chain", chainID, "--verbose"} +} + +func (c commander) GetClients(chainID, homeDir string) []string { + return []string{hermes, "--config", fmt.Sprintf("%s/%s", homeDir, hermesConfigPath), "--json", "query", "clients", "--host-chain", chainID} +} + +func (c commander) StartRelayer(homeDir string, pathNames ...string) []string { + return []string{hermes, "--config", fmt.Sprintf("%s/%s", homeDir, hermesConfigPath), "start", "--full-scan"} +} + +func (c commander) CreateWallet(keyName, address, mnemonic string) ibc.Wallet { + return NewWallet(keyName, address, mnemonic) +} + +func (c commander) UpdatePath(pathName, homeDir string, filter ibc.ChannelFilter) []string { + // TODO: figure out how to implement this. + panic("implement me") +} + +// the following methods do not have a single command that cleanly maps to a single hermes command without +// additional logic wrapping them. They have been implemented one layer up in the hermes relayer. + +func (c commander) UpdateClients(pathName, homeDir string) []string { + panic("update clients implemented in hermes relayer not the commander") +} + +func (c commander) GeneratePath(srcChainID, dstChainID, pathName, homeDir string) []string { + panic("generate path implemented in hermes relayer not the commander") +} + +func (c commander) LinkPath(pathName, homeDir string, channelOpts ibc.CreateChannelOptions, clientOpts ibc.CreateClientOptions) []string { + panic("link path implemented in hermes relayer not the commander") +} + +func (c commander) RestoreKey(chainID, keyName, coinType, mnemonic, homeDir string) []string { + panic("restore key implemented in hermes relayer not the commander") +} + +func (c commander) AddChainConfiguration(containerFilePath, homeDir string) []string { + panic("add chain configuration implemented in hermes relayer not the commander") +} + +func (c commander) AddKey(chainID, keyName, coinType, homeDir string) []string { + panic("add key implemented in hermes relayer not the commander") +} + +func (c commander) CreateChannel(pathName string, opts ibc.CreateChannelOptions, homeDir string) []string { + panic("create channel implemented in hermes relayer not the commander") +} + +func (c commander) CreateClients(pathName string, opts ibc.CreateClientOptions, homeDir string) []string { + panic("create clients implemented in hermes relayer not the commander") +} + +func (c commander) CreateConnections(pathName string, homeDir string) []string { + panic("create connections implemented in hermes relayer not the commander") +} + +func (c commander) Flush(pathName, channelID, homeDir string) []string { + panic("flush implemented in hermes relayer not the commander") +} + +func (c commander) ConfigContent(ctx context.Context, cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) { + panic("config content implemented in hermes relayer not the commander") +} + +func (c commander) ParseAddKeyOutput(stdout, stderr string) (ibc.Wallet, error) { + panic("add key implemented in Hermes Relayer") +} + +// ParseRestoreKeyOutput extracts the address from the hermes output. +func (c commander) ParseRestoreKeyOutput(stdout, stderr string) string { + panic("implemented in Hermes Relayer") +} diff --git a/relayer/hermes/hermes_config.go b/relayer/hermes/hermes_config.go new file mode 100644 index 000000000..50e1b9695 --- /dev/null +++ b/relayer/hermes/hermes_config.go @@ -0,0 +1,175 @@ +package hermes + +import ( + "fmt" + "strconv" + "strings" +) + + +// NewConfig returns a hermes Config with an entry for each of the provided ChainConfigs. +// The defaults were adapted from the sample config file found here: https://github.com/informalsystems/hermes/blob/master/config.toml +func NewConfig(chainConfigs ...ChainConfig) Config { + var chains []Chain + for _, hermesCfg := range chainConfigs { + chainCfg := hermesCfg.cfg + + gasPricesStr, err := strconv.ParseFloat(strings.ReplaceAll(chainCfg.GasPrices, chainCfg.Denom, ""), 32) + if err != nil { + panic(err) + } + + chains = append(chains, Chain{ + ID: chainCfg.ChainID, + RPCAddr: hermesCfg.rpcAddr, + GrpcAddr: fmt.Sprintf("http://%s", hermesCfg.grpcAddr), + WebsocketAddr: strings.ReplaceAll(fmt.Sprintf("%s/websocket", hermesCfg.rpcAddr), "http", "ws"), + RPCTimeout: "10s", + AccountPrefix: chainCfg.Bech32Prefix, + KeyName: hermesCfg.keyName, + AddressType: AddressType{ + Derivation: "cosmos", + }, + StorePrefix: "ibc", + DefaultGas: 100000, + MaxGas: 400000, + GasPrice: GasPrice{ + Price: gasPricesStr, + Denom: chainCfg.Denom, + }, + GasMultiplier: chainCfg.GasAdjustment, + MaxMsgNum: 30, + MaxTxSize: 2097152, + ClockDrift: "5s", + MaxBlockTime: "30s", + TrustingPeriod: "14days", + TrustThreshold: TrustThreshold{ + Numerator: "1", + Denominator: "3", + }, + MemoPrefix: "hermes", + }, + ) + } + + return Config{ + Global: Global{ + LogLevel: "info", + }, + Mode: Mode{ + Clients: Clients{ + Enabled: true, + Refresh: true, + Misbehaviour: true, + }, + Connections: Connections{ + Enabled: true, + }, + Channels: Channels{ + Enabled: true, + }, + Packets: Packets{ + Enabled: true, + ClearInterval: 0, + ClearOnStart: true, + TxConfirmation: false, + }, + }, + Rest: Rest{ + Enabled: false, + }, + Telemetry: Telemetry{ + Enabled: false, + }, + Chains: chains, + } +} + +type Config struct { + Global Global `toml:"global"` + Mode Mode `toml:"mode"` + Rest Rest `toml:"rest"` + Telemetry Telemetry `toml:"telemetry"` + Chains []Chain `toml:"chains"` +} + +type Global struct { + LogLevel string `toml:"log_level"` +} + +type Clients struct { + Enabled bool `toml:"enabled"` + Refresh bool `toml:"refresh"` + Misbehaviour bool `toml:"misbehaviour"` +} + +type Connections struct { + Enabled bool `toml:"enabled"` +} + +type Channels struct { + Enabled bool `toml:"enabled"` +} + +type Packets struct { + Enabled bool `toml:"enabled"` + ClearInterval int `toml:"clear_interval"` + ClearOnStart bool `toml:"clear_on_start"` + TxConfirmation bool `toml:"tx_confirmation"` +} + +type Mode struct { + Clients Clients `toml:"clients"` + Connections Connections `toml:"connections"` + Channels Channels `toml:"channels"` + Packets Packets `toml:"packets"` +} + +type Rest struct { + Enabled bool `toml:"enabled"` + Host string `toml:"host"` + Port int `toml:"port"` +} + +type Telemetry struct { + Enabled bool `toml:"enabled"` + Host string `toml:"host"` + Port int `toml:"port"` +} + +type AddressType struct { + Derivation string `toml:"derivation"` +} + +type GasPrice struct { + Price float64 `toml:"price"` + Denom string `toml:"denom"` +} + +type TrustThreshold struct { + Numerator string `toml:"numerator"` + Denominator string `toml:"denominator"` +} + +type Chain struct { + ID string `toml:"id"` + RPCAddr string `toml:"rpc_addr"` + GrpcAddr string `toml:"grpc_addr"` + WebsocketAddr string `toml:"websocket_addr"` + RPCTimeout string `toml:"rpc_timeout"` + AccountPrefix string `toml:"account_prefix"` + KeyName string `toml:"key_name"` + AddressType AddressType `toml:"address_type"` + StorePrefix string `toml:"store_prefix"` + DefaultGas int `toml:"default_gas"` + MaxGas int `toml:"max_gas"` + GasPrice GasPrice `toml:"gas_price"` + GasMultiplier float64 `toml:"gas_multiplier"` + MaxMsgNum int `toml:"max_msg_num"` + MaxTxSize int `toml:"max_tx_size"` + ClockDrift string `toml:"clock_drift"` + MaxBlockTime string `toml:"max_block_time"` + TrustingPeriod string `toml:"trusting_period"` + TrustThreshold TrustThreshold `toml:"trust_threshold"` + MemoPrefix string `toml:"memo_prefix,omitempty"` +} diff --git a/relayer/hermes/hermes_relayer.go b/relayer/hermes/hermes_relayer.go new file mode 100644 index 000000000..d2b1e62ba --- /dev/null +++ b/relayer/hermes/hermes_relayer.go @@ -0,0 +1,303 @@ +package hermes + +import ( + "context" + "encoding/json" + "fmt" + "regexp" + "strings" + "time" + + "github.com/docker/docker/client" + "github.com/pelletier/go-toml" + "github.com/strangelove-ventures/interchaintest/v7/ibc" + "github.com/strangelove-ventures/interchaintest/v7/relayer" + "go.uber.org/zap" +) + +const ( + hermes = "hermes" + defaultContainerImage = "docker.io/informalsystems/hermes" + DefaultContainerVersion = "1.2.0" + + hermesDefaultUidGid = "1000:1000" + hermesHome = "/home/hermes" + hermesConfigPath = ".hermes/config.toml" +) + +var ( + _ ibc.Relayer = &Relayer{} + // parseRestoreKeyOutputPattern extracts the address from the hermes output. + // SUCCESS Restored key 'g2-2' (cosmos1czklnpzwaq3hfxtv6ne4vas2p9m5q3p3fgkz8e) on chain g2-2 + parseRestoreKeyOutputPattern = regexp.MustCompile(`\((.*)\)`) +) + +// Relayer is the ibc.Relayer implementation for hermes. +type Relayer struct { + *relayer.DockerRelayer + paths map[string]*pathConfiguration + chainConfigs []ChainConfig +} + +// ChainConfig holds all values required to write an entry in the "chains" section in the hermes config file. +type ChainConfig struct { + cfg ibc.ChainConfig + keyName, rpcAddr, grpcAddr string +} + +// pathConfiguration represents the concept of a "path" which is implemented at the interchain test level rather +// than the hermes level. +type pathConfiguration struct { + chainA, chainB pathChainConfig +} + +// pathChainConfig holds all values that will be required when interacting with a path. +type pathChainConfig struct { + chainID string + clientID string + connectionID string + portID string +} + +// NewHermesRelayer returns a new hermes relayer. +func NewHermesRelayer(log *zap.Logger, testName string, cli *client.Client, networkID string, options ...relayer.RelayerOption) *Relayer { + c := commander{log: log} + options = append(options, relayer.HomeDir(hermesHome)) + dr, err := relayer.NewDockerRelayer(context.TODO(), log, testName, cli, networkID, c, options...) + if err != nil { + panic(err) + } + + return &Relayer{ + DockerRelayer: dr, + } +} + +// AddChainConfiguration is called once per chain configuration, which means that in the case of hermes, the single +// config file is overwritten with a new entry each time this function is called. +func (r *Relayer) AddChainConfiguration(ctx context.Context, rep ibc.RelayerExecReporter, chainConfig ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) error { + configContent, err := r.configContent(chainConfig, keyName, rpcAddr, grpcAddr) + if err != nil { + return fmt.Errorf("failed to generate config content: %w", err) + } + + if err := r.WriteFileToHomeDir(ctx, hermesConfigPath, configContent); err != nil { + return fmt.Errorf("failed to write hermes config: %w", err) + } + + return r.validateConfig(ctx, rep) +} + +// LinkPath performs the operations that happen when a path is linked. This includes creating clients, creating connections +// and establishing a channel. This happens across multiple operations rather than a single link path cli command. +func (r *Relayer) LinkPath(ctx context.Context, rep ibc.RelayerExecReporter, pathName string, channelOpts ibc.CreateChannelOptions, clientOpts ibc.CreateClientOptions) error { + _, ok := r.paths[pathName] + if !ok { + return fmt.Errorf("path %s not found", pathName) + } + + if err := r.CreateClients(ctx, rep, pathName, clientOpts); err != nil { + return err + } + + if err := r.CreateConnections(ctx, rep, pathName); err != nil { + return err + } + + if err := r.CreateChannel(ctx, rep, pathName, channelOpts); err != nil { + return err + } + + return nil +} + +func (r *Relayer) CreateChannel(ctx context.Context, rep ibc.RelayerExecReporter, pathName string, opts ibc.CreateChannelOptions) error { + pathConfig := r.paths[pathName] + cmd := []string{hermes, "--json", "create", "channel", "--a-chain", pathConfig.chainA.chainID, "--a-port", opts.SourcePortName, "--b-port", opts.DestPortName, "--a-connection", pathConfig.chainA.connectionID} + res := r.Exec(ctx, rep, cmd, nil) + if res.Err != nil { + return res.Err + } + pathConfig.chainA.portID = opts.SourcePortName + pathConfig.chainB.portID = opts.DestPortName + return nil +} + +func (r *Relayer) CreateConnections(ctx context.Context, rep ibc.RelayerExecReporter, pathName string) error { + pathConfig := r.paths[pathName] + cmd := []string{hermes, "--json", "create", "connection", "--a-chain", pathConfig.chainA.chainID, "--a-client", pathConfig.chainA.clientID, "--b-client", pathConfig.chainB.clientID} + + res := r.Exec(ctx, rep, cmd, nil) + if res.Err != nil { + return res.Err + } + + chainAConnectionID, chainBConnectionID, err := getConnectionIDsFromStdout(res.Stdout) + if err != nil { + return err + } + pathConfig.chainA.connectionID = chainAConnectionID + pathConfig.chainB.connectionID = chainBConnectionID + return res.Err +} + +func (r *Relayer) UpdateClients(ctx context.Context, rep ibc.RelayerExecReporter, pathName string) error { + pathConfig, ok := r.paths[pathName] + if !ok { + return fmt.Errorf("path %s not found", pathName) + } + updateChainACmd := []string{hermes, "--json", "update", "client", "--host-chain", pathConfig.chainA.chainID, "--client", pathConfig.chainA.clientID} + res := r.Exec(ctx, rep, updateChainACmd, nil) + if res.Err != nil { + return res.Err + } + updateChainBCmd := []string{hermes, "--json", "update", "client", "--host-chain", pathConfig.chainB.chainID, "--client", pathConfig.chainB.clientID} + return r.Exec(ctx, rep, updateChainBCmd, nil).Err +} + +// CreateClients creates clients on both chains. +// Note: in the go relayer this can be done with a single command using the path reference, +// however in Hermes this needs to be done as two separate commands. +func (r *Relayer) CreateClients(ctx context.Context, rep ibc.RelayerExecReporter, pathName string, opts ibc.CreateClientOptions) error { + pathConfig := r.paths[pathName] + chainACreateClientCmd := []string{hermes, "--json", "create", "client", "--host-chain", pathConfig.chainA.chainID, "--reference-chain", pathConfig.chainB.chainID} + res := r.Exec(ctx, rep, chainACreateClientCmd, nil) + if res.Err != nil { + return res.Err + } + + chainAClientId, err := getClientIdFromStdout(res.Stdout) + if err != nil { + return err + } + pathConfig.chainA.clientID = chainAClientId + + chainBCreateClientCmd := []string{hermes, "--json", "create", "client", "--host-chain", pathConfig.chainB.chainID, "--reference-chain", pathConfig.chainA.chainID} + res = r.Exec(ctx, rep, chainBCreateClientCmd, nil) + if res.Err != nil { + return res.Err + } + + chainBClientId, err := getClientIdFromStdout(res.Stdout) + if err != nil { + return err + } + pathConfig.chainB.clientID = chainBClientId + + return res.Err +} + +// RestoreKey restores a key from a mnemonic. In hermes, you must provide a file containing the mnemonic. We need +// to copy the contents of the mnemonic into a file on disk and then reference the newly created file. +func (r *Relayer) RestoreKey(ctx context.Context, rep ibc.RelayerExecReporter, cfg ibc.ChainConfig, keyName, mnemonic string) error { + chainID := cfg.ChainID + relativeMnemonicFilePath := fmt.Sprintf("%s/mnemonic.txt", chainID) + if err := r.WriteFileToHomeDir(ctx, relativeMnemonicFilePath, []byte(mnemonic)); err != nil { + return fmt.Errorf("failed to write mnemonic file: %w", err) + } + + cmd := []string{hermes, "keys", "add", "--chain", chainID, "--mnemonic-file", fmt.Sprintf("%s/%s", r.HomeDir(), relativeMnemonicFilePath), "--key-name", keyName} + + // Restoring a key should be near-instantaneous, so add a 1-minute timeout + // to detect if Docker has hung. + ctx, cancel := context.WithTimeout(ctx, time.Minute) + defer cancel() + + res := r.Exec(ctx, rep, cmd, nil) + if res.Err != nil { + return res.Err + } + + addrBytes := parseRestoreKeyOutput(string(res.Stdout)) + r.AddWallet(chainID, NewWallet(chainID, addrBytes, mnemonic)) + return nil +} + +func (r *Relayer) Flush(ctx context.Context, rep ibc.RelayerExecReporter, pathName string, channelID string) error { + path := r.paths[pathName] + cmd := []string{hermes, "clear", "packets", "--chain", path.chainA.chainID, "--channel", channelID, "--port", path.chainA.portID} + res := r.Exec(ctx, rep, cmd, nil) + return res.Err +} + +// GeneratePath establishes an in memory path representation. The concept does not exist in hermes, so it is handled +// at the interchain test level. +func (r *Relayer) GeneratePath(ctx context.Context, rep ibc.RelayerExecReporter, srcChainID, dstChainID, pathName string) error { + if r.paths == nil { + r.paths = map[string]*pathConfiguration{} + } + r.paths[pathName] = &pathConfiguration{ + chainA: pathChainConfig{ + chainID: srcChainID, + }, + chainB: pathChainConfig{ + chainID: dstChainID, + }, + } + return nil +} + +// configContent returns the contents of the hermes config file as a byte array. Note: as hermes expects a single file +// rather than multiple config files, we need to maintain a list of chain configs each time they are added to write the +// full correct file update calling Relayer.AddChainConfiguration. +func (r *Relayer) configContent(cfg ibc.ChainConfig, keyName, rpcAddr, grpcAddr string) ([]byte, error) { + r.chainConfigs = append(r.chainConfigs, ChainConfig{ + cfg: cfg, + keyName: keyName, + rpcAddr: rpcAddr, + grpcAddr: grpcAddr, + }) + hermesConfig := NewConfig(r.chainConfigs...) + bz, err := toml.Marshal(hermesConfig) + if err != nil { + return nil, err + } + return bz, nil +} + +// validateConfig validates the hermes config file. Any errors are propagated to the test. +func (r *Relayer) validateConfig(ctx context.Context, rep ibc.RelayerExecReporter) error { + cmd := []string{hermes, "--config", fmt.Sprintf("%s/%s", r.HomeDir(), hermesConfigPath), "config", "validate"} + res := r.Exec(ctx, rep, cmd, nil) + if res.Err != nil { + return res.Err + } + return nil +} + +// extractJsonResult extracts the json result for the hermes query. +func extractJsonResult(stdout []byte) []byte { + stdoutLines := strings.Split(string(stdout), "\n") + var jsonOutput string + for _, line := range stdoutLines { + if strings.Contains(line, "result") { + jsonOutput = line + break + } + } + return []byte(jsonOutput) +} + +// getClientIdFromStdout extracts the client ID from stdout. +func getClientIdFromStdout(stdout []byte) (string, error) { + var clientCreationResult ClientCreationResponse + if err := json.Unmarshal(extractJsonResult(stdout), &clientCreationResult); err != nil { + return "", err + } + return clientCreationResult.Result.CreateClient.ClientID, nil +} + +// getConnectionIDsFromStdout extracts the connectionIDs on both ends from the stdout. +func getConnectionIDsFromStdout(stdout []byte) (string, string, error) { + var connectionResponse ConnectionResponse + if err := json.Unmarshal(extractJsonResult(stdout), &connectionResponse); err != nil { + return "", "", err + } + return connectionResponse.Result.ASide.ConnectionID, connectionResponse.Result.BSide.ConnectionID, nil +} + +// parseRestoreKeyOutput extracts the address from the hermes output. +func parseRestoreKeyOutput(stdout string) string { + fullMatchIdx, addressGroupIdx := 0, 1 + return parseRestoreKeyOutputPattern.FindAllStringSubmatch(stdout, -1)[fullMatchIdx][addressGroupIdx] +} diff --git a/relayer/hermes/hermes_types.go b/relayer/hermes/hermes_types.go new file mode 100644 index 000000000..0a13c286c --- /dev/null +++ b/relayer/hermes/hermes_types.go @@ -0,0 +1,95 @@ +package hermes + +// ClientCreationResponse contains the minimum required values to extract the client id from the hermes response. +type ClientCreationResponse struct { + Result CreateClientResult `json:"result"` +} + +type CreateClient struct { + ClientID string `json:"client_id"` + ClientType string `json:"client_type"` +} + +type CreateClientResult struct { + CreateClient CreateClient `json:"CreateClient"` +} + +// ConnectionResponse contains the minimum required values to extract the connection id from both sides. +type ConnectionResponse struct { + Result ConnectionResult `json:"result"` +} + +type ConnectionResult struct { + ASide ConnectionSide `json:"a_side"` + BSide ConnectionSide `json:"b_side"` +} + +type ConnectionSide struct { + ConnectionID string `json:"connection_id"` +} + +// ChannelOutputResult contains the minimum required channel values. +type ChannelOutputResult struct { + Result []ChannelResult `json:"result"` +} + +type ChannelResult struct { + ChannelEnd ChannelEnd `json:"channel_end"` + CounterPartyChannelEnd ChannelEnd `json:"counterparty_channel_end"` +} + +type ChannelEnd struct { + ConnectionHops []string `json:"connection_hops"` + Ordering string `json:"ordering"` + State string `json:"state"` + Version string `json:"version"` + Remote ChannelAndPortId `json:"remote"` +} + +type ChannelAndPortId struct { + ChannelID string `json:"channel_id"` + PortID string `json:"port_id"` +} + +type ConnectionQueryResult struct { + Result []Result `json:"result"` + Status string `json:"status"` +} + +type Counterparty struct { + ClientID string `json:"client_id"` + ConnectionID string `json:"connection_id"` + Prefix string `json:"prefix"` +} + +type DelayPeriod struct { + Nanos int `json:"nanos"` + Secs int `json:"secs"` +} + +type Versions struct { + Features []string `json:"features"` + Identifier string `json:"identifier"` +} + +type ConnectionEnd struct { + ClientID string `json:"client_id"` + Counterparty Counterparty `json:"counterparty"` + DelayPeriod DelayPeriod `json:"delay_period"` + State string `json:"state"` + Versions []Versions `json:"versions"` +} + +type Result struct { + ConnectionEnd ConnectionEnd `json:"connection_end"` + ConnectionID string `json:"connection_id"` +} + +type ClientQueryResult struct { + ClientResult []ClientResult `json:"result"` +} + +type ClientResult struct { + ChainID string `json:"chain_id"` + ClientID string `json:"client_id"` +} diff --git a/relayer/hermes/hermes_wallet.go b/relayer/hermes/hermes_wallet.go new file mode 100644 index 000000000..f3742cd7a --- /dev/null +++ b/relayer/hermes/hermes_wallet.go @@ -0,0 +1,42 @@ +package hermes + +import "github.com/strangelove-ventures/interchaintest/v7/ibc" + +var _ ibc.Wallet = &Wallet{} + +type WalletModel struct { + Mnemonic string `json:"mnemonic"` + Address string `json:"address"` +} + +type Wallet struct { + mnemonic string + address string + keyName string +} + +func NewWallet(keyname string, address string, mnemonic string) *Wallet { + return &Wallet{ + mnemonic: mnemonic, + address: address, + keyName: keyname, + } +} + +func (w *Wallet) KeyName() string { + return w.keyName +} + +func (w *Wallet) FormattedAddress() string { + return w.address +} + +// Get mnemonic, only used for relayer wallets +func (w *Wallet) Mnemonic() string { + return w.mnemonic +} + +// Get Address +func (w *Wallet) Address() []byte { + return []byte(w.address) +} diff --git a/relayer/hyperspace/hyperspace_commander.go b/relayer/hyperspace/hyperspace_commander.go index 4d76d33fe..17414a0f8 100644 --- a/relayer/hyperspace/hyperspace_commander.go +++ b/relayer/hyperspace/hyperspace_commander.go @@ -18,9 +18,9 @@ import ( // hyperspaceCommander satisfies relayer.RelayerCommander. type hyperspaceCommander struct { - log *zap.Logger - paths map[string]*pathConfiguration - extraStartFlags []string + log *zap.Logger + paths map[string]*pathConfiguration + extraStartFlags []string } // pathConfiguration represents the concept of a "path" which is implemented at the interchain test level rather @@ -385,7 +385,11 @@ func (hyperspaceCommander) CreateWallet(keyName, address, mnemonic string) ibc.W return NewWallet("", kp.Address, mnemonic) } +func (hyperspaceCommander) Flush(pathName, channelID, homeDir string) []string { + panic("flush implemented in hyperspace not the commander") +} + func configPath(homeDir, chainID string) string { chainConfigFile := chainID + ".config" return path.Join(homeDir, chainConfigFile) -} \ No newline at end of file +} diff --git a/relayer/hyperspace/hyperspace_relayer.go b/relayer/hyperspace/hyperspace_relayer.go index 41609afb3..4ee6d14fb 100644 --- a/relayer/hyperspace/hyperspace_relayer.go +++ b/relayer/hyperspace/hyperspace_relayer.go @@ -8,13 +8,14 @@ import ( "time" "github.com/docker/docker/client" + "github.com/pelletier/go-toml/v2" "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/relayer" - "github.com/pelletier/go-toml/v2" "go.uber.org/zap" ) var _ ibc.Relayer = &HyperspaceRelayer{} + // ******* DockerRelayer methods that will panic in hyperspace commander, no overrides yet ******* // FlushAcknowledgements() - no hyperspace implementation yet // FlushPackets() - no hypersapce implementation yet @@ -22,7 +23,6 @@ var _ ibc.Relayer = &HyperspaceRelayer{} // UpdateClients() - no hyperspace implementation yet // AddKey() - no hyperspace implementation yet - // HyperspaceRelayer is the ibc.Relayer implementation for github.com/ComposableFi/hyperspace. type HyperspaceRelayer struct { // Embedded DockerRelayer so commands just work. @@ -130,7 +130,7 @@ func (r *HyperspaceRelayer) SetClientContractHash(ctx context.Context, rep ibc.R case "cosmos": config.(*HyperspaceRelayerCosmosChainConfig).WasmCodeId = hash } - + return r.SetRelayerChainConfig(ctx, chainConfigFile, config) } @@ -139,7 +139,7 @@ func (r *HyperspaceRelayer) PrintCoreConfig(ctx context.Context, rep ibc.Relayer "cat", path.Join(r.HomeDir(), "core.config"), } - + ctx, cancel := context.WithTimeout(ctx, time.Minute) defer cancel() res := r.Exec(ctx, rep, cmd, nil) @@ -155,7 +155,7 @@ func (r *HyperspaceRelayer) PrintConfigs(ctx context.Context, rep ibc.RelayerExe "cat", path.Join(r.HomeDir(), chainID+".config"), } - + ctx, cancel := context.WithTimeout(ctx, time.Minute) defer cancel() res := r.Exec(ctx, rep, cmd, nil) @@ -166,7 +166,6 @@ func (r *HyperspaceRelayer) PrintConfigs(ctx context.Context, rep ibc.RelayerExe return nil } - func (r *HyperspaceRelayer) GetRelayerChainConfig( ctx context.Context, filePath string, @@ -176,20 +175,20 @@ func (r *HyperspaceRelayer) GetRelayerChainConfig( if err != nil { return nil, err } - + switch chainType { - case "cosmos": - var config HyperspaceRelayerCosmosChainConfig - if err := toml.Unmarshal(configRaw, &config); err != nil { - return nil, fmt.Errorf("failed to unmarshal %s: %w", filePath, err) - } - return &config, nil - case "polkadot": - var config HyperspaceRelayerSubstrateChainConfig - if err := toml.Unmarshal(configRaw, &config); err != nil { - return nil, fmt.Errorf("failed to unmarshal %s: %w", filePath, err) - } - return &config, nil + case "cosmos": + var config HyperspaceRelayerCosmosChainConfig + if err := toml.Unmarshal(configRaw, &config); err != nil { + return nil, fmt.Errorf("failed to unmarshal %s: %w", filePath, err) + } + return &config, nil + case "polkadot": + var config HyperspaceRelayerSubstrateChainConfig + if err := toml.Unmarshal(configRaw, &config); err != nil { + return nil, fmt.Errorf("failed to unmarshal %s: %w", filePath, err) + } + return &config, nil } return nil, fmt.Errorf("unsupported chain config: %s", chainType) } @@ -204,4 +203,4 @@ func (r *HyperspaceRelayer) SetRelayerChainConfig( } return r.WriteFileToHomeDir(ctx, filePath, bytes) -} \ No newline at end of file +} diff --git a/relayer/options.go b/relayer/options.go index 659140f30..fdbb73ec9 100644 --- a/relayer/options.go +++ b/relayer/options.go @@ -16,6 +16,13 @@ type RelayerOptionDockerImage struct { DockerImage ibc.DockerImage } +// RelayerOptionHomeDir allows the configuration of the relayer home directory. +type RelayerOptionHomeDir struct { + HomeDir string +} + +func (r RelayerOptionHomeDir) relayerOption() {} + // CustomDockerImage overrides the default relayer docker image. // uidGid is the uid:gid format owner that should be used within the container. // If uidGid is empty, root user will be assumed. @@ -29,6 +36,10 @@ func CustomDockerImage(repository string, version string, uidGid string) Relayer } } +func HomeDir(homeDir string) RelayerOption { + return RelayerOptionHomeDir{HomeDir: homeDir} +} + func (opt RelayerOptionDockerImage) relayerOption() {} type RelayerOptionImagePull struct { diff --git a/relayer/rly/cosmos_relayer.go b/relayer/rly/cosmos_relayer.go index 57528d4d2..5a148e912 100644 --- a/relayer/rly/cosmos_relayer.go +++ b/relayer/rly/cosmos_relayer.go @@ -14,7 +14,9 @@ import ( "go.uber.org/zap" ) -const RlyDefaultUidGid = "100:1000" +const ( + RlyDefaultUidGid = "100:1000" +) // CosmosRelayer is the ibc.Relayer implementation for github.com/cosmos/relayer. type CosmosRelayer struct { @@ -64,7 +66,7 @@ type CosmosRelayerChainConfig struct { const ( DefaultContainerImage = "ghcr.io/cosmos/relayer" - DefaultContainerVersion = "v2.2.0-rc3" + DefaultContainerVersion = "andrew-config_file_lock_for_all_writes" ) // Capabilities returns the set of capabilities of the Cosmos relayer. @@ -155,25 +157,23 @@ func (commander) CreateClient(pathName, homeDir, customeClientTrustingPeriod str } } -func (commander) CreateConnections(pathName, homeDir string) []string { +func (commander) CreateConnections(pathName string, homeDir string) []string { return []string{ "rly", "tx", "connection", pathName, "--home", homeDir, } } -func (commander) FlushAcknowledgements(pathName, channelID, homeDir string) []string { - return []string{ - "rly", "tx", "relay-acks", pathName, channelID, - "--home", homeDir, - } -} - -func (commander) FlushPackets(pathName, channelID, homeDir string) []string { - return []string{ - "rly", "tx", "relay-pkts", pathName, channelID, - "--home", homeDir, +func (commander) Flush(pathName, channelID, homeDir string) []string { + cmd := []string{"rly", "tx", "flush"} + if pathName != "" { + cmd = append(cmd, pathName) + if channelID != "" { + cmd = append(cmd, channelID) + } } + cmd = append(cmd, "--home", homeDir) + return cmd } func (commander) GeneratePath(srcChainID, dstChainID, pathName, homeDir string) []string { diff --git a/relayerfactory.go b/relayerfactory.go index e78c61ea1..fb5c896df 100644 --- a/relayerfactory.go +++ b/relayerfactory.go @@ -8,8 +8,9 @@ import ( "github.com/strangelove-ventures/interchaintest/v7/ibc" "github.com/strangelove-ventures/interchaintest/v7/label" "github.com/strangelove-ventures/interchaintest/v7/relayer" - "github.com/strangelove-ventures/interchaintest/v7/relayer/rly" + "github.com/strangelove-ventures/interchaintest/v7/relayer/hermes" "github.com/strangelove-ventures/interchaintest/v7/relayer/hyperspace" + "github.com/strangelove-ventures/interchaintest/v7/relayer/rly" "go.uber.org/zap" ) @@ -74,6 +75,8 @@ func (f builtinRelayerFactory) Build( networkID, f.options..., ) + case ibc.Hermes: + return hermes.NewHermesRelayer(f.log, t.Name(), cli, networkID, f.options...) default: panic(fmt.Errorf("RelayerImplementation %v unknown", f.impl)) } @@ -92,6 +95,14 @@ func (f builtinRelayerFactory) Name() string { } } return "rly@" + rly.DefaultContainerVersion + case ibc.Hermes: + for _, opt := range f.options { + switch o := opt.(type) { + case relayer.RelayerOptionDockerImage: + return "hermes@" + o.DockerImage.Version + } + } + return "hermes@" + hermes.DefaultContainerVersion default: panic(fmt.Errorf("RelayerImplementation %v unknown", f.impl)) } @@ -101,6 +112,8 @@ func (f builtinRelayerFactory) Labels() []label.Relayer { switch f.impl { case ibc.CosmosRly: return []label.Relayer{label.Rly} + case ibc.Hermes: + return []label.Relayer{label.Hermes} default: panic(fmt.Errorf("RelayerImplementation %v unknown", f.impl)) } @@ -112,6 +125,9 @@ func (f builtinRelayerFactory) Capabilities() map[relayer.Capability]bool { switch f.impl { case ibc.CosmosRly: return rly.Capabilities() + case ibc.Hermes: + // TODO: specify capability for hermes. + return rly.Capabilities() default: panic(fmt.Errorf("RelayerImplementation %v unknown", f.impl)) } diff --git a/test_setup.go b/test_setup.go index 7fcda58cd..18298b532 100644 --- a/test_setup.go +++ b/test_setup.go @@ -128,10 +128,8 @@ func StopStartRelayerWithPreStartFuncs( return nil, fmt.Errorf("failed to start relayer: %w", err) } } else { - for _, path := range pathNames { - if err := relayerImpl.StartRelayer(ctx, eRep, path); err != nil { - return nil, fmt.Errorf("failed to start relayer: %w", err) - } + if err := relayerImpl.StartRelayer(ctx, eRep, pathNames...); err != nil { + return nil, fmt.Errorf("failed to start relayer: %w", err) } }